Sockets 有没有现成的应用程序可以重播tcp数据包?
我正在使用第三方设备,该设备打开一个tcp端口,一次只允许一个连接。如果我的应用程序连接到该端口,则所有其他连接都将被拒绝 我想找到一个应用程序,基本上连接到这个端口,然后允许其他人连接到一个不同的端口。 然后,从设备端口发送的任何数据都会重新广播到任何连接的客户端 我知道如何编写这样的应用程序,但它似乎是其他人已经考虑过并编写的&共享的,我可以避免花时间编写它 基本代码是: 1) 启动tcp套接字服务器,绑定到\u端口(客户端连接到此端口) 2) 作为客户端连接到设备\u IP:设备\u端口 3) 当数据从DEVICE_IP:DEVICE_端口读入缓冲区时,缓冲区内容将重新发送给每个连接的客户端。 4) 使它成为一个稳定的、可运行的程序的其他一切 这是针对windows的,我希望它不需要java安装 我的谷歌技能让我失望Sockets 有没有现成的应用程序可以重播tcp数据包?,sockets,tcp,Sockets,Tcp,我正在使用第三方设备,该设备打开一个tcp端口,一次只允许一个连接。如果我的应用程序连接到该端口,则所有其他连接都将被拒绝 我想找到一个应用程序,基本上连接到这个端口,然后允许其他人连接到一个不同的端口。 然后,从设备端口发送的任何数据都会重新广播到任何连接的客户端 我知道如何编写这样的应用程序,但它似乎是其他人已经考虑过并编写的&共享的,我可以避免花时间编写它 基本代码是: 1) 启动tcp套接字服务器,绑定到\u端口(客户端连接到此端口) 2) 作为客户端连接到设备\u IP:设备\u端口
有人知道这样的应用吗?对你来说不是一个完整的解决方案,但可能会很有趣
我想我会回答我自己的问题 我自己实现了这个解决方案 我的解决方案的要点: 封装TcpClient实例的名为IPClient的类使用调用TcpClient.BeginConnect、BeginRead等的异步模型。它有一个计时器,用于在失去连接时重新连接。 这是连接到设备的类 它的公共界面将如下所示:
public class IPClient{
public event EventHandler<MyConnectedArgs> Connected;
public event EventHandler<MyDisconnectedArgs>Disconnected;
public event EventHandler<MyDataReceivedArgs> DataReceived;
public bool Connect(string address, int port){...}
public bool Disconnect() {...}
}
谢谢你的指点。事实上,就在昨天/今天,我自己编写了这个应用程序。我使用了这个项目的一个修改版本:基本上,我使用BeginConnect、BeginRead等异步模型创建了一个TcpClient包装器类,包括上面的TcpServer类和一个定制的TcpServiceProvider,到目前为止一切都很好。
static int Main(string[] args){
//SetConsoleCtrlHandler(my callback re: ctrl+C,etc)
//get command line params
var ipClient = new IPClient();
var myprovider = MyTcpServiceProvider();
var server = new TcpServer(myProvider, listenPort);
ipClient.Connected += (sender, e) => server.Start();
ipClient.Disconnected += (sender,e) => server.Stop();
ipClient.DataReceived += (sender,e)=> provider.BroadcastToClients(e.Data);
ipClient.Connect(remoteAddress, remotePort);
//wait for Ctrl+C or program exit
//shutdown code,etc
return 0;
}