IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Fermeture du Socket


Sujet :

C#

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Fermeture du Socket
    Salut à tous !

    Je suis ici ce soir car j'ai un petit problème... ( eh oui, encore un! )

    Malgré mes recherches, je ne trouve pas grand-chose
    ( ou bien mon cerveau qui n'est pas assez gros ? )

    J'aime bien le dev, et j’apprends de moi-même,
    alors plus vous pourrez m'apprend, et plus je serais :


    Enfin bref, je suis actuellement entrai de développer une application qui
    communique en TCP avec d'autres ( architecture client-serveur )

    Dans ce cas, de multiples clients peuvent se connecter au "serveur"


    Seulement je rencontre quelques problèmes lors de la fermeture du Socket


    Voici mon code ( le plus simple possible )


    Classe TcpClient : prévue pour traiter chaque client séparément

    Classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    		private int maxConnections = 1;
    		// socket principal
    		public Socket socketHandler;
    		// liste des clients connectés
    		public HashSet<TcpClient> clients = new HashSet<TcpClient>();;
     
     
    		public Boolean startListening(int _port, int _maxConnections)
    		{
    			try
    			{	
    				this.maxConnections = _maxConnections;
     
    				//bind et listen
    				socketHandler = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    				socketHandler.Bind(new IPEndPoint(IPAddress.Any, _port));
    				socketHandler.Listen(this.maxConnections);
     
    				socketHandler.BeginAccept(new AsyncCallback(newConnection), socketHandler);
    			}
    			catch()
    			{
    			}
    		}
     
    		private void newConnection(IAsyncResult iAr)
    		{
    			try
    			{
    				Socket socket = ((Socket)iAr.AsyncState).EndAccept(iAr);
     
    				// "Nouvelle connection !"
     
                                    // ajout
    				clients.Add(new TcpClient(socket, clientCount));
     
    			}
    			catch()
    			{
     
    			}
     
                       socketHandler.BeginAccept(new AsyncCallback(newConnection), socketHandler);
     
    		}
     
    	}

    Maintenant la fonction qui ferme ce socket :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void destroy()
    {
         foreach (TcpClient client in clients)
         {
         // appel de fonction de fermeture de tous les clients listés
         client.Disconnect();
         }
     
         clients = null;
    }
    Jusque là tout va bien

    D'après la doc, pour fermer le socket :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    socketHandler.Shutdown (SocketShutdown.Both);
    Erreur : je reçoit aussi une connexion de la part de "newConnection"
    Avec l'erreur : Une requête d'envoi ou de réception de données n'a pas été autorisée car le socket n'est pas connecté

    puis :

    Erreur : je reçoit une connexion de la part de la fonction "newConnection"
    Avec l'erreur : "Impossible d'accèder à un objet supprimé", ce que es logique puisque qu'il est fermé ...



    Là je suis un peu à sec ... si quelqu'un voit comment faire, il est le bienvenu !

    Je pense avoir tout expliqué, plus ou moins clairement


    Je vous remercie d'avance pour votre aide
    .
    Dernière modification par Invité ; 22/10/2013 à 23h46.

Discussions similaires

  1. [DOM] Fermeture de Socket apres parsage XML
    Par Ange-Louis dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 14/04/2008, 17h10
  2. Problème de fermeture de sockets
    Par Shredder dans le forum Web & réseau
    Réponses: 28
    Dernier message: 15/09/2007, 09h21
  3. fermeture de socket
    Par youp_db dans le forum Réseau
    Réponses: 2
    Dernier message: 15/09/2006, 16h23
  4. Fermeture de socket me pose problème !
    Par MonsieurAk dans le forum Réseau
    Réponses: 2
    Dernier message: 15/05/2006, 23h03
  5. [Linux] Probleme de fermeture de Sockets
    Par diefo dans le forum Réseau
    Réponses: 6
    Dernier message: 30/12/2003, 13h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo