我正在编写一个UDP网络程序(客户端 - 服务器),但我遇到了一些麻烦。
我想将流用于I / O数据,所以我用Google搜索“udp inputstream”并找到了UDPInputStream和UDPOutputStream。但是,当我尝试使用这些时,程序在尝试初始化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代码,它可以工作。套接字以相同的方式初始化,不会挂起。我试图在初始化时输入一个端口号,但它没有解决问题。
答案 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);