Добрый день.
Только начинаю работать с сетью в 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 все отправляется правильно, то есть отправляется только введенная строка байт.