C# 为什么可以';我不能连接两个插座吗?

C# 为什么可以';我不能连接两个插座吗?,c#,network-programming,C#,Network Programming,我正在编写处理来自两台服务器A和B的数据流的客户端代码。所有三个节点都位于同一个本地子网中。我正在尝试创建两个定义如下的套接字 套接字描述=[本地/客户端IP]:[本地/客户端端口]:[远程/服务器IP]:[远程/服务器端口] 要连接到的套接字:[192.168.40.10]:[50002]:[192.168.40.60]:[50002] 要连接到B的套接字:[192.168.40.10]:[50002]:[192.168.40.61]:[50002] 当我试图打开第二个套接字时,我得到一个异常

我正在编写处理来自两台服务器A和B的数据流的客户端代码。所有三个节点都位于同一个本地子网中。我正在尝试创建两个定义如下的套接字

套接字描述=[本地/客户端IP]:[本地/客户端端口]:[远程/服务器IP]:[远程/服务器端口]

要连接到的套接字:[192.168.40.10]:[50002]:[192.168.40.60]:[50002]

要连接到B的套接字:[192.168.40.10]:[50002]:[192.168.40.61]:[50002]


当我试图打开第二个套接字时,我得到一个异常,即“每个套接字地址也称为协议/网络地址/端口只能使用一次”。我想我可以定义一个不同的套接字,因为远程IP地址不同,即使本地IP地址和端口号相同。我别无选择,只能通过同一个套接字使用两个数据流吗?

您不能同时使用机器的同一本地端口两次。您可以在本地机器上打开另一个套接字(具有另一个端口号,例如50003),然后连接到[192.168.40.61]:[50002]上的远程套接字。

您不能同时使用机器的同一本地端口两次。您可以在本地计算机上打开另一个套接字(具有另一个端口号,例如50003),然后连接到[192.168.40.61]:[50002]上的远程套接字。

您使用相同的TCP端口
[50002]
进行连接,以建立两个不同的连接,这是不可能的。您必须使用不同的端口来进行两个单独的套接字连接


当您谈到唯一地标识两个连接时,它是通过
IP+端口

您正在使用相同的TCP端口
[50002]
进行连接,以建立两个不同的连接,这是不可能的。您必须使用不同的端口来进行两个单独的套接字连接


当您谈到唯一地标识两个连接时,它是通过
IP+端口

感谢您的澄清。我读过一些人描述套接字标识包括远程IP地址。显然不是真的。谢谢你的澄清。我读过一些人描述套接字标识包括远程IP地址。显然不是这样。因为您是客户机,所以只需将localport属性保留为空即可。Windows将选择一个免费的。只有当您将套接字设置为侦听模式时,才需要localport。我认为我需要配置两台服务器(因为我有这种能力)以使用目标ip 192.168.40.10,并将每台服务器设置为使用唯一的目标端口。然后,我可以打开运行在客户端两个线程上的两个套接字,并从每个服务器流接收数据包。这使我可以重复使用为处理单个流而编写的大量代码。Windows将选择一个免费的。只有当您将套接字设置为侦听模式时,才需要localport。我认为我需要配置两台服务器(因为我有这种能力)以使用目标ip 192.168.40.10,并将每台服务器设置为使用唯一的目标端口。然后,我可以打开运行在客户端两个线程上的两个套接字,并从每个服务器流接收数据包。这允许我重用我编写的大量代码来处理单个流。