Winsock отправляет размер буфера recv

Я пишу приложение MFC для реализации сценария клиент/сервер и использую для этого Win socket. Я могу отправить/получить небольшое сообщение, например. "Привет". Кроме того, я пробовал с буфером размером 1000. Однако, когда я увеличиваю его размер, он просто зависает. Даже ошибки не выдает.

Любая идея о том, что проблема может быть? Есть ли ограничение на максимальный размер буфера, который я могу отправлять/получать в winsock? Я новичок в этом и никогда раньше не использовал winsock.


person pree    schedule 04.04.2013    source источник
comment
Максимальный размер пакета TCP составляет 64 КБ. Попытка отправить пакет такого размера, скорее всего, приведет к его потере. Однако пакет размером около 1000 байт не должен быть проблемой. Пожалуйста, опубликуйте код.   -  person Matt    schedule 05.04.2013
comment
Я попробовал с 2000 байтами, и теперь все работает нормально. Код для этого не менял. Однако это не работает для больших данных, скажем, 9000 байт. Кроме того, когда он зависает, я вижу, что поток «Поток Win32» (0x1bc0) вышел с кодом 0 (0x0) в окне вывода серверного приложения.   -  person pree    schedule 05.04.2013
comment
Понял :) в моем коде была небольшая ошибка, а также я фактически не получал данные с сервера. Вместо этого я ждал, пока все данные поступят. Теперь я могу получать данные, хотя и в нескольких прогонах.   -  person pree    schedule 05.04.2013
comment
Вы используете TCP или необработанные сокеты? TCP на уровне приложения не передает «пакеты», поэтому я не могу понять некоторые другие комментарии. Размер буфера приложения больше 64 КБ не является редкостью и будет работать нормально.   -  person Martin James    schedule 09.04.2013
comment
Я использую TCP, так как winsock поддерживает это. Поэтому, когда я отправлял большой кусок данных (10000 байт), я заметил, что смог получить только 9000 байт данных в серверном приложении. И только получив его, я смог восстановить оставшиеся 1000 байт. Интересно, что сейчас я не могу воспроизвести тот же случай. Это дает мне даже большой кусок данных за раз, что, вероятно, вы и говорите.   -  person pree    schedule 09.04.2013
comment
Тот факт, что вы получаете часть данных, а затем оставшуюся часть, рассматривается в моем ответе на этот вопрос. В основном так работает TCP.   -  person icabod    schedule 16.04.2013


Ответы (1)


Следующий комментарий от icabod отвечает на этот вопрос.

«Тот факт, что вы получаете часть данных, а затем оставшуюся часть, рассматривается в моем ответ на этот вопрос. По сути, так работает TCP. – icabod"

person pree    schedule 18.04.2013