Добрый день.
Только начинаю работать с сетью в Delphi. Пытаюсь создать простейшую программку для отправки-получения данных. Вроде бы все получается, но... Почему-то у меня клиент отправляет, а сервер соответственно получает 4 пакета вместо 1. Скажите пожалуйста, почему такое может происходить?
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <b> type </b>
...
TByteArr = <b> array of </b> Byte ;
PByteArr = ^TByteArr;
...
<b> procedure </b> Tmain . sendClick(Sender: TObject);
<b> var </b>
data: TByteArr;
<b> begin </b>
data:=StringToHex(msg . Text);
client . Socket . SendBuf(PByteArr(data)^,Length(data));
<b> end ;</b>
...
<b> procedure </b> Tmain . serverClientRead(Sender: TObject;
Socket: TCustomWinSocket);
<b> var </b>
i: Integer ;
data: TByteArr;
s: <b> String </b>;
<b> begin </b>
s:= '' ;
SetLength(data,Socket . ReceiveLength);
<b> for </b> i:= 0 <b> to </b> Socket . ReceiveLength- 1 <b> do </b>
<b> begin </b>
Socket . ReceiveBuf(data[i], 1 );
s:=s+IntToHex(data[i], 2 );
<b> end ;</b>
log . Lines . Add( 'Server received: ' +s);
Socket . SendBuf(PByteArr(data)^,Length(data));
<b> end ;</b>
|
Поясню: при отправлении клиентом строки 01020A0B на сервер приходит эта последовательность байт, и еще 3 пустых пакета (ReceiveLength = 0), что и отображается в log (TMemo) как три пустых строки. Естественно, сервер те же три пустых строки отправляет назад клиенту (Socket.SendBuf в serverClientRead).
Причем бывает так, что по первому при текущем запуске проекта нажатию кнопки send все отправляется правильно, то есть отправляется только введенная строка байт.