Socket se déconnecte tout seul ? [Résolu]

- - Dernière réponse :  rheneault - 14 nov. 2012 à 22:00
Salut à tous !

J'ai un petit soucis.
Je suis en train de coder un "client/serveur" mais en un peu plus avancé, c'est-à-dire que j'éspère pouvoir envoyer une commande au serveur et qu'il l'exécute sur la machine distante (par exemple shutdown).

Dans mon client j'ai deux classes différentes, celle de ma Winform et celle qui contient toutes mes fonctions avec le socket déclaré "généralement" si je puis dire :

public partial class Form1 : Form
{
     public void bouton_Connexion_click()
     {
          MonClient client = new MonClient();
          client.Connect();
    
     }
}

public class MonClient
{
      public Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

      public int Connect()
      {
           // [...]

           server.Connect();

           // [...]
      }
      
      public int Send(string message)
      {
            // [...]

            server.Send(Encoding.ASCII.GetBytes(message));

            // [...]
      }
 
      public int Disconnect()
      {
           // [...]

           server.Close();
      }
}


Le code du click bouton est à peu près le même pour toutes les fonctions de ma classe.
Je n'ai aucun soucis lors de la connexion ou de la déconnexion, mais lorsque j'essaye d'utiliser ma fonction Send(), Visual Studio me dit que je ne peux pas envoyer de données si le socket est déconnecté, or dans l'ordre des choses je me connecte juste avant avec ma fonction Connect()...

Une lanterne pour m'éclairer ?
Merci d'avance.
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
224
Date d'inscription
vendredi 26 novembre 2010
Dernière intervention
11 juin 2013
3
Merci
Bonjour,

opur fonctionner il faut que ton objet client soit accessible dans toute la classe:

public partial class Form1 : Form
{
MonClient client
    public Form1()
        {
            InitializeComponent();
            client = new Client();
        }
}
Et après faire les appels directement sur ton objet client déjà instancé

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 cs_L0ci
Messages postés
133
Date d'inscription
mercredi 6 mars 2002
Dernière intervention
27 novembre 2012
0
Merci
La question qui tue .. (je te le dis, ça m'est déjà arrivé par oubli) t'es sur que ton serveur est bien lancé ?

en debuggant le serveur, tu visualises bien la requête de connexion ?

MisterMok
Commenter la réponse de BarthOlivier
Messages postés
224
Date d'inscription
vendredi 26 novembre 2010
Dernière intervention
11 juin 2013
0
Merci
Bonjour,

Attention aussi si tu utilises un bloc using(socket){...} coté serveur ou client. A la fin du using la Socket se ferme.
Commenter la réponse de cs_L0ci
0
Merci
Salut,

Oui je vois bien la requête de mon client à la connexion, j'utilise netcat en mode serveur pour ça !

A+
Commenter la réponse de rheneault
0
Merci
Pour appeler la fonction j'utilise à chaque fois "MonClient client = new MonClient()" suivi de "client.lafonctionenquestion".
Cela ne pourrait pas venir de là?

A+

Ps: désolé pour le double-post je ne trouve pas la fonction edit...
Commenter la réponse de rheneault
Messages postés
224
Date d'inscription
vendredi 26 novembre 2010
Dernière intervention
11 juin 2013
0
Merci
Salut,

Si tu utilises "MonClient client = new MonClient();" avant chaque envoi de message ça va forcément générer une erreur car la socket précédemment ouverte n'est pas dispo pour ton nouvel objet. (A moins de relancer une connexion à chaque fois)
Il faut donc instancier une fois ton client puis ensuite accéder a toutes les fonctions via client.MaFonction();
Commenter la réponse de cs_L0ci
0
Merci
Oui seulement dans ma fonction Connect() il n'y a pas uniquement "server.connect(Host)" mais aussi une série de message avec le serveur auquel j'envoie des identifiants et celui-ci me répond si ils sont corrects ou non, auquel cas la fonction envoyer un message de mon logiciel se débloque... Il faudrait donc que je me connecte une première fois, que j'échange les identifiants, puis après une deuxième fois au moment d'envoyer le message ?
Ne puis-je pas utiliser le MÊME socket pour se connecter et envoyer des messages dans deux fonctions différentes ?

A+ et merci
Commenter la réponse de rheneault
0
Merci
Merci cela fonctionne à merveille, je n'y avait pas pensé plus tôt !
En effet il faut instancier ma classe au lancement du programme.

Merci beaucoup !
A+
Commenter la réponse de rheneault

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.