2

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

我想对 I/O 数据使用流,所以我用谷歌搜索“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 代码,它可以工作。套接字以相同的方式初始化并且它不会挂断。我试图在初始化时输入一个端口号,但它并没有解决问题。

4

1 回答 1

0

主机有多个网络接口(例如,127.0.0.1 用于环回接口,其他地址用于网卡;可能有多个网卡)。

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

尝试以下操作:

InetAddress addr = InetAddress.InetAddress.getLocalHost();
outStream = new UDPOutputStream(addr, port);
于 2012-12-12T11:34:20.240 回答