【发布时间】:2015-11-01 10:32:08
【问题描述】:
如果一台机器正在运行一个监听某个端口(比如 9999)的服务器应用程序,并且在同一台机器上,多个客户端应用程序打开一个 TcpClient(localhost,9999) 连接到同一个服务器应用程序,会发生什么? 这会导致某种碰撞吗?
【问题讨论】:
-
@Micky,我就是不明白这是怎么回事,数据包怎么不混在一起?
标签: c# .net client-server
如果一台机器正在运行一个监听某个端口(比如 9999)的服务器应用程序,并且在同一台机器上,多个客户端应用程序打开一个 TcpClient(localhost,9999) 连接到同一个服务器应用程序,会发生什么? 这会导致某种碰撞吗?
【问题讨论】:
标签: c# .net client-server
在 C# 中,TcpListener 正在等待来自带有 AcceptSocket 或 AcceptTcpClient 的客户端的传入连接。成功连接后,您将返回一个 Socket 对象,该对象可用于与客户端 IP 标识的特定客户端通信。如果与客户端的连接是在AcceptSocket 之外的另一个线程中处理的,则您的服务器应用程序可以同时与多个客户端通信。例如服务器循环只调用Accept 并直接将Socket 移交给某个处理程序线程/任务。通常,对于传入连接,您知道客户端 IP 地址(和端口),并且基于此可以将连接/数据多路复用到相应的套接字。
一个好的和完整的答案,但非 C# 特定在这里
TCP : two different sockets sharing a port?
在客户端,为传出连接选择了一个随机端口。这是由套接字/网络系统完成的
在互联网范式中,端口号介于 0 和 65535 之间,由运行在客户端主机上的传输层软件随机选择。这些被称为临时端口(范围从 1024 到 49151)。
【讨论】: