2012-04-02 6 views
0

Ich möchte einige Clients und Server zum Austausch von Dateien gegenseitig tun. Ich habe ein Problem, weil TCP "Nachrichten" zusammengeführt werden, obwohl ich eingestellt habe, wie viele Bytes ich senden möchte und wie viele empfangen.Multi send() oder receive() in TCP

Ich habe es angeschaut, und das Problem tritt auf, wenn in der ersten "Nachricht" ich einen Dateinamen sende und danach (in neuen Senden()) ich den Dateiinhalt zum Beispiel senden.

Ich reparierte es durch das Senden einer Feedback-Nachricht nach jedem empfangenen Paket derzeit.

Gibt es einen besseren Weg, das zu tun?

+1

mögliche Duplikate von [Datenverlust TCP IP C#] (http://stackoverflow.com/questions/5528234/data-loss-tcp-ip-c-sharp) – CodesInChaos

+1

Weitere Duplikate: [1] (http: // stackoverflow.com/q/8575659/445517) [2] (http://stackoverflow.com/q/9895132/445517) – CodesInChaos

+0

Ich habe etwas wie 'string msg =" test "; byte [] buf = neues Byte [1024]; byte [] Präfix = BitConverter.GetBytes (msg.Length); byte [] data = Codierung.UTF8.GetBytes (msg); Array.Copy (Präfix, 0, buf, 0, prefix.Length); Array.Copy (Daten, 0, buf, prefix.Length, data.Length); Socket.Send (buf); ' aber ich weiß nicht, wie Sie die Nachricht jetzt erhalten. – deem

Antwort

1

Fügen Sie jeder Nachricht ein Längenpräfix hinzu. Und dann lesen Sie in einer Schleife, bis Sie so viele Bytes erhalten, wie Sie möchten.