0

プログラムは、接続を取り込んで検証し、その検証コードを再送信するように設計されています。誰かが怒る前に、それは単なる小さなプロジェクトであり、過度に複雑になるようには設計されていません。ただし、いくつかの非常に奇妙な理由で、関数はsend.setAddess(packet.getAddress);でハングしています。これを知っているのは、データグラムパケットの「送信」を処理するコードの個々の行をコメントアウトし、その特定の行で「ハング」する(またはメソッドを二度と進まない)ことを発見したためです。何かご意見は?私は無知に間違ったことをしていますか?私はそれが私とは何の関係もないことを確認するためにLinuxサーバーでもそれを試しました、そして同じがらくたが起こりました。

    public static boolean authorize(String n, DatagramPacket packet) {
    DatagramPacket send = new DatagramPacket(new byte[4096], 4096);
    try {
      System.out.println("in auth");
      String[] t1 = n.split("%@");
      String name = t1[1];
      int k = genKey(name);
      clients.put(name, k);
      send.setAddress(packet.getAddress());
      System.out.println("set add");
      send.setPort(packet.getPort());
      System.out.println("set port");
      send.setData(("l-succeed%@" + Integer.toString(k)).getBytes());
      System.out.println("set data");
      main.dispathcer(send);
      System.out.println("called send");
      return true;
    } catch(Exception e) {
      send.setData("l-failed".getBytes());
      main.dispathcer(send);
      return false;
    }
  }

編集:認証トークンがクライアントによって受信されるまでに6分かかりました。したがって、明らかにsetAddress()は機能しますが、時間がかかりすぎます...

4

1 に答える 1

0

packetを呼び出すときに、アドレスでDNS解決を実行する際に問題が発生したため、プロセスがハングしている可能性があります.getAddress()。InetAddressオブジェクトを作成するために、いくつかのDNS呼び出しが行われます。packetこれらのマシンで、パケットの送信元のIPでDNSの逆引き参照を実行できますか?/etc/hostsファイルにこのIPのエントリを設定してみてください。

于 2012-08-26T05:11:53.540 に答える