我想要做的是听一个5000的套接字,它与代码完美配合
TcpListener listener = new TcpListener(IPAddress.Any, 5000);
NetworkStream Network;
TcpClient client;
client = listener.AcceptTcpClient();
但是当服务器有两个连接到服务器的客户端时,它们都会听到相同的消息,因为它们是多线程的,我不希望这发生,因为他们互相读取它们正在从网络流中删除字节
所以我的问题是,是否有一种方法让监听器监听任何IP,直到它最终收到连接,然后一旦建立连接,线程只监听该IP地址?
谢谢
答案 0 :(得分:1)
TCP无法正常工作。 创建TCP套接字时,绑定到端口A,并听取您拥有的内容:
客户端连接到服务器,会发生的事情是克隆侦听套接字,克隆是套接字对的一部分,另一个套接字是连接套接字。克隆'克隆'套接字称为服务套接字。最终结果:
套接字对识别连接!当在TCP级别接收到某些内容时,还会检查源IP地址和端口,因此将识别正确的服务套接字,以便在接收时进行。 您永远不会在侦听套接字上收到数据。
如果另一个客户端连接你得到这个,假设一个不同的IP地址和端口:
这假设没有关闭连接。您现在看到服务器系统上有3个插槽,所有插槽都使用相同的端口。 1个监听套接字,以及正在建立的每个连接的服务套接字。即每个客户。每个连接都是不同的,右侧套接字将接收属于该连接的数据。连接中只有两个端点,连接是双向的。
TCP有点复杂,您可能会发现我的解释令人生畏,在这种情况下,您应该尝试在书籍或互联网上阅读有关TCP的更多信息。套接字编程也是一个有趣的读取,因为仅仅解释TCP并不能解释套接字级别会发生什么。