Tcp端口转发
定义
命名空间:TouchSocket.Sockets
程序集:TouchSocket.dll
一、说明
NatService是具有转发功能的TCP服务器。他的职能是将收到的TCP数据转发到多个目标服务器。也能将多个目标服务器的数据转发到连接客户端。
二、常见使用场景
- 调试场景在生产环境中,想要调试客户端,要么中断服务器,要么就将实际数据转发到Nat,然后在不影响实际场景的情况下进行调试。
- 内网穿透场景一般tcp都会使用转发式的内网穿透。
要使用NatService
进行网络地址转换(NAT),您需要遵循以下步骤来设置和运行服务。此示例是基于C#语言,并使用了TouchSocket库来简化网络编程。
三、创建服务
3.1 创建服务类
创建一个继承自NatService
的类,并重写必要的方法。在这个例子中,我们创建了一个名为MyNatService
的类。
internal class MyNatService : NatService<MyNatSessionClient>
{
protected override MyNatSessionClient NewClient()
{
return new MyNatSessionClient();
}
}
3.2 创建会话客户端类
创建一个继承自NatSessionClient
的类,并根据需要重写其中的方法。在这个例子中,我们创建了一个名为MyNatSessionClient
的类。
class MyNatSessionClient : NatSessionClient
{
#region 抽象类必须实现
protected override async Task OnNatConnected(ConnectedEventArgs e)
{
try
{
await this.AddTargetClientAsync(config =>
{
config.SetRemoteIPHost("127.0.0.1:7789");
//还可以配置其他,例如断线重连,具体可看文档tcpClient部分
});
}
catch (Exception ex)
{
//目标客户端无法连接,也就是无法转发
this.Logger.Exception(ex);
}
}
protected override async Task OnTargetClientClosed(NatTargetClient client, ClosedEventArgs e)
{
//可以自己重连,或者其他操作
//或者直接移除
this.RemoveTargetClient(client);
await EasyTask.CompletedTask;
}
#endregion
}
四、使用
在主函数中初始化服务并开始监听指定端口。这里我们监听的是7788端口,并且设置了日志记录。
private static async Task Main(string[] args)
{
var service = new MyNatService();
await service.SetupAsync(new TouchSocketConfig()
.SetListenIPHosts(7788)
.ConfigureContainer(a =>
{
a.AddLogger(logger =>
{
logger.AddConsoleLogger();
logger.AddFileLogger();
});
}));
await service.StartAsync();
service.Logger.Info("转发服务器已启动。已将7788端口转发到127.0.0.1:7789地址");
while (true)
{
Console.ReadKey();
}
}
提示
NatService
支持客户端适配器和Ssl
。也支持IRequestInfo转发和转发Ssl。