Java DatagramSocket在初始化时冻结

时间:2012-10-18 09:56:43

标签: java sockets udp

我正在编写一个UDP网络程序(客户端 - 服务器),但我遇到了一些麻烦。

我想将流用于I / O数据,所以我用Google搜索“udp inputstream”并找到了UDPInputStreamUDPOutputStream。但是,当我尝试使用这些时,程序在尝试初始化UDPOutputStream时会卡住。

这是我的代码冻结的行:

outStream = new UDPOutputStream(InetAddress.getByName("127.0.0.1"), port);
System.out.println("UDP output stream initialized."); // <-- doesn't get called

我检查了UDPOutputStream的源代码,代码卡在这一行:

dsock = new DatagramSocket();

为什么执行挂起在这一行?在服务器端,我仍然使用我的“旧”非流版本的简单UDP代码,它可以工作。套接字以相同的方式初始化,不会挂起。我试图在初始化时输入一个端口号,但它没有解决问题。

1 个答案:

答案 0 :(得分:0)

主机有多个网络接口(例如,127.0.0.1用于环回接口,另一些用于网卡;可能有多个网卡)。

如果绑定到环回地址 127.0.0.1 ,那么您将只能接收本地发送的数据包。如果想要从远程计算机接收通过网络发送的数据包,则必须绑定到本地IP地址(例如192.168.1.100)。

请尝试以下操作:

InetAddress addr = InetAddress.InetAddress.getLocalHost();
outStream = new UDPOutputStream(addr, port);