Benutzer mit den meisten Antworten
TCP IP Server mit IAsyncResult

Frage
-
Hallo!
Das ist der von Microsoft zur Verfügung gestellte Code für den Empfang Link:
public static void ReadCallback(IAsyncResult ar) { String content = String.Empty; // Retrieve the state object and the handler socket // from the asynchronous state object. StateObject state = (StateObject) ar.AsyncState; Socket handler = state.workSocket; // Read data from the client socket. int bytesRead = handler.EndReceive(ar); if (bytesRead > 0) { // There might be more data, so store the data received so far. state.sb.Append(Encoding.ASCII.GetString( state.buffer,0,bytesRead)); // Check for end-of-file tag. If it is not there, read // more data. content = state.sb.ToString(); if (content.IndexOf("<EOF>") > -1) { // All the data has been read from the // client. Display it on the console. Console.WriteLine("Read {0} bytes from socket. \n Data : {1}", content.Length, content ); // Echo the data back to the client. Send(handler, content); } else { // Not all data received. Get more. handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state); } } }
Der Codeteil:
state.sb.Append(Encoding.ASCII.GetString( state.buffer,0,bytesRead));
ist für mich ein Problem. Ich nutze eine List<byte[]> und füge anstatt Text, die Empfangenen byte-Arrays zu...
byteList.add(state.buffer);
Nun, es spielt keine Rolle ob die byteList in dem state-Object selbst ist, oder ob sie im Codebehind irgendwo sitzt, es ist "immer" das ByteArray des "letzten" Empfangs in der Liste. Läuft also das Empfangen 3 mal durch, da die Daten so groß sind, sind in der Liste zwar 3 Arrays, aber alle mit selben Inhalt, nämlich des zuletz Empfangenen.
Was mache ich falsch?
Gruß, Flo
FLOGERSOFT.de - Top Apps, wie z.B. 'Die Taschenlampe' oder ganz neu dabei: 'LiveClock' die Echtzeituhr für ihre Windows Phone Live-Kachel - mit Wettervorhersage!
Antworten
-
Bedingt.
Wenn ich die byte-Arrays anstatt in eine Liste in ein Memorystream schreibe, klappt es allerdings!
Gruß Flo
FLOGERSOFT.de - Top Apps, wie z.B. 'Die Taschenlampe' oder ganz neu dabei: 'LiveClock' die Echtzeituhr für ihre Windows Phone Live-Kachel - mit Wettervorhersage!
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 22. Mai 2018 07:11
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 30. Mai 2018 13:15
Alle Antworten
-
Hallo Flo,
Sieh Dir die in diesem Codebeispiel definierte Methode ReceiveCallback an, insbesondere das Befüllen der Liste (incommingBytes), das Aufrufen der Thread.Sleep()-Methode und die UTF8-Codierung. Hoffentlich hilft es Dir weiter.
Gruß,
DimitarBitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Bedingt.
Wenn ich die byte-Arrays anstatt in eine Liste in ein Memorystream schreibe, klappt es allerdings!
Gruß Flo
FLOGERSOFT.de - Top Apps, wie z.B. 'Die Taschenlampe' oder ganz neu dabei: 'LiveClock' die Echtzeituhr für ihre Windows Phone Live-Kachel - mit Wettervorhersage!
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 22. Mai 2018 07:11
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 30. Mai 2018 13:15