C# [.NET] NetzwerkSocket Problem: Warten auf empfangene Daten

Registriert
Dez. 2009
Beiträge
213
Hi, ich habe ein Problem mit den Netzwerksockets in der .NET.
Ich habe ein Objekt der Klasse Socket ("client") und dieses hat auch schon eine Verbindung aufgebaut. Jetzt soll es warten, bis der Client etwas sendet. Diese Bytes("data") sollen dann per UTF8 an einen String ("text") angehängt werden. Die Übertragung wird durch ein Abbruch-Zeichen abgebrochen sodass jetzt in dem String das empfangene Wort bzw. Satz steht. Mit diesem String mache ich dann irgendwas (ist jetzt unwichtig was genau) und dann soll das ganze von vorne beginnen. Es soll also ein reiner Empfänger sein.

UTF8Encoding enc = new UTF8Encoding();
while(true) //ständige Wiederholung
{
text = ""; //Den String leeren
//Warten und dann irgendwann empfangen per client.Receive
//In data stehen jetzt die Bytes
text = text + enc.GetString(data);
//Das ganze soll solange geschehen bis das Zeichen gesendet wird

//Jetzt soll es irgendwas mit text tun
//und von vorne anfangen
}

Und das verstehe ich noch nicht ganz: Wie ich das machen muss, dass es erst wartet und dann solange empfängt, bis das Abbruchzeichen kommt. Weiß das jemand? Für gute Antworten Dank im vorraus.
 
Bei Receive bleibt die Ausführung des Programmcodes an dieser Stelle stehen bzw. dieser ganze Thread wird in einen Wartezustand versetzt (--->die ganze Empfangsmethode unbedingt in einem eigenen Thread unterbringen, falls die Anwendung noch ansprechbar sein soll), bis ein Paket angekommen ist.
Dem Socket wird eine gewisse Buffergröße in Bytes zugesprochen, in der Regel 1024. Ist die Nachricht größer als die Buffergröße, wird die Nachricht dementsprechend in mehrere Pakete aufgeteilt und diese werden nacheinander abgearbeitet. Das nächste Paket wird dann wieder beim Receive im While ausgelesen. Receive gibt als Rückgabewert die Anzahl der genutzen Bytes des Buffers aus, damit weißt du, bis zu welcher Stelle du ihn auslesen musst.
Je nach Verwendungszweck der empfangenen Daten musst du diese vor dem Versenden evtl. mit einem bestimmten Zeichen umpacken, damit die Nachrichten getrennt werden können, da es auch vorkommen kann, dass gewartet wird, bis der Buffer voll ist und dann erst das Paket abgeschickt wird (außer es verstreicht eine gewisse Zeit). Man kann das glaube ich auch unterbinden, ich weiß jetzt aber keine genauen Details. (Begriffe, die mir dazu spontan einfallen in der Region: "Nagle-Algorithmus")
 
Ah, danke für dei gute und hilfreiche Antwort. Kannst du mir Quellcode geben? Oder einen Link, wo ich das an einem Beispiel sehe?
 
Öh ich habe irgendwo VB-Code liegen.
Ich guck mal...
Mein altes Projekt kann ich jetzt gerade nicht finden. -.-

Für den Rest, Google. ^^
Wobei es auch wichtig zu wissen wäre, was du genau machen möchtest.
 
Zuletzt bearbeitet:
Zurück
Oben