2012-04-02 2 views
0

Я хотел бы сделать некоторый клиент и сервер для обмена файлами друг с другом. У меня проблема, потому что «сообщения» TCP «слиты», несмотря на то, что я задал количество байтов, которые я бы хотел отправить, и сколько их получили.Multi send() или receive() в TCP

Я посмотрел на него, и проблема возникает, когда в первом «сообщении» я отправляю имя файла, и после этого (в новой Send()) я отправляю содержимое файла, например.

Я исправил это, отправив сообщение обратной связи после каждого пакета приема в настоящее время.

Есть ли лучший способ сделать это?

+1

Возможный дубликат [Потеря данных TCP IP C#] (http://stackoverflow.com/questions/5528234/data-loss-tcp-ip-c-sharp) – CodesInChaos

+1

Другие дубликаты: [1] (http: // stackoverflow.com/q/8575659/445517) [2] (http://stackoverflow.com/q/9895132/445517) – CodesInChaos

+0

Я сделал что-то вроде 'string msg =" test "; байт [] buf = новый байт [1024]; byte [] prefix = BitConverter.GetBytes (msg.Length); byte [] data = Encoding.UTF8.GetBytes (msg); Array.Copy (префикс, 0, buf, 0, prefix.Length); Array.Copy (данные, 0, buf, prefix.Length, data.Length); socket.Send (buf); ' , но я не знаю, как получить сообщение сейчас. – deem

ответ

1

Добавить префикс длины для каждого сообщения. А затем читайте в цикле, пока не получите столько байтов, сколько хотите.