Что мы будем делать, чтобы получить C # Silverlight Tcp Packet одним куском - PullRequest
0 голосов
/ 30 июля 2010

Когда мы отправляем большой объем данных клиенту, его событие ReceiveAsync вызывается более одного раза, и каждый раз мы получаем несколько кусочков пакета.
Что нам делать, чтобы получить C # Silverlight TcpПакет в одно целое и через одно мероприятие?Заранее спасибо.

1 Ответ

2 голосов
/ 30 июля 2010

Вы не можете. Сама природа TCP заключается в том, что данные разбиваются на пакеты. Продолжайте получать данные, пока не получите полное сообщение (каким бы оно ни было). Некоторые варианты для этого:

  • Сначала отправьте размер сообщения перед самим сообщением.
  • Закрыть соединение, когда сообщение отправлено (таким образом, клиент может читать до тех пор, пока соединение не будет закрыто)
  • Добавить разделитель для обозначения конца сообщения

Как правило, мне не нравится последний вариант, так как он означает «понимание» сообщения во время его чтения, что может быть сложно - и может означать, что вам необходимо добавить escape-последовательности и т. Д., Если ваш разделитель может естественным образом встречаться в сообщении.

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