|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
4 пакета вместо одного
Добрый день.
Только начинаю работать с сетью в Delphi. Пытаюсь создать простейшую программку для отправки-получения данных. Вроде бы все получается, но... Почему-то у меня клиент отправляет, а сервер соответственно получает 4 пакета вместо 1. Скажите пожалуйста, почему такое может происходить? Код:
type ... TByteArr = array of Byte; PByteArr = ^TByteArr; ... procedure Tmain.sendClick(Sender: TObject); var data: TByteArr; begin data:=StringToHex(msg.Text); client.Socket.SendBuf(PByteArr(data)^,Length(data)); end; ... procedure Tmain.serverClientRead(Sender: TObject; Socket: TCustomWinSocket); var i: Integer; data: TByteArr; s: String; begin // if Socket.ReceiveLength = 0 then // Exit; s:=''; SetLength(data,Socket.ReceiveLength); for i:=0 to Socket.ReceiveLength-1 do begin Socket.ReceiveBuf(data[i],1); s:=s+IntToHex(data[i],2); end; log.Lines.Add('Server received: '+s); Socket.SendBuf(PByteArr(data)^,Length(data)); end; Поясню: при отправлении клиентом строки 01020A0B на сервер приходит эта последовательность байт, и еще 3 пустых пакета (ReceiveLength = 0), что и отображается в log (TMemo) как три пустых строки. Естественно, сервер те же три пустых строки отправляет назад клиенту (Socket.SendBuf в serverClientRead). Причем бывает так, что по первому при текущем запуске проекта нажатию кнопки send все отправляется правильно, то есть отправляется только введенная строка байт. -=: KINo :=- |