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当您调用.getAddress(). 为了创建 InetAddress 对象,进行了一些 DNS 调用。在这些机器上,您是否能够对packet数据包来自的 IP 进行反向 DNS 查找?/etc/hosts尝试在您的文件中为此 IP 设置一个条目。

于 2012-08-26T05:11:53.540 回答