Recuperation d'une socket

Signaler
Messages postés
23
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
27 octobre 2006
-
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
-
Bonjour à tous.
J'ai un petit probleme, j'ai un formulaire singleton dans lequel j'ai un attribut socket et je voudrai pouvoir l'utiliser depuis un autre formulaire.
J'ai donc créé une méthode public qui renvoie ce socket seulement quand je souhaite l'utiliser j'ai une erreur qui me dit que le socket n'est pas connecter quand j'appel la methode send alors qu'il l'est bien dans le premier formulaire. J'ai essayé juste pour voir de le connecter dans l'autre formulaire et là une erreur me dit qu'il est déjà connecté.
Voila une partie du code:

Methode renvoyant le socket:

public
Socket getConnexion()


{
return this.connexion;
}

Appel dans l'autre formulaire:

Socket actualiser= new Socket (System.Net.Sockets.AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
actualiser =MainForm.Instance.getConnexion();

MainForm est le nom du formulaire singleton.

Si quelqu'un pouvait m'aider.
Merci d'avance.

12 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Bonjour,



En C# on utilise des propriétés, donc a la place de cette méthode

<hr size= "2" width="100%">
public
Socket getConnexion()

{

return this.connexion;

}



<hr size ="2" width= "100%">Met plutot:

<hr size="2" width="100%">public Socket Connexion

{

get { return this.connexion; }

}

<hr size="2" width="100%">

Ensuite, je comprends pas bien ces 2 lignes

<hr size="2" width="100%">Socket actualiser= new Socket (System.Net.Sockets.AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
actualiser =MainForm.Instance.getConnexion();


<hr size="2" width="100%">

Pourquoi ne fais tu pas plutot




<hr size="2" width="100%">Socket actualiser = MainForm.Instance.getConnexion();

(Socket actualiser = MainForm.Instance.Connexion; avec ma modif)


<hr size="2" width="100%">

Mx
Messages postés
23
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
27 octobre 2006

Bonjour.
J'ai fait comme tu m'as dit mais lorsque que j'emploie la methode send il me dit que la socket n'est pas connecté et qu'aucune adressse n'a été fournie.
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Tu es sur que ta connexion est bien ouverte, ou n'a pas été fermée entre temps ?


Avec si peu de code, c'est difficile de savoir ce qu'il peut se passer :/


Mx
Messages postés
23
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
27 octobre 2006

Oui je pense que la connexion est ouverte si quand je la connecte il me dit qu'elle déjà connectée.
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Tiens, je viens de te faire une mini source qui fait ce que tu demandes (Socket dans un singleton)

Mx
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007

Au pire tu déclare ton socket comme membre statique et t'as plus de problèmes, et il est accessible de partout.

-------------------------
Trambert le vert
Messages postés
23
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
27 octobre 2006

C'est bon en le déclarant en static cela marche .
Merci à tous pour vos conseils.
Messages postés
39
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
31 janvier 2006

Ne serai ce pas du au fait que la Socket est une classe et non pas un type valeur ?
Je me pose juste la question ^^.
Si qqn a qq éclaircissement ?
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007

Non ça vient pas de ça. Ca vient du fait que tu faisais un new de ton socket.

-------------------------
Trambert le vert
Messages postés
39
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
31 janvier 2006

humm ba le new en fait il sert à rien car il réassigne sa variable derrière donc ça part au gac :p
Messages postés
39
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
31 janvier 2006

enfin garbage collector :p et si il n'y a plus de référence qui pointe dessus
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Oui, faut pas confongre GAC et GC ;)



Mx
MVP C#