0 votes

Connexion unique du serveur TCPIP

J'utilise des sockets c# en mode asynchrone.

j'ai besoin de ne servir qu'une seule connexion dans mon application du point de vue du serveur. une fois qu'une personne est connectée, je voudrais refuser toute autre demande de connexion.

De plus, 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.

J'aimerais avoir des idées sur la façon de contourner cette situation.

2voto

Jason Kresowaty Points 8053

Normalement, dans le BeginAccept async callback, vous appellerez BeginAccept à nouveau pour qu'une autre connexion puisse être acceptée. Toutefois, vous pouvez omettre cette étape si vous ne souhaitez pas autoriser une autre connexion. Pour que la connexion soit refusée en temps voulu, pensez également à fermer le socket d'écoute dans la callback. L'acceptation Socket restera ouvert dans ce cas pour que vous puissiez l'utiliser même si le socket d'écoute est fermé.

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. */
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X