J'essaye de faire ce qui suit: écouter sur un port pour les connexions de bouclage seulement, puis commencer à écouter sur n'importe quelle adresse IP. Voici le code:TcpListener problème - re-liaison au même port avec différentes adresses locales
TcpListener l1 = new TcpListener(new IPEndPoint(IPAddress.Loopback, 12345));
l1.Start();
Socket s = l1.AcceptSocket();
Console.ReadKey();
//s.Close();
l1.Stop();
TcpListener l2 = new TcpListener(new IPEndPoint(IPAddress.Any, 12345));
l2.Start();
l2.AcceptSocket();
Console.ReadKey();
Le problème est que si un client se connecte tout en écoutant sur l'adresse Loopback (l1), aucun autre client peut se connecter à l'adresse de bouclage lorsque le deuxième écouteur (L2) commence à écouter . pourquoi donc?
Une autre chose que j'ai remarquée est que si je ferme tous les clients qui se sont connectés à l1 (la ligne remarquée), alors l2 accepte les connexions de bouclage.
Des idées?
Je voudrais éviter d'écouter sur tout interface et discriminer les connexions. J'ai besoin des deux étapes: Loopback puis Any. Pourquoi TcpListener.Stop() sur le premier écouteur n'autorise-t-il pas le second écouteur à accepter les connexions de bouclage si un client est connecté au premier écouteur? –
Je ne vois pas ce que vous voulez dire. Comment discrimines-tu quelque chose? Si vous devez gérer plusieurs connexions à la fois, pensez à regarder certains composants prêts à l'emploi comme Indy Sockets. –
Ce n'est pas le problème. Je pose une question technique, une question de Windows interne sur le comportement des prises d'écoute. Écoute sur l'interface Loopback, fermeture, puis écoute sur Toute interface. –