Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2010, 23:32   #1
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию send/recv: размер сообщения

Проблема такая: передающая сторона отсылает пакет размером 2050 байт, а принимающая сторона получает только 1460, остальная часть сообщения доходит во второй раз. Сокеты потоковые. Передаются сообщения по локальной сети, причем такая ситуация происходит через раз: иногда без ошибок принимается сразу 2050, в режиме отладки с брэйкпоинтами всегда верно работает. В чем может быть проблема? думаю, это может быть связано с mtu и фрагментацией сообщения, но за это же должен отвечать транспортный уровень, а не я... Подскажите решение, кто с этим сталкивался...
cw_o вне форума Ответить с цитированием
Старый 23.04.2010, 09:37   #2
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

Я делал так:

Цитата:
var
buf : array [0..1023] of Char;
RcvLen : integer;
TMP : String;
...
ZeroMemory(@buf, 1024);
RcvLen:=recv(Sock,buf,1024,0);
while RcvLen > 0 do
begin
Tmp := Tmp + Copy(buf, 0, RcvLen);
RcvLen := recv(sock, buf, 1024, 0);
end;
Denager вне форума Ответить с цитированием
Старый 23.04.2010, 11:01   #3
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию

send тоже в цикле? у меня почему-то при повторном вызове recv глюки начинаются нереальные, так что основной поток завешивается, хотя recv срабатывает нормально
cw_o вне форума Ответить с цитированием
Старый 23.04.2010, 11:53   #4
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

send один раз посылаю, переменную типа type TBuf = array [0..65535] of char;
Denager вне форума Ответить с цитированием
Старый 23.04.2010, 19:00   #5
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию

Все равно мои сообщения объединяются до размера 1460, получается так что приходит первый пакет размером 1460, а следующий такой пакет не успевает прийти и recv во второй раз получает меньше данных, чем нужно... Бред какой-то, пришлось вставить проверку на размер принятых данных и повторный вызов recv (уже третий) при необходимости. Причем что странно, если клиент и сервер поменять местами, то работает все отлично без потерь, может, еще с конкретным железом это связано...
cw_o вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MPI: send и recv cheparamba Общие вопросы C/C++ 0 09.03.2010 05:48
recv() Артэс C/C++ Сетевое программирование 7 15.01.2010 14:51
Mail send MAcK Общие вопросы .NET 4 01.10.2008 18:12
WinSock (send, recv) AidarBik Работа с сетью в Delphi 1 27.07.2008 15:22
Send Message _SERGEYX_ Работа с сетью в Delphi 5 30.10.2007 06:38