Delphi 7中的套接字错误10053(一次发送太多数据包?)

时间:2013-03-23 23:42:26

标签: delphi delphi-7

我正在Delphi 7中创建一个程序,它从服务器(不是我的)发送和接收数据包。它发送数据包,等待接收数据包,然后读取它。所有这些过程都正常工作,但是当我循环sendPacket过程(我需要做)时,它冻结并给出套接字错误10053.我认为这是因为服务器拒绝请求,因为在短时间内发送了太多的数据包时间是否多次同时发送数据包?我已经尝试在发送数据包后放入Sleep(1000)。

问题:如何限制将要发送的数据包数量,或者一次发送多少数据包?

begin
  if pack[1]='bf' 
  then
    if pack[3]='-1' 
    then 
      Label2.Caption:='Not Found'
    else
      begin
        found:=true;
        while found=true do 
          begin
            Pickle.sendPacket('%xt%s%u#bf%'+Pickle.intRoom+'%122868290%');
            room:= pack[3];
            Label2.Caption:='Found at the '+room;
            if room = '-1' 
            then 
              begin 
                Label2.Caption:='Left the server';  
                found:=false; 
              end;
          end;
      end;
end;

2 个答案:

答案 0 :(得分:3)

在pack [3]包含-1之前,代码中的以下循环不会被保留。

    while found=true do 
      begin
        Pickle.sendPacket('%xt%s%u#bf%'+Pickle.intRoom+'%122868290%');
        room:= pack[3];
        Label2.Caption:='Found at the '+room;
        if room = '-1' 
        then 
          begin 
            Label2.Caption:='Left the server';  
            found:=false; 
          end;
      end;

未显示pack [3]的设置位置。您应该将代码移动到接收事件中,而不进行循环。

答案 1 :(得分:0)

了解您需要更新的频率,并仅在需要时发送数据包。

例如,仅在当前房间更改时发送数据包。如果房间保持不变,为什么要一次又一次地发送?

如果要以指定的间隔发送更新,请在每个周期使用Sleep(25);