我需要一个 C# 层来帮助在正在监听的两个 TCP 端口之间交换数据。
例如,有一个监听端口@192.168.1.2::5555,另一个监听端口@192.168.1.4::6666。
我可以使用 socket.connect 建立与两个监听器的连接 我在创建 2 个线程时感到困惑 1> Sock1.read()->转换为字节->sock2 .write() 2> Sock2.read()->转换为字节-> Sock1.write()
我认为这正在进入无限循环。有没有更好的方法通过建立到两个端口的连接来在2个监听端口之间交换数据包?
我必须实现一个方法
Private void ExchangePackets(IpEndpoint ipe1,IpEndpoint ipe2)
{
//code here
}
最佳答案
它可以是这样的:(未测试)
void ExchangePackets(IPEndPoint ipe1, IPEndPoint ipe2)
{
TcpClient tcp1 = new TcpClient();
tcp1.Connect(ipe1);
TcpClient tcp2 = new TcpClient();
tcp2.Connect(ipe2);
Task.Factory.StartNew(() => ByPass(tcp1, tcp2), TaskCreationOptions.LongRunning);
Task.Factory.StartNew(() => ByPass(tcp2, tcp1), TaskCreationOptions.LongRunning);
}
void ByPass(TcpClient tcp1, TcpClient tcp2)
{
using (tcp1)
using (tcp2)
{
Stream s1 = tcp1.GetStream();
Stream s2 = tcp2.GetStream();
byte[] buf = new byte[0x10000];
int len = s1.Read(buf, 0, buf.Length);
while (len > 0)
{
s2.Write(buf, 0, len);
len = s1.Read(buf, 0, buf.Length);
}
}
}
关于c# - 在 2 个监听器之间桥接异步全双工 TCP 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12800813/