好的,所以该程序旨在接受连接,验证它们,并重新发送验证代码。在任何人生气之前,它只是一个简单的小项目而不是过于复杂哈哈。然而,由于一些非常奇怪的原因,该函数挂在 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()可以工作,但是花了太长时间......
答案 0 :(得分:0)
由于在您致电packet
时对.getAddress()
的地址进行DNS解析时出现问题,因此该流程可能会暂停。进行一些DNS调用以创建InetAddress对象。在这些机器上,您是否能够对packet
数据包来自的IP进行反向DNS查找?尝试在/etc/hosts
文件中为此IP设置条目。