C# 不同适配器上的TCP回显
我正试图为一台有两个网络适配器(专用和公用)的计算机编写一个程序,该适配器可以将在专用网络上接收到的数据回传给公用网络,反之亦然。我只需要它在两个特定端口上侦听,更具体地说,它应该在Private上打开套接字服务器,在Public上打开套接字客户端 公用计算机的IP地址是192.168.1.21,而专用计算机的IP地址是172.16.13.1,所以我认为这样做可以:C# 不同适配器上的TCP回显,c#,sockets,C#,Sockets,我正试图为一台有两个网络适配器(专用和公用)的计算机编写一个程序,该适配器可以将在专用网络上接收到的数据回传给公用网络,反之亦然。我只需要它在两个特定端口上侦听,更具体地说,它应该在Private上打开套接字服务器,在Public上打开套接字客户端 公用计算机的IP地址是192.168.1.21,而专用计算机的IP地址是172.16.13.1,所以我认为这样做可以: IPEndPoint privateEndpoint1 = new IPEndPoint(IPAddress.Parse("172
IPEndPoint privateEndpoint1 = new IPEndPoint(IPAddress.Parse("172.16.13.1"), port1);
IPEndPoint privateEndpoint2 = new IPEndPoint(IPAddress.Parse("172.16.13.1"), port2);
IPEndPoint publicEndpoint1 = new IPEndPoint(IPAddress.Parse("192.168.1.21"), port1);
IPEndPoint publicEndpoint2 = new IPEndPoint(IPAddress.Parse("192.168.1.21"), port2);
TcpListener priList1 = new TcpListener(privateEndpoint1);
TcpListener priList2 = new TcpListener(privateEndpoint2);
TcpClient pubCli1 = new TcpClient(publicEndpoint1); //Error here
TcpClient pubCli2 = new TcpClient(publicEndpoint2);
然后我得到流并进行实际的回音
问题是我在标记的行上出现错误:
每个套接字地址(协议/网络地址/端口)通常只允许使用一次
从错误中可以看出,
IPEndPoint
构造函数没有区分两个IP地址和两个网络适配器。我研究过使用普通的套接字
s而不是TcpClient
s,但这似乎没有改变任何事情。端口1和端口2的值是多少?另外,是否已经有东西在监听192.168.1.21:port1
?port1
和port2
来自命令行参数。192.168.1.21上还有另一个服务正在侦听:端口1。基本上,另一个服务期望在错误的网络适配器上建立连接,这就是我编写此程序的原因。使用SSH隧道之类的方法使流量朝着正确的方向运行可能要简单得多;我看不出你的代码有什么理由仅仅根据你向我们展示的内容引发该异常。实际上,我发现并修复了它,用套接字替换了所有TCPClient
和TcpListener
。我在等待TCPClient
是否有实际的答案,因为正如@Dan-o所说,似乎没有任何例外的原因。