我有一个简单的问题,我可以运行两个tcp Socket侦听器 但他们每个人都要听一个不同的端口,比如一台服务器但是2个端口要收听吗? 因为我在tcp编程和所有套接字编程方面都处于两难境地,这是我从未在网上阅读的内容。
由于 这是我想要做的架构This is The Diagram of the Connection 我们有一个IP和两个不同的连接端口
我希望这些信息能够充分解决问题,并以简单易懂的方式为您提供理解。再次感谢
答案 0 :(得分:1)
我可以运行两个tcp Socket监听器,但是每个监听器都要监听一个不同的端口,比如一个服务器,但是要监听2个端口?
是的,你可以。只需声明2个不同的IPEndPoint
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 8888);
IPEndPoint localEndPoint2 = new IPEndPoint(ipAddress, 8880);
并将相应的Socket绑定到它
Socket s1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Socket s2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s1.Bind(localEndPoint);
s2.Bind(localEndPoint2);
答案 1 :(得分:0)
有可能。
..两个客户端可以连接到同一个服务器端口,因为对于每个客户端,我们可以分配不同的套接字(因为客户端IP肯定会有所不同)。同一个客户端也可以有两个连接到同一服务器端口的套接字 - 因为这些套接字因SRC-PORT而不同......
首先请记住以下两条规则:
套接字的主键:套接字由{SRC-IP标识, SRC-PORT,DEST-IP,DEST-PORT,PROTOCOL}不是由{SRC-IP,SRC-PORT, DEST-IP,DEST-PORT} - 协议是套接字的重要组成部分 定义
OS Process&套接字映射:一个进程可以与(可以打开/可以监听)多个套接字关联,这对许多读者来说可能是显而易见的。
示例1:连接到同一服务器端口的两个客户端意味着:socket1 {SRC-A,100,DEST-X,80,TCP}和socket2 {SRC-B,100,DEST-X,80,TCP}。这意味着主机A连接到服务器X的端口80,而另一个主机B也连接到同一服务器X到同一端口80.现在,服务器如何处理这两个套接字取决于服务器是单线程还是多线程(我会稍后解释一下)。重要的是一台服务器可以同时收听多个套接字。