C# Tcp侦听器和客户端侦听特定ip

C# Tcp侦听器和客户端侦听特定ip,c#,multithreading,sockets,tcpclient,tcplistener,C#,Multithreading,Sockets,Tcpclient,Tcplistener,我想做的是听一个5000的套接字,它与代码完美配合 TcpListener listener = new TcpListener(IPAddress.Any, 5000); NetworkStream Network; TcpClient client; client = listener.AcceptTcpClient(); 但是,当服务器有两个连接到服务器的客户端时,由于它们是多线程的,所以它们都会侦听相同的消息,我不希望发生这种情况,因为它们相互读取时,会从网络流中删除字节 所以我的问题

我想做的是听一个5000的套接字,它与代码完美配合

TcpListener listener = new TcpListener(IPAddress.Any, 5000);
NetworkStream Network;
TcpClient client;
client = listener.AcceptTcpClient();
但是,当服务器有两个连接到服务器的客户端时,由于它们是多线程的,所以它们都会侦听相同的消息,我不希望发生这种情况,因为它们相互读取时,会从网络流中删除字节

所以我的问题是,有没有一种方法让侦听器监听任何ip,直到它最终接收到一个连接,然后一旦建立了连接,线程只监听该ip地址


谢谢

TCP不是那样工作的。 创建TCP套接字时,绑定到端口a,并侦听您拥有的是:

  • 端口A上的侦听套接字
客户端连接到服务器时,发生的情况是克隆侦听套接字,克隆是套接字对的一部分,另一个套接字是连接套接字。“克隆”套接字称为服务套接字。最终结果:

  • 端口A上的侦听套接字(仍然有效,您没有关闭它)
  • 端口A上的维修插座,但为插座对的一部分。(投资促进机构(A)、投资促进机构(B))
套接字对标识连接!当在TCP级别接收到某个内容时,还将检查源ip地址和端口,因此,将在接收时确定正确的服务套接字。 您从未在侦听套接字上接收过数据

如果另一个客户端连接,则假设ip地址和端口不同,您会得到以下结果:

  • 端口A上的侦听套接字(仍然有效,您没有关闭它)
  • 端口A上的维修插座,但为插座对的一部分。(投资促进机构(A)、投资促进机构(B))
  • 端口A上的维修插座,但为插座对的一部分。(IPA(A)、IPC(C))
这是假设没有连接是关闭的。现在,服务器系统上有3个套接字,都使用同一端口。1个监听插座,每个正在建立的连接一个维修插座。每一个客户。每个连接都是不同的,右侧套接字将接收属于该连接的数据。一个连接中只有两个端点,并且连接是双向的


TCP有点复杂,你可能会发现我的解释令人望而生畏,在这种情况下,你应该尝试在书中或互联网上阅读更多关于TCP的内容。socket编程也是一本有趣的读物,因为仅仅解释TCP并不能解释socket级别发生的事情。

您必须识别您正在听的每一条“消息”。你读过TCP/IP通信和通信协议吗?因为这就是协议存在的原因。当然你需要自己做。这毫无意义。两个客户端,意味着两个不同的连接。他们没有收到彼此的数据,问问题都很好。但给予信任真的有那么多要求吗?