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

NeoManox 5 Messages postés jeudi 4 novembre 2004Date d'inscription 19 février 2009 Dernière intervention - 18 févr. 2009 à 16:50 - Dernière réponse : RougailSaucisse 118 Messages postés lundi 16 février 2009Date d'inscription 6 décembre 2010 Dernière intervention
- 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
RougailSaucisse 118 Messages postés lundi 16 février 2009Date d'inscription 6 décembre 2010 Dernière intervention - 19 févr. 2009 à 18:23
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.

Merci RougailSaucisse 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 125 internautes ce mois-ci

Commenter la réponse de RougailSaucisse
RougailSaucisse 118 Messages postés lundi 16 février 2009Date d'inscription 6 décembre 2010 Dernière intervention - 18 févr. 2009 à 18:18
0
Merci
hum ne faudrait-il pas faire un serverSocket.Close()?
Commenter la réponse de RougailSaucisse
cs_vagg 102 Messages postés vendredi 13 juin 2008Date d'inscription 24 janvier 2013 Dernière intervention - 19 févr. 2009 à 09:51
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
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 19 févr. 2009 à 10:26
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
NeoManox 5 Messages postés jeudi 4 novembre 2004Date d'inscription 19 février 2009 Dernière intervention - 19 févr. 2009 à 11:21
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.