2010-02-15 220 views
1

我有多個設備連接到TCP/Ip端口,我想通過.Net中的套接字讀取所有這些設備我怎麼能這樣做這之前,我有一個單一的設備連接,它工作正常,但現在我有多個設備可以有人幫我聽多個套接字連接?多個套接字連接

回答

0

事實上,對於多連接應用程序,服務器偵聽特定的端口,並且在接收到連接後,它會返回一個新的端口,您的設備將在其中創建一個新的套接字。

1

這不是一個完整的答案,但應指向正確的方向。您可以使用類似
Socket socketForClient = tcpListener.Accept();
呼叫每個連接的客戶端。您可以擁有一組Socket對象,您可以在新連接進入或關閉時處理/更新這些對象。

1

您將需要創建一個異步Tcp偵聽器。閱讀在這裏:MSDN Socket Class

首先設置您的聽衆:

private static System.Threading.ManualResetEvent connectDone = 
      new System.Threading.ManualResetEvent(false); 

void StartListen(IPEndPoint serverEP, int numDevices) 
{ 
    sock.Bind(serverEP); 
    sock.Listen(numDevices); // basically sit here and wait for client to request connect 

    /* 
    * While statement not required here because AcceptConnection() 
    * method instructs the socket to BeginAccept()... 
    */ 
    connectDone.Reset(); 
    sock.BeginAccept(new AsyncCallback(AcceptConnection), sock); 
    connectDone.WaitOne(); 
} 

在一些例子中,你可能會看到一個while(true)塊內的BeginAccept(...)方法。但你不需要異步。我認爲使用while(true)是不合適的。當然,你再接受連接aynchronously:

void AcceptConnection(IAsyncResult asyncRes) 
{ 
    connectDone.Set(); 
    System.Net.Sockets.Socket s = channelworker.EndAccept(asyncRes); 
    byte[] messagebuffer = new byte[bufferSize]; 

    /* 
    * Tell socket to begin Receiving from caller. 
    */ 
    s.BeginReceive(messageBuffer, 0, messageBuffer.Length, 
     System.Net.Sockets.SocketFlags.None, new AsyncCallback(Receive), s); 

    /* 
    * Tell Channel to go back to Accepting callers. 
    */ 
    connectDone.Reset(); 
    sock.BeginAccept(new AsyncCallback(AcceptConnection), sock); 
    connectDone.WaitOne(); 
} 

通常情況下,一旦你通過一對夫婦的同步練習過程中,並獲得.Beginxxx/.Endxxx 方法的竅門,並使用AsyncCallback的,你會得到的竅門怎麼運行的。通讀我給你的MSDN參考,這應該會給你一個很好的開始。