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()...
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...
cs_L0ci
Messages postés224Date d'inscriptionvendredi 26 novembre 2010StatutMembreDernière intervention11 juin 20137 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();
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 ?