UDPSocketClient.Receiveln不会继续所有传入数据

时间:2013-12-23 15:05:59

标签: delphi

我正在使用Delphi XE4,使用UDPSocketClient我向服务器发送请求。 请求成功,但来自服务器的响应总是大约200个字节。 它应该是大约1000个字节。

我不知道为什么?!没有EOL休息或类​​似的东西。

是否可以阅读Chunks?

procedure TForm1.SendCommand(const Pass, ACommand: string);
var
 Cmd: string;

begin
  if UDPSocketClient.Connected then
  begin
    Cmd := Pass + ' ' + ACommand;
    UDPSocketClient.Sendln(AnsiString(Cmd));
    Memo1.Lines.Add('');
    Memo1.Lines.Add('######################');
    Memo1.Lines.Add(ACommand);
    Memo1.Lines.Add('######################');
    Memo1.Lines.Add('');
  end;
end;

procedure TForm1.BtnSendCmdClick(Sender: TObject);
var
  Buff: AnsiString;
  received: string;
begin

  if Assigned(CurrentServer) and (CmdEdit.Text <> '') and
    (CmdEdit.Text <> CmdEditPlaceHolder) then
  begin
    SendCommand(CurrentServer.Password, CmdEdit.Text);
  end;
  try
   received := String(UDPSocketClient.Receiveln(Buff));
   Memo1.Lines.Add(received);
    finally
     CmdEdit.SetFocus;
end;

2 个答案:

答案 0 :(得分:0)

我假设你正在使用TUDPSocket。

ReceiveLn的参数是delimiter string to search for。您传递的是Buff,这是一个空字符串,因此行为可能未定义。

答案 1 :(得分:0)

所以,现在我有一个解决方案的方法。

当我将命令发送到服务器时,有两种方法可以接收数据:

  1. 传入的UDP包小于200字节,一切都正确。
  2. 如果传入UDP包达到1.3kb,则套接字缓冲区中有两个udp包。但是我无法将软件包送到我的应用程序中。