【问题标题】:JDK 1.7 DatagramSocket not binding IP and port correctlyJDK 1.7 DatagramSocket 未正确绑定 IP 和端口
【发布时间】:2014-01-19 12:50:19
【问题描述】:

我正在使用 Java 中的 UDP 编写服务器程序。当然,我正在使用 DatagramSocket 作为服务器 UDP 套接字。我在 Mac OS X 10.9.1 上,我的编码环境设置为 JDK 1.7。

我的问题是当我像这样初始化我的套接字时:

serverSocket = new DatagramSocket(19132);

它不会抛出异常,但是当我尝试将其记录到控制台时,如下所示:

log("Starting Minecraft PE server on " + serverSocket.getInetAddress() + ":" + serverSocket.getPort());

.getInetAddress 为空,端口为 -1。我尝试绑定的端口是 19132。我在尝试代码时关闭了防火墙,它仍然为空。以下是日志的一些输出:

2014-01-18 17:16:20 [MCPE_Server][INFO] Starting Minecraft PE server on null:-1

【问题讨论】:

    标签: java sockets networking binding


    【解决方案1】:

    您正在调用返回“连接”另一端的方法。数据报套接字永远不会像 TCP 连接那样真正连接,而是“连接”它固定数据报的目的地。这是可选的。

    您正在寻找套接字绑定的地址;为此,您需要方法 getLocalPortgetLocalAddressgetLocalAddress 仍然不会返回 IP 号码;如果您通过仅采用端口号的构造函数创建 DatagramSocket,它将侦听由“地址”0.0.0.0 指示的所有接口。

    如果你运行这段代码:

    DatagramSocket serverSocket = new DatagramSocket(19132);
    System.out.println("Starting Minecraft PE server on " + serverSocket.getLocalAddress() + ":" + serverSocket.getLocalPort());
    

    你会得到这样的输出:

    Starting Minecraft PE server on 0.0.0.0/0.0.0.0:19132
    

    【讨论】:

      猜你喜欢
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 2010-09-14
      相关资源
      最近更新 更多