Re-connexion à un socket

[Résolu]
Signaler
Messages postés
43
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
1 août 2009
-
Messages postés
43
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
1 août 2009
-
Bonjour , j'ai programmé un client en C# .net..
A la première connexion sur le serveur, aucun problème notable.







Resultat de netstat -n -o 2 :

  TCP    127.0.0.1:1690         127.0.0.1:65133        ESTABLISHED     3552
  TCP    127.0.0.1:65133        127.0.0.1:1690         ESTABLISHED     1260


Première déconnexion :

le serveur se met à prendre 99% des ressources du cpu


Après la deuxième connexion, le serveur n'éxecute plus les commandes du client

,



  TCP    127.0.0.1:1690         127.0.0.1:65133        ESTABLISHED     3552

  TCP    127.0.0.1:65133        127.0.0.1:1690         ESTABLISHED     1260


Pour les tentatives de connexions suivantes le serveur refuse la connexion
  TCP    127.0.0.1:1705         127.0.0.1:65133        FIN_WAIT_2      1500
  TCP    127.0.0.1:65133        127.0.0.1:1705         CLOSE_WAIT      3032

Le problème ne vient pas du serveur car avec des clients vb6 ou telnet , tout fonctionne correctement.

Une personne ayant le même problème :http://www.thescripts.com/forum/post2386489-1.html
Voici la procédure de connexion:

Boolean essaiconnec(string IP,string port)
        {
            try
            {
                int myport=System.Convert.ToInt32(port);
                if (Mymodule.ClientSocket == null)
                {
                    Mymodule.ClientSocket = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                }
                 Mymodule.ClientSocket.Connect(IP, myport);
                //this.envoicommande("/dummy command");
                return true;
            }
            catch (Exception myexception)
            {

                MessageBox.Show(myexception.ToString());
                return false;
            }
Voici ma procédure de déconnexion :

private void déconnexionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.envoicommande("/kill");
            if (Mymodule.ClientSocket.Connected)
            {
                Mymodule.ClientSocket.Shutdown(SocketShutdown.Both);
                Mymodule.ClientSocket = null;
                 pictureBox1.BackColor = System.Drawing.Color.Red;
                label3.Text = "Déconnecté";
                tab.Enabled = false;
                timer1.Stop();
            }
        }

Voyez-vous une erreur dans mon code ??
D'avance merci








 


<center> 

</center>

5 réponses

Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
20
salut,

tu peux construire un networkstream à partir d'un socket ou dérivée...

networkstream ns = new networkstream(ton_socket);
//utilisation
ns.close();

et pas de shutdown...

ShareVB
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
20
salut,

la méthode shutdown permet de fermer les flux d'envoi et de réception...ce qui ne correspond absolument pas à une fermeture du socket lui-même...de plus, mettre ton socket à null ne libère pas les ressources de ton objet socket avant le passage au gc (et encore, je ne suis pas certain que le destructeur appelle close)...

ce que tu devrais faire :
-> appelle la méthode close de networkstream
-> puis la méthode close de ton socket

ShareVB
Messages postés
43
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
1 août 2009

Salut,
La methode close du socket n'apparait pas sur l'exemple , erreur de copier/coller..
Par contre je vois pas du tout comment appeler la méthode close de networkstream,sachant que je vois pas comment récuperer le stream, pas réussi à appeler getStream..
Je vais changer de tactique et utiliser la classe tcpclient pour voir .
@++





 


<center> 

</center>
Messages postés
43
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
1 août 2009

Ok merci, je testerai dans la semaine si possible, je donne des news dès que possible..





 


<center> 

</center>
Messages postés
43
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
1 août 2009

ok vraiment pas moyen de se reconnecter au socket ,le problème vient surement du serveur
merci.
 

<center> 

</center>