2010-01-14 5 views
0

J'utilise C# sockets Mode asynchrone.Connexion unique du serveur TCPIP

Je n'ai besoin de servir qu'une seule connexion dans mon application du point de vue du serveur. Une fois connecté, je voudrais refuser d'autres demandes de connexion.

également le serveur ne sert qu'à se connecter à un seul client. Lorsque la communication est terminée, le serveur doit être redémarré.

mais d'après ce que j'ai lu sur le sujet, il n'est pas possible de fermer beginaccept.

Je voudrais des idées concernant comment contourner cette situation.

Répondre

2

Normalement, dans le rappel asynchrone BeginAccept, vous appelez de nouveau BeginAccept pour qu'une autre connexion puisse être acceptée. Cependant, vous pouvez omettre cette étape si vous ne souhaitez pas autoriser une autre connexion. Pour que la connexion soit refusée en temps opportun, pensez également à fermer la prise d'écoute dans le rappel. Le Socket accepté restera ouvert dans ce cas pour que vous l'utilisiez même si la prise d'écoute est fermée.

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

Parfait! Merci de m'avoir aidé à comprendre la portée des sockets asynchrones. – iTEgg

Questions connexes