0

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

问题:如何限制将要发送的数据包数量,或使其一次发送的数据包不超过 1 个?

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;
4

2 回答 2

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] 的位置。您应该将代码移动到接收事件中,而不是循环。

于 2013-03-24T07:21:33.200 回答
0

弄清楚你需要多久更新一次,并且只在需要时发送数据包。

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

如果您想以指定的间隔发送更新,请使用类似Sleep(25);每个周期的方法。

于 2013-03-27T12:48:02.620 回答