Текущий архив: 2005.03.20;
Скачать: CL | DM;
Вниз
Информация от сервера. Найти похожие ветки
← →
Новичек © (2005-01-18 01:03) [0]Здравствуйте, уважаемые Мастера.
Вот кусок стандартного кода:procedure TForm1.MySocketRead(Sender: TObject; Socket: TCustomWinSocket);
var
Buffer: AnsiString;
LengthOfBlock: Integer;
BufOfSocket: PChar;
begin
LengthOfBlock := Socket.ReceiveLength;
GetMem(BufOfSocket, LengthOfBlock + 1);
Socket.ReceiveBuf(BufOfSocket[0], LengthOfBlock);
Buffer := Buffer + BufOfSocket;
FreeMem(BufOfSocket);
ShowMessage(Buffer);
exit;
end;
ПредисловиеВопрос такой:
По протоколу TCP/IP сервер передает информацию, как известно, блоками. Размер блока, допустим, 600 байт. Информация для передачи клиенту "весит", к примеру, 2К. Событие OnRead наступает при приеме КАЖДОГО блока и, соответственно, много раз выскакивает ShowMessage.
Вопрос такой:
А как добиться полной загрузки информации в Buffer и ShowMessage срабатывало только раз? Смотрел сниффером передаваемые блоки - никакой зацепки :-(. Сервер в любом месте рвет передачу и возобновляет в следующем блоке.
С уважением, Сергей.
← →
Eraser © (2005-01-18 01:09) [1]Есть несколько путей, можно либо использовать стоповые байты, если передаётся текст, либо вначале пересылать размер данных, а потом принимать эти данные в буффер, который передавать после завершения передачи всх данных в showmessage.
Вообще почитай инфу для начинающих по созданию программ на базе TCP/IP.
← →
Новичек © (2005-01-18 01:17) [2]Вся беда в том, что мне недоступно программирование сервера, а посему нет возможности как-то уведомить клиента. Сервер просто отдает информацию когда посчитает нужным :-(
Уже полез в заголовки пакетов, может, что-нибудь откопаю :-)
← →
Новичек © (2005-01-18 01:43) [3]Решил проблему. Правда, через ж... :-)
Страницы: 1 вся ветка
Текущий архив: 2005.03.20;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.041 c