Как прочитать все сообщение с сокетом Chilkat?
Мне нужно получить полное сообщение (ответ), но socket.ReceiveBytes();
возвращает только часть сообщения. Я пытался зациклить его, но по тайм-ауту это не удается, когда нет байтов для получения.
List<byte> lb = new List<byte>();
byte[] receivedMsg = socket.ReceiveBytes();
while (receivedMsg.Length > 0)
{
lb.AddRange(receivedMsg);
receivedMsg = socket.ReceiveBytes();
}
Итак, как я могу проверить, есть ли байт для чтения? Как я могу прочитать все сообщение?
1 ответ
Поскольку это реализация Chilkat, вам, вероятно, следует обратиться к разработчику. Но я обнаружил, что это может помочь: http://www.cknotes.com/?p=302
В конечном счете, вам нужно знать, сколько читать из сокета, чтобы составить целое сообщение. Например, если вышележащий протокол - это portmapper, то вы знаете, что ожидаете сообщения в формате, указанном RFC (http://tools.ietf.org/html/rfc1833.)
Если вы катите свой собственный протокол по соединению через сокет, то используйте метод в сообщении в блоге Chilkat о том, как поместить общий размер сообщения в первые 4 байта.