功能挂起?在packet.setAddress()上

时间:2012-08-26 05:05:37

标签: java datagram

好的,所以该程序旨在接受连接,验证它们,并重新发送验证代码。在任何人生气之前,它只是一个简单的小项目而不是过于复杂哈哈。然而,由于一些非常奇怪的原因,该函数挂在 send.setAddess(packet.getAddress); 我知道这一点,因为我已经注释掉处理数据报包的每一行代码"发送"并且发现它已经挂起了#34; (或者从不在该方法中再次前进)在该特定线上。有什么想法吗?我做了一件无知的错事吗?我也在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()可以工作,但是花了太长时间......

1 个答案:

答案 0 :(得分:0)

由于在您致电packet时对.getAddress()的地址进行DNS解析时出现问题,因此该流程可能会暂停。进行一些DNS调用以创建InetAddress对象。在这些机器上,您是否能够对packet数据包来自的IP进行反向DNS查找?尝试在/etc/hosts文件中为此IP设置条目。