我正在使用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()与远程主机无关,如果我错了请澄清我。
就是这样。 谢谢。 巴勃罗
答案 0 :(得分:0)
当您调用dnsConnection.send(pkg)时,DatagramPacket pkg包含远程主机的IP地址和远程主机上的端口号的信息。当您稍后调用dnsConnection.getPort()时,它只返回最后发送的数据包的远程端口号,这是本地信息。