在哪种情况下我可以在DatagramSocket中使用getPort()?

时间:2014-10-18 13:51:22

标签: java sockets udp

我正在使用DatagramSockets构建一个应用程序,并且我在代码的一个点上堆叠,我应该确定我的套接字绑定了哪个端口。所以在我的代码的这一部分:

        dnsConnection = new DatagramSocket();

        byte[] date = "\nSend me a available server IP!".getBytes();
        pkg = new DatagramPacket(date, date.length, addr, port);

        status.append("\nTrying to send the message to: " + addr.getHostAddress());

        dnsConnection.send(pkg);
        localPort = dnsConnection.getPort();

        status.append("\nRequest has been sent to: " + addr.getHostAddress());
        status.append("\nthrough the port: " + localPort);

正如您所看到的,我正在尝试使用 getPort()方法获取套接字绑定的端口。阅读API,我们有这样的声明:

  

public int getPort()

     

返回此套接字连接的端口号。如果套接字未连接,则返回-1。

从这个意义上讲,我继续搜索替代方案,并在API中找到方法 getLocalPort()

  

public int getLocalPort()

     

返回此套接字绑定到的本地主机上的端口号。

然后使用getLocalPort()我可以得到我的套接字绑定的端口,我知道getPort()可能是为了获得套接字所连接的端口,即我所在的主机端口想发送信息。毕竟,在我脑海里长大了一个问题:

由于UDP是无连接的,我可以在哪一刻使用getPort()来恢复连接套接字的端口?

也许我理解错误并且getPort()与远程主机无关,如果我错了请澄清我。

就是这样。 谢谢。 巴勃罗

1 个答案:

答案 0 :(得分:0)

当您调用dnsConnection.send(pkg)时,DatagramPacket pkg包含远程主机的IP地址和远程主机上的端口号的信息。当您稍后调用dnsConnection.getPort()时,它只返回最后发送的数据包的远程端口号,这是本地信息。