我正在尝试为具有2个网络适配器(私有和公共)的计算机编写一个程序,该计算机将私有接收的数据回传给公众,反之亦然。我只需要它来监听两个特定的端口,更具体地说,它应该在Private上打开一个套接字服务器,在Public上打开一个套接字客户端。
Public上的计算机IP地址是192.168.1.21,私有的IP地址是172.16.13.1,所以我认为这样的东西会起作用:
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地址和两个网络适配器。我已经研究过使用普通Socket
而不是TcpClient
s,但这似乎没有改变任何内容。