在同一台机器上的多个TcpClients作为服务器
问题描述:
如果一台机器正在运行,某些端口上侦听的服务器应用程序(比如9999),并在同一台机器几个客户端应用程序打开一个TcpClient的(本地主机,9999)连接到同一台服务器应用程序,会发生什么? 这会造成某种碰撞吗?在同一台机器上的多个TcpClients作为服务器
答
在C#中TcpListener
正在等待来自AcceptSocket
或AcceptTcpClient
的客户端的传入连接。在成功的连接上,您可以获得一个Socket
对象,该对象可用于与由客户端IP标识的特定客户端通信。如果与客户端的连接在另一个线程中处理,而不是AcceptSocket
,则您的服务器应用程序可以同时与多个客户端通信。例如服务器循环仅调用Accept
,并直接将Socket
移交给某个处理程序线程/任务。一般而言,对于传入连接,您知道客户端IP地址(和端口),并基于此连接可以将连接/数据复用到相应的套接字。 一个好的和完整的答案,但非C#特定是在这里 TCP : two different sockets sharing a port?
在客户端选择一个随机端口为传出连接。这由套接字/网络系统完成
在互联网范例中,端口号介于0和65535之间,并且由客户端主机上运行的传输层软件随机选择。这些被称为临时端口(范围从1024到49151)。
的可能的复制[两个应用程序可以收听到相同的端口?](http://*.com/questions/1694144/can-two-applications-listen-to-the-same -port) – Cjen1
@Micky,我简直不明白这是如何工作的,包怎么不混合? – LimS