2010-01-14 229 views
0

我正在使用c#套接字異步模式。TCPIP服務器單連接

從服務器的角度來看,我需要在我的應用程序中只提供一個連接。一旦有人連接,我想拒絕任何更多的連接請求。

此外,服務器僅用於連接到單個客戶端。當通信完成時,服務器必須重新啓動。

但從我讀過的話題來看,不可能關閉beginaccept。

我想了解如何解決這種情況的一些想法。

回答

2

通常,在BeginAccept異步回調中,您將再次撥打BeginAccept,以便可以接受另一個連接。但是,如果您不想允許其他連接,則可以省略此步驟。爲了及時拒絕連接,考慮在回調中關閉監聽套接字。在這種情況下,即使偵聽套接字已關閉,接受的Socket仍將保持打開狀態。

class SocketTest 
{ 
    private Socket m_Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

    public void Test() 
    { 
     m_Listener.Bind(new IPEndPoint(IPAddress.Loopback, 8888)); 
     m_Listener.Listen(16); 
     m_Listener.BeginAccept(AcceptCallback, null); 
    } 

    private void AcceptCallback(IAsyncResult ar) 
    { 
     Socket s = m_Listener.EndAccept(ar); 
     m_Listener.Close(); 
     /* Use s here. */ 
    } 
} 
+0

完美!感謝您幫助我理解異步套接字的範圍。 – iTEgg 2010-01-15 00:37:22