0
我使用pidgin,A,B和C运行多个bonjour客户端。
当B和C对话时,我发现A使用相同的端口(使用wireshark我可以看到数据包) MDNS和通信,
但B和C,每一个具有两个不同的端口一个用于MDNS,一个用于套接字连接。
A如何工作,为什么它只能用一个端口工作?一个端口如何提供多个连接?
注意:如果是多线程,那么当它接受它会创建另一个自由港新的套接字连接,但我看到Wireshark的数据包,客户端A所做的仅仅是使用相同的端口进行通信和MDNS。 (source_address,source_port,的destination_address,destination_port):
一个端口上的多个连接
感谢,但是当我尝试使用端口5298连接到在同一台机器上其他几个端口, java套接字,有“地址已被使用”的异常?你说如果元组中的任何元素发生变化,它应该没问题,这怎么会发生?那么我尝试了另一个指定的本地端口5555,我有“连接被拒绝”?我们不能指定本地端口吗?还是应该在创建套接字之前对本地指定的端口执行一些操作?我尝试在IPTABLE中禁用此端口,但它不起作用! – seaguest
好吧,我说如果元组中有元素发生变化,那么TCP协议就没关系了。但套接字API有其他的限制:你不能绑定到同一个本地地址/端口不止一次(除非你设置SO_REUSEADDR选项,但这有其他更微妙的影响)。因此“地址已被使用”错误。当您尝试连接到目标地址/端口并且该端口中没有监听时,会发生“连接被拒绝”错误。 – rodrigo
非常感谢您的回答!事实上我解决了这个问题,因为我不知道MDNS使用默认端口5353,并且我配置了一个用于socket的错误端口。所以现在它工作得很好!再次感谢您的热烈回答! – seaguest