Показать сообщение отдельно
  #1  
Старый 29.09.2009, 15:29
Аватар для KINo-nnov
KINo-nnov KINo-nnov вне форума
Прохожий
 
Регистрация: 29.09.2009
Сообщения: 2
Репутация: 10
По умолчанию 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 :=-
Ответить с цитированием