Socket se déconnecte tout seul ?

Résolu
rheneault - 12 nov. 2012 à 19:50
 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.

8 réponses

cs_L0ci Messages postés 224 Date d'inscription vendredi 26 novembre 2010 Statut Membre Dernière intervention 11 juin 2013 7
14 nov. 2012 à 20:10
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é
3
BarthOlivier Messages postés 132 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 27 novembre 2012 1
13 nov. 2012 à 08:49
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
0
cs_L0ci Messages postés 224 Date d'inscription vendredi 26 novembre 2010 Statut Membre Dernière intervention 11 juin 2013 7
13 nov. 2012 à 09:05
Bonjour,

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

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

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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...
0
cs_L0ci Messages postés 224 Date d'inscription vendredi 26 novembre 2010 Statut Membre Dernière intervention 11 juin 2013 7
14 nov. 2012 à 10:01
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();
0
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
0
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+
0
Rejoignez-nous