2015-11-01 157 views
0

如果一台机器正在运行,某些端口上侦听的服务器应用程序(比如9999),并在同一台机器几个客户端应用程序打开一个TcpClient的(本地主机,9999)连接到同一台服务器应用程序,会发生什么? 这会造成某种碰撞吗?在同一台机器上的多个TcpClients作为服务器

+0

的可能的复制[两个应用程序可以收听到相同的端口?](http://stackoverflow.com/questions/1694144/can-two-applications-listen-to-the-same -port) – Cjen1

+0

@Micky,我简直不明白这是如何工作的,包怎么不混合? – LimS

回答

0

在C#中TcpListener正在等待来自AcceptSocketAcceptTcpClient的客户端的传入连接。在成功的连接上,您可以获得一个Socket对象,该对象可用于与由客户端IP标识的特定客户端通信。如果与客户端的连接在另一个线程中处理,而不是AcceptSocket,则您的服务器应用程序可以同时与多个客户端通信。例如服务器循环仅调用Accept,并直接将Socket移交给某个处理程序线程/任务。一般而言,对于传入连接,您知道客户端IP地址(和端口),并基于此连接可以将连接/数据复用到相应的套接字。 一个好的和完整的答案,但非C#特定是在这里 TCP : two different sockets sharing a port?

在客户端选择一个随机端口为传出连接。这由套接字/网络系统完成

在互联网范例中,端口号介于0和65535之间,并且由客户端主机上运行的传输层软件随机选择。这些被称为临时端口(范围从1024到49151)。

Applied C#.NET Socket Programming

+0

我的问题是,当一切运行在同一台机器上时会发生什么。 – LimS

+0

我的问题是,当一切都在同一台机器,服务器和客户端上会发生什么。所有的都有相同的IP。该服务器监听指定的端口,并作为客户端端口,我不知道,如果随机挑输出端口隐含与否。如果没有,那么我不明白他们怎么可能有不同的插座。 – LimS

+0

是你的权利,我认为底层OS插座系统是选择随机outports为客户 –

相关问题