Frage von mAin0x, 58

C# Wie liest man eine lange Zeichenkette korrekt ein?

Ich habe es erst nur über ... .Receive versucht, das ging dann beim ersten String, was aber, da ich eine Schleife verwende nichts hilft.

Danach habe ich erst nur .Receive gemacht und dann erst byte[]... = ... .Receive. Das ging dann beim ersten Wert zum einlesen nicht, dann ein paar mal und dann wieder nicht.

Mit nicht meine ich, das immer erst beim 2. mal warten ein Wert zurück kommt. Was dann Schwachsinn ist.

Ich denke, man muss einfach mehrere Werte nacheinander annehmen und die dann zu einem byte[] zusammenfügen, ich weiß nur nicht wie.

Bitte keine dummen Comments. Ich lerne TCP/IP gerade erst.

Antwort
von EightSix, 31

Das hat jetzt aber wenig mit TCP zu tun sondern einfach wie du eine Variable außerhalb einer Methode anlegst und an ihr immer wieder was anfügst sobald über den Stream was reinkommt.

Kommentar von mAin0x ,

Und wie? :D

Antwort
von DataJockey, 10

hilft das?

https://msdn.microsoft.com/de-de/library/system.net.sockets.tcpclient.getstream%...

siehe unten bei Beispiele....

gruss, dj


Kommentar von mAin0x ,

Danke, ich habe es schon gecheckt. Trotzdem vielen Dank!

Antwort
von nikolaiki, 27

Im Grunde ist es genau so wie du gesagt hast. Du musst die Bytes halt zusammenstückeln, bis du ein Paket zusammen hast. Viel Spass!

Kommentar von mAin0x ,

Ja, das ist ja das Ding, ich weiß, wie man einmal Bytes empfängt aber nicht, wie man das in eine Schleife packt. Gibt es eine gute Website oder kannst du mir evtl. einfach diesen Codefetzen schreiben?

Kommentar von EightSix ,

In dem von dir geposteten Code in einer anderen Frage liest der Server ja immer wieder die empfangenen Bytes ein in einer Schleife. Statt halt das was da empfangen wird direkt zu verarbeiten musst du das an einen Zwischenspeicher anfügen. Dann eine Methode auslösen die überprüft ob mittlerweile ein Start- und Stopzeichen empfangen wurde -> wenn ja, dann den Teil dazwischen extrahieren und zur Verarbeitung weiter geben.

Kommentar von nikolaiki ,

Mach es wie jeder ernsthafte Programmierer: klau dir den Code irgendwo zusammen. 

Wie wärs hiermit? http://www.codeplanet.eu/tutorials/csharp/4-tcp-ip-socket-programmierung-in-csha... 

byte[] rcvBuffer = new byte[BUFSIZE];
int bytesRcvd;
// Lässt den Server in einer Endlosschleife laufen
for (; ; ) { Socket client = null; try { client = servSock.Accept(); // Empfange bis der client die Verbindung schließt, das geschieht indem 0 // zurückgegeben wird while ((bytesRcvd = client.Receive(rcvBuffer, 0, rcvBuffer.Length,SocketFlags.None)) > 0) {

Keine passende Antwort gefunden?

Fragen Sie die Community