2010-01-13 21 views
0

J'ai besoin d'aide avec socket.listen. My_connections est défini sur 1. mais même après qu'un client est connecté si un autre client essaie de se connecter, du côté client, il dit qu'il s'est connecté bien que le serveur ne signale rien de nouveau.C# Socket.Listen (MAX_CONNECTIONS);

mon application est entre un serveur et un client. et si un autre client essaie de se connecter alors qu'il y a déjà une connexion, je veux que cette connexion soit refusée.

s'il vous plaît aider avec quelques idées.

merci beaucoup.

+0

Cela pourrait-il être un bug côté client? Peut-être que le client rapporte qu'il est connecté quand ce n'est pas le cas? – Mark

Répondre

5

Vous n'avez fourni aucun code, mais le titre de vos références Socket.Listen. Le paramètre donné à Socket.Listen n'est pas le nombre maximal de connexions, mais plutôt la taille du "backlog" des connexions entrantes. Cela signifie que lorsque quelqu'un essaie de se connecter, mais que votre serveur n'a pas encore établi la connexion, ces clients se trouvent dans la file d'attente du "backlog". Vous avez défini la taille sur 1, donc seulement 1 client peut attendre pour se connecter à la fois.

Ce paramètre n'a aucun effet sur le nombre total de connexions autorisées pour votre application.

+0

ok. ça a du sens. Je pensais avoir une mauvaise idée concernant Listen. une fois que j'ai fait une connexion je peux juste fermer la prise d'écoute et cela devrait prendre soin de lui, je pense .. – iTEgg

0

Vous pouvez utiliser la propriété IsConnected sur votre TCPClient pour vérifier si une connexion existe déjà et en décider.

0

Je vous propose d'accepter une nouvelle connexion client mais d'acquérir le semaphor immédiatement avant d'accéder au serveur encapsulé et de le libérer immédiatement après l'accès. Cette approche vous permet de contrôler combien de clients utilisent simultanément le serveur encapsulé.