2013-06-15 2 views
0

Я кодирую приложение сервера C#, которое получает большой байтовый массив от клиента Android через TCP. Проблема в том, что клиент Android отправляет 14952 байта, а C# не может получить больше 4344. Как можно разрешить сервер C# TCP получать все 14952 байта?TCP-сокет принимает только 4344 байта

+5

Читать в петля. Вы не гарантируете (и, скорее всего, не будете), чтобы получить все данные в одном чтении. – Duck

+1

См. Также http://tiny.cc/io (это и некоторые связанные с этим проблемы возникают так часто, что я написал сообщение в блоге) –

ответ

3

TCP - это протокол потока. Единственный размер буфера, который вы можете надежно получить, - это один байт. Правильный сервер TCP будет вызывать recv в цикле, пока он не прочитает столько байтов, сколько необходимо для обработки сообщения. Протокол прикладного уровня должен либо (1) включать в себя размер байта сообщения в самом сообщении, либо (2) должен определять, как сообщения обрамляются по базовому потоку байтов.

Короткий ответ:. ТСР слой свободен представить байт на прикладном уровне в куски размером любой байт, который хочет при условии, что байты остаются в том же порядке, что они были отправлены в

Смежные вопросы