Senden Sie eine Zeichenfolge an einen server von einem client in C#
Schreibe ich ein einfaches test-Programm sendet einen string vom client zum server und zeigt dann den text an das server-Programm. Wie würde ich gehen über das tun dies.
Hier ist mein client-code.
using System;
using System.Net;
using System.Net.Sockets;
class client
{
static String hostName = Dns.GetHostName();
public static void Main(String[] args)
{
String test = Console.ReadLine();
IPHostEntry ipEntry = Dns.GetHostByName(hostName);
IPAddress[] addr = ipEntry.AddressList;
//The first one in the array is the ip address of the hostname
IPAddress ipAddress = addr[0];
TcpClient client = new TcpClient();
//First parameter is Hostname or IP, second parameter is port on which server is listening
client.Connect(ipAddress, 8);
client.Close();
}
}
Hier ist mein server code
using System;
using System.Net;
using System.Net.Sockets;
class server
{
static int port = 8;
static String hostName = Dns.GetHostName();
static IPAddress ipAddress;
public static void Main(String[] args)
{
IPHostEntry ipEntry = Dns.GetHostByName(hostName);
//Get a list of possible ip addresses
IPAddress[] addr = ipEntry.AddressList;
//The first one in the array is the ip address of the hostname
ipAddress = addr[0];
TcpListener server = new TcpListener(ipAddress,port);
Console.Write("Listening for Connections on " + hostName + "...\n");
//start listening for connections
server.Start();
//Accept the connection from the client, you are now connected
Socket connection = server.AcceptSocket();
Console.Write("You are now connected to the server\n\n");
int pauseTime = 10000;
System.Threading.Thread.Sleep(pauseTime);
connection.Close();
}
}
InformationsquelleAutor Steffan Harris | 2011-02-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die
Senden
undErhalten
überlastungen aufSocket
. Die asynchrone version ist auch vorhanden, durch dieBeginSomething
&EndSomething
Methoden.Senden Sie raw-bytes, so müssen Sie entscheiden, auf ein Protokoll, jedoch einfach. Senden Sie text, wählen Sie eine Zeichencodierung (ich würde UTF-8) und die roh-bytes mit
- Kodierung.GetBytes
.Beispiel:
UTF8 ist eine statische Eigenschaft, die auf die
Encoding
Klasse, es ist für Ihre Bequemlichkeit.Können Sie senden die Daten an den server/client mit:
Erhalten:
Sieht dies einfach aus, aber es gibt Vorbehalte. Die Verbindung kann jederzeit gelöscht werden, so müssen Sie bereit sein für Ausnahmen, insbesondere
SocketException
. Auch wenn man sich an den Beispielen können Sie sehen, dass ich zwei Variablensent
undreceived
. Sie halten, wie viele bytesSend
undReceive
tatsächlich gesendet werden. Verlassen Sie sich nicht auf den socket senden oder empfangen alle Daten (vor allem nicht, wenn empfangen, was, wenn die andere Partei gesendet, weniger als Sie erwartet haben?)Einen Weg, dies zu tun ist zu loop und senden, bis alle Daten angezeigt, wie gesendet:
Send
undReceive
sind synchron, Sie zu blockieren, bis Sie gesendet haben, etwas. Sollten Sie vielleicht irgendeine Art von timeout-Wert auf den sockel (Socket.SendTimeout & Socket.ReceiveTimeout.) Der Standardwert ist 0, was bedeutet, dass Sie immer blockieren.Nun, wie zu empfangen? Lassen Sie uns versuchen zu tun, eine ähnliche Schleife.
Hmm. Gut... was passiert, wenn der client sendet weniger als 100? Wir würden blockieren, bis es auf den timeout, wenn es einer ist, oder der client sendet genug Daten. Was geschieht, wenn der Kunde sendet mehr als 100? Sie erhalten nur die ersten 100 bytes.
In Ihrem Fall können wir versuchen, die Lesung von sehr kleinen Mengen und zu drucken. Lesen, ausdrucken, Schleife:
Hier sagen wir "empfangen von Daten in 16 byte-Blöcken so lange wie sunIsBurning, decode UTF-8". Dies bedeutet, dass die Daten gesendet werden, indem die andere Partei muss in UTF-8, oder es wird eine Ausnahme (sollte es wohl auch sein gefangen durch Sie) Dies bedeutet auch, dass der server nur unterbinden, wenn die Verbindung fehlschlägt.
Wenn Sie erhalten haben 15 bytes und der client killt die Verbindung, diese 15 bytes werden nie gedruckt. Sie brauchen eine bessere Fehlerbehandlung 🙂
Nicht abgefangene Ausnahme wird töten Ihre Anwendung in den meisten Fällen nicht wünschenswert, für einen server.
"Verbindung versagt" könnte bedeuten,eine Menge Dinge, könnte es sein, dass die Verbindung zurückgesetzt wurde durch die peer-oder Netzwerk-Karte Feuer gefangen.
InformationsquelleAutor Skurmedel