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

在哪种情况下,我可以在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

+1

你可以调用'connect'来给出默认地址,然后'getPort' /'getInetAddress'将返回该地址。 – immibis 2014-10-18 13:53:36

+0

但UDP不是无连接的?我如何连接到某个主机? “连接”方法将保持连接打开? – 2014-10-18 14:06:46

+1

它所做的只是设置默认目标地址。 – immibis 2014-10-18 22:19:02

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