Salut !
je suis en train de programmer un client server TCP/IP et je bute sur un probleme. En effet, pour avoir un systeme asynchro., je créer une nouvelle thread pour communiquer avec le client. Or dans la doc. MS, ils mettent en avec le system Begin*() et End*(). Dois-je réécrire mon code ?
private System.Net.Sockets.TcpListener listener;
Thread thread;
Collection<Thread> threads=new Collection<Thread>();
public System.Net.Sockets.TcpListener Listener
{
get { return listener; }
}
public ChatServer(int port, string userName)
{
listener = new TcpListener(port);
users.Add(0, new User(0, userName, Program.NetAssemblyVersion));
}
public void Start()
{
if (thread == null)
{
listener.Start();
thread = new Thread(new ThreadStart(WaitingTCPClient));
thread.Start();
}
}
void WaitingTCPClient()
{
for (; ; )
{
TcpClient client;
client = listener.AcceptTcpClient();
Thread threadClient = new Thread(new ParameterizedThreadStart( AcceptTcpClient) );
lock (threads)
threads.Add(threadClient);
threadClient.Start(client);
}
}
void AcceptTcpClient(object arg0)
{
TcpClient client = (TcpClient)arg0;
try
{
Version clientVersion = InitializeClientConnexion(client);
ChatServerUser user = new ChatServerUser(GetNewUserID(), "Anonyme", clientVersion, client);
/// Les deux lignes ci dessous ne concerne pas ma question
user.SendWriter.Write(CommandIDs.s_GiveID);
user.SendWriter.Write(user.ID);
ushort commandID;
for (; ; )
{
// la normallement il doit avoir le code pour recevoir les données du client
}
}
finally
{
if (client.Connected)
client.Close();
lock (threads)
threads.Remove(Thread.CurrentThread);
}
}
note : le code est loin d'être terminés. User et ChatServerUser sont des classes. GetNewUserID() retourne un identifiant unique pour l'utilisateur. InitializeClientConnexion(TcpClient) communique avec le client (échange des numéro de version) et retourne la version du client.
De même pour la lecture des données, j'utilise TcpClient.GetStream().Read(). Dois je remplacer cette instruction par le systeme Begin/End.
Merci d'avance pour vos réponse.
vbmore