Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 有没有现成的应用程序可以重播tcp数据包?_Sockets_Tcp - Fatal编程技术网

Sockets 有没有现成的应用程序可以重播tcp数据包?

Sockets 有没有现成的应用程序可以重播tcp数据包?,sockets,tcp,Sockets,Tcp,我正在使用第三方设备,该设备打开一个tcp端口,一次只允许一个连接。如果我的应用程序连接到该端口,则所有其他连接都将被拒绝 我想找到一个应用程序,基本上连接到这个端口,然后允许其他人连接到一个不同的端口。 然后,从设备端口发送的任何数据都会重新广播到任何连接的客户端 我知道如何编写这样的应用程序,但它似乎是其他人已经考虑过并编写的&共享的,我可以避免花时间编写它 基本代码是: 1) 启动tcp套接字服务器,绑定到\u端口(客户端连接到此端口) 2) 作为客户端连接到设备\u IP:设备\u端口

我正在使用第三方设备,该设备打开一个tcp端口,一次只允许一个连接。如果我的应用程序连接到该端口,则所有其他连接都将被拒绝

我想找到一个应用程序,基本上连接到这个端口,然后允许其他人连接到一个不同的端口。 然后,从设备端口发送的任何数据都会重新广播到任何连接的客户端

我知道如何编写这样的应用程序,但它似乎是其他人已经考虑过并编写的&共享的,我可以避免花时间编写它

基本代码是:

1) 启动tcp套接字服务器,绑定到\u端口(客户端连接到此端口) 2) 作为客户端连接到设备\u IP:设备\u端口 3) 当数据从DEVICE_IP:DEVICE_端口读入缓冲区时,缓冲区内容将重新发送给每个连接的客户端。 4) 使它成为一个稳定的、可运行的程序的其他一切

这是针对windows的,我希望它不需要java安装

我的谷歌技能让我失望


有人知道这样的应用吗?

对你来说不是一个完整的解决方案,但可能会很有趣


我想我会回答我自己的问题

我自己实现了这个解决方案

我的解决方案的要点:

封装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;
}