Comment détruire un objet??? [Résolu]

Messages postés
5
Date d'inscription
jeudi 4 novembre 2004
Dernière intervention
19 février 2009
- - Dernière réponse : RougailSaucisse
Messages postés
118
Date d'inscription
lundi 16 février 2009
Dernière intervention
6 décembre 2010
- 19 févr. 2009 à 18:23
Bonjour,

Je développe actuellement un programme de communication TCP/IP en C#.

Mon problème est le suivant: j'utilise une fonction pour lancer l'écoute du server, il est possible de l'appeler plusieurs fois (par exemple on veut relancer l'écoute après avoir changer de port)...Ce qu'il se passe: à chaque fois que je lance ma fonction, le programme conserve les anciennes instances de mon objet TcpListener c'est a dire que j'ouvre plusieurs port sans les refermer et si j'entre 2 fois le même port bien entendu j'ai une erreur.

Voila mon code pour la fonction:

        private void listener()
        {
            try
            {
                serverSocket = new TcpListener(getYourIP(), port);
                serverSocket.Start();
                if (infoLabel != null) writeString(infoLabel, "En attente de clients.", 0);
                serverSocket.AcceptSocket();
                infoLabel = null;
            }
            catch
            {
                if (infoLabel != null) writeString(infoLabel, "Echec de la connexion.", 2);
                infoLabel = null;
            }           
        }

Je pensais à qu'à l'origine le fait de recréer un objet TcpListener serverSocket suprimerais l'ancien mais ce n'est visiblement pasle cas, comment supprimer l'ancienne instance?!?

Merci d'avance.
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
118
Date d'inscription
lundi 16 février 2009
Dernière intervention
6 décembre 2010
3
Merci
Pour ma part j'ai realisé un test similaire et ca fonctionne sans encombre:

TcpClient client;

server = new TcpListener(localAddr, port);
server.Start();
Console.WriteLine("Recpetion 1");
client= server.AcceptTcpClient();
//traitement de reception d'infos du client
client.close();
server.close();

server = new TcpListener(localAddr, port);

server.Start();
Console.WriteLine("Recpetion 2");
client = server.AcceptTcpClient();

//traitement de reception d'infos du client

client.close();

server.close();

il recoit bien mes infos envoyés par le client puis passe en "reception2" et recoit de nouveau les infos envoyés par le client.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de RougailSaucisse
Messages postés
118
Date d'inscription
lundi 16 février 2009
Dernière intervention
6 décembre 2010
0
Merci
hum ne faudrait-il pas faire un serverSocket.Close()?
Commenter la réponse de RougailSaucisse
Messages postés
102
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
24 janvier 2013
0
Merci
Je pense qu'un serverSocket.Dispose(); serait bien sympa aussi. Au moins ça libère totalement les ressources.
Commenter la réponse de cs_vagg
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
0
Merci
Certains objets implémentant l'interface IDisposable possèdent une méthode Close() pour une question de logique (pour un fichier, c'est plus logique d'appeler une méthode Close que Dispose par exemple).
La méthode Close fera en interne un appelle à Dispose....

<hr />
-Blog-
-Site Perso-
Commenter la réponse de cs_Bidou
Messages postés
5
Date d'inscription
jeudi 4 novembre 2004
Dernière intervention
19 février 2009
0
Merci
en effet le méthode close existe bien mais voila nouveau problème, impossible de recréer un objet après. voila mon code:

            try
            {
                if ((serverSocket != null) && (serverSocket.Server.IsBound))
                {
                    serverSocket.Server.Close();
                }
                serverSocket = new TcpListener(getYourIP(), port);
                serverSocket.Start();
                if (infoLabel != null) writeString(infoLabel, "En attente de clients.", 0);
                serverSocket.AcceptSocket();
                infoLabel = null;
            }

et voila l'exception que j'obtiens dès que j'essaye de manipuler mon objet serverSocket.

$exception    {"Une opération de blocage a été interrompue par un appel à WSACancelBlockingCall"}    System.Exception {System.Net.Sockets.SocketException}
Commenter la réponse de NeoManox

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.