TCP-Client Daten erhalten Sie durch Ereignis-handler
Arbeite ich mit einem TCP-client, um zu lernen, wie verwenden Sie die TCPSocket-Funktion in VS2010 C#. Ich kann rufen Sie die read () - Funktion zum Lesen der Daten. Das Teil funktioniert alles. Was ich nicht verstehen ist, wie die client bis reinhören und posten, die eingehenden Daten in eine text-box, ohne den Aufruf der Funktion manuell oder über einen timer. Ich möchte diese behandelt mit einem event-handler, aber an diesem Punkt habe ich einfach nur komplett verwirrt mich und jetzt brauche ich einige Hinweise.
Ich bin mit einem client-Beispiel fand ich auf der MSDN-Website, um mir zu helfen zu verstehen, wie die Funktion arbeitet, um ein grundlegendes Lesen.
private static void Receive(Socket client) {
try {
//Create the state object.
StateObject state = new StateObject();
state.workSocket = client;
//Begin receiving the data from the remote device.
client.BeginReceive( state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReceiveCallback), state);
} catch (Exception e) {
Console.WriteLine(e.ToString());
}
}
Auf eine andere stackoverflow-post fand ich Matt Davis bot eine Beispiel mit Hilfe einer öffentlichen Veranstaltung
public event EventHandler<DataRecivedEventArgs> DataRecieved;
Aber als ich es versucht habe, die "DataRecivedEventArgs" ist nicht eine anerkannte Funktion von visual studio.
Kann jemand helfen, mir erklären, wie zu verwenden TCPclient konsequent listen für Daten und eine Funktion aufrufen, wenn einige Daten empfangen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für eine bestimmte TCP-Verbindung empfangen Daten im Kernel bis zu den Puffer-Größe begrenzen (was undurchsichtig ist, um die Anwendung).
Wenn eine Anwendung will Daten zu empfangen, er hat explizit dem Kernel sagen, wie viele Daten kopiert werden müssen, um die Anwendung-Puffer, da die buffer-Größe nicht unendlich ist und dass der Kernel kann die Speicherung von eingehenden Nutzlasten schneller als Ihre Anwendung behandeln konnte (vergessen Sie nicht, Ihre Anwendung wird regelmäßig verdrängt).
Der einzige Weg für Ihre Anwendung zum empfangen von Daten von einem TCP-socket wird durch
recv()
,recvfrom()
,recvmsg()
system fordert.In Ihrem Fall, im User-Space, alles, was Sie tun können, ist rufen Sie die Funktionen entsprechen denen des syscalls, so dass Sie Daten erhalten können. Ist Lieferung auf Abruf durch design. Darüber hinaus wird die Anwendung nicht wissen, ob die Daten da sind, bis es fordert
recv()
,recvfrom()
,recvmsg()
,select()
,poll()
oderepoll()
.Hinweis: ich bin kein C# - person. Ich weiß, C-und Kernel-Interna, und das ist ziemlich viel es. Ich wollte nur darauf hinweisen, das Konzept der socket-Kommunikation.