COMMUNICATION CLIENT/SERVEUR BASIQUE AVEC SINGLETON

Signaler
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
-
MorpionMx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34470-communication-client-serveur-basique-avec-singleton

MorpionMx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
42
Certes, tu as tout a fait raison.
J'ai juste fait cette source pour repondre basiquement a la question, sans penser au MultiThread.

Merci pour ton exemple :)
billou_13
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
16
Merci MorpionMx pour ta source.

Cependant, une petite remarque à propos de ta classe singleton : plusieurs sockets pourront être créés si l'application lance plusieurs threads. Pour explication, je t'envoie le lien vers une epxlication (en Anglais) mais très claire au sujet des singletons :
http://www.yoda.arachsys.com/csharp/singleton.html

La meilleure solution est donc la 5ème de la page. Ce qui donne pour ton code :

public sealed class Singleton
{
private Socket socket;

Singleton()
{
try
{
this.socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
// Connecte le socket sur le port 1025 du localhost
this.socket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1025));
}
catch(Exception e) { MessageBox.Show(e.ToString());}
}

public static Singleton Instance
{
get
{
return Nested.instance;
}
}

class Nested
{
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Nested()
{
}

internal static readonly Singleton instance = new Singleton();
}
}

Par ainsi, pour récupérer le socket, il te suffit de mettre en attribut de ta classe :
private Singleton sock = Singleton.Instance;

(Méthode testée et efficace contre le multithread).

Bonne journée à toi,

Billou_13