0

サーバー(私のものではない)からパケットを送受信するプログラムを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;
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);指定した間隔で更新を送信する場合は、 every サイクルのようなものを使用します。

于 2013-03-27T12:48:02.620 に答える