在哪种情况下,我可以在DatagramSocket中使用getPort()?
问题描述:
我正在使用DatagramSockets来构建应用程序,并且我在代码的一个点上堆叠,以识别哪个端口被绑定。所以在我的这部分代码:在哪种情况下,我可以在DatagramSocket中使用getPort()?
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,我们有这样的说法:
公众诠释的getPort()
返回此套接字连接的端口号。如果套接字未连接,则返回-1。
在这个意义上,我继续寻找一种替代,我发现方法的getLocalPort()和API中:
公众诠释的getLocalPort()
上返回的端口号此套接字绑定到的本地主机。
然后使用的getLocalPort()我本来可以在我的插座绑定的端口,我明白的getPort()可能是得到了套接字连接端口,即主机的端口我想在其中发送信息。毕竟,在我的头上长大了一个问题:
由于UDP是无连接的,在哪个时刻我可以使用getPort()来恢复我的套接字连接的端口?
也许我理解错了,getPort()与远程主机没有关系,如果我错了请澄清我。
也就是说。 谢谢。 Pablo
答
当您调用dnsConnection.send(pkg)时,DatagramPacket pkg将包含远程主机的IP地址和远程主机上的端口号的信息。当您稍后调用dnsConnection.getPort()时,它仅返回最后发送的数据包的远程端口号,这是本地信息。
你可以调用'connect'来给出默认地址,然后'getPort' /'getInetAddress'将返回该地址。 – immibis 2014-10-18 13:53:36
但UDP不是无连接的?我如何连接到某个主机? “连接”方法将保持连接打开? – 2014-10-18 14:06:46
它所做的只是设置默认目标地址。 – immibis 2014-10-18 22:19:02