MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 3 nov. 2005 à 17:10
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és860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 3 nov. 2005 à 15:57
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).
3 nov. 2005 à 17:10
J'ai juste fait cette source pour repondre basiquement a la question, sans penser au MultiThread.
Merci pour ton exemple :)
3 nov. 2005 à 15:57
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