2012-10-26 28 views
0

我应该使用监听,并在对阅读等应用程序不同的端口?如果是这样,为什么不一个单一的端口为听力和阅读?不同的端口,用于听力和阅读

+0

你说的是TCP或UDP端口?如果使用TCP,那么您不必担心,因为您使用一个套接字(端口)来监听连接,并且在接受新连接时,您会自动获得一个带有新端口的新套接字。 –

+1

不完全。 TCP连接由两端的IP /端口标识。因此,接受的连接可以在服务器端使用与侦听套接字相同的IP /端口。见例如在这里:http://stackoverflow.com/questions/489036/how-does-the-socket-api-accept-function-work –

+0

@JoachimPileborg不想你不行,你得到的*同*当地一个新的TCP套接字端口号。 – EJP

回答

0

如果这是UDP,你套接字绑定到的端口号听,当你写,你写尚未绑定到任何特定的端口(发送并不重要)的插座,所以您可以使用相同的端口进行读取和写入,而不会有任何问题。只需将目标IP的端口设置为您正在监听的同一端口号即可。我更喜欢这样做,因为当我通过Wireshark嗅探流量时,通过查看端口号(而不是查找发送端口和接收端口),我可以识别我的流量(发送和接收)。另一方面,您可能希望能够分别识别发送和接收,所以这将是不使用相同端口号进行发送和接收的原因。

如果这有点像一个多播或广播基于“对等发现”协议,您将需要发送和接收端口是相同的。在这种情况下,一个对等体既是同一数据的发送者又是接收者,因此对于读取和写入的所有对等端,端口号必须相同。如果发送和接收的端口号不同,则会发送数据但从未收到数据。

1

如果你谈论的是TCP,你没有得到的选择:接受套接字使用相同的本地端口作为侦听端口(和出站端口必须使用不同的端口,如果需要的话)。如果你在谈论UDP,没有理由使用多个套接字,所以没有机会使用多个端口。所以两种情况下的答案都是一样的:使用一个端口。

+0

EJB,你是对的。非常感谢您的纠正。 +1 – shevchyk