2011-08-31 61 views
0

我正在與第三方設備打開一個tcp端口,一次只允許一個連接。如果我的應用程序連接到端口,則所有其他連接均被拒絕。任何現成的應用程序重播tcp數據包?

我想找到一個基本連接到此端口的應用程序,然後允許其他端口連接到它。 任何從設備端口發出的數據都會重播到任何連接的客戶端。

我知道如何編寫這樣一個應用程序,但它似乎是別人已經想到並寫出它的東西&共享,我可以避免花時間寫它。

basicaly代碼將是:

1)啓動TCP套接字服務器,結合TO_PORT(客戶端連接到這一點) 2)作爲客戶端連接到DEVICE_IP:DEVICE_PORT 3)當數據被讀入一個來自DEVICE_IP:DEVICE_PORT的緩衝區,緩衝區內容將重新發送給每個連接的客戶端。 4)其他一切使它成爲一個穩定的工作程序。

這是用於Windows,我寧願它不需要Java安裝。

我的谷歌技能失敗了我。

任何人都知道這樣的應用程序?

回答

0

想我會回答我的問題。

我實施了我自己的解決方案。

關鍵點,我的解決方案:

名爲IPClient一類包裝了一個TcpClient的情況下,使用呼叫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() {...} 
    }  

要打開,將允許其他客戶端連接的端口,我用這個庫:http://codeproject.com/KB/IP/BasicTcpServer.aspx和修改它一下。

它的工作就是打開一個端口,接受連接,並執行以下操作:

    在連接處理器
  1. ,啓動監聽端口在斷開處理
  2. ,停止監聽端口
  3. 在DataReceived處理程序中,將數據廣播到任何連接的客戶端。

我會拋棄其餘無聊的細節,但說它不是「太難」,最終我不得不推出自己的。

命令行用法:MyApp.exe的REMOTE_ADDR REMOTE_PORT listen_port我的程序主要的

僞碼/主要思路:

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; 
} 
1
+0

謝謝你的指針。事實上,我已經在昨天/今天自己寫了這個程序。我使用了這個項目的修改版本:http://www.codeproject.com/KB/IP/BasicTcpServer.aspx 基本上,我使用BeginConnect,BeginRead等的異步模型創建了一個TcpClient包裝類,上面的TcpServer類和一個自定義的TcpServiceProvider,迄今爲止都很好。 – Wes

相關問題