houcem001
Messages postés14Date d'inscriptionmardi 29 avril 2008StatutMembreDernière intervention26 décembre 2009
-
23 févr. 2009 à 01:23
Salut je suis entrain de programmer une plateforme de discussion mais j'ai un probleme pour envoyer des messages à un client sachant son adresse IP .
dans mon code ci dessous programmé en c# je peux pas envoyer qu'à un seul client
namespace PlateformeDeDiscussion
{
class Clients
{
private static string reponse = null;
private static string demande = null;
public static void demander(string s)
{
demande = s;
}
public static string reponser()
{
return reponse;
}
public static void rep()
{
reponse = null;
}
public void connecter(String Adress, int port)
{
try
{
TcpClient tcpClient = new TcpClient(Adress, port);
ThreadPool.QueueUserWorkItem(ecriture,tcpClient);
using (NetworkStream networkStream = tcpClient.GetStream())
{
using (StreamReader reader = new StreamReader(networkStream))
{
using (StreamWriter writer = new StreamWriter(networkStream))
{
writer.AutoFlush = true;
while (true)
{
reponse = reader.ReadLine();
}
}
}
}
}
catch (Exception e) { } //Console.WriteLine(e.Message);
finally { Serveurs.tclient.Clear(); }
}
public void ecriture(object info)
{
using (TcpClient tcpClient = info as TcpClient)
using (NetworkStream networkStream = tcpClient.GetStream())
{
using (StreamReader reader = new StreamReader(networkStream))
{
using (StreamWriter writer = new StreamWriter(networkStream))
{
// flux de sortie non bufferisé
writer.AutoFlush = true;
while (true)
{
if (demande != null)
demande += "\r\n";
writer.Write(demande);
demande = null;
Thread.Sleep(50);
}
}
}
}
}
}
class Serveurs
{
private static string reponse2;
private static string demande2;
public static ArrayList tclient = new ArrayList();
public static List<Socket> mesClients = new List<Socket>();
public static void demander(string s)
{
demande2 = s;
}
public static string reponser()
{
return reponse2;
}
public static void rep()
{
reponse2 = null;
}
public static void connecter(int port)
{
TcpListener ecoute = null;
try
{
ecoute = new TcpListener(IPAddress.Any, port);
ecoute.Start();
ThreadPool.SetMinThreads(10, 10);
ThreadPool.SetMaxThreads(10, 10);
TcpClient tcpclient = null;
while (true)
{
tcpclient = ecoute.AcceptTcpClient();
ThreadPool.QueueUserWorkItem(lire, new Clientt() {CanalTcp = tcpclient});
ThreadPool.QueueUserWorkItem(ecrire, new Clientt() {CanalTcp = tcpclient});
tclient.Add((tcpclient.Client.RemoteEndPoint as IPEndPoint).Address.ToString());
}
}
catch (Exception ex)
{
//Form3 form3 = new Form3();
//form3.Text = ex.Message;
}
finally
{
ecoute.Stop();
}
}
public static void lire(Object infos)
{
Clientt client = infos as Clientt;
try
{
using (TcpClient tcpClient=client.CanalTcp)
{
using (NetworkStream networkStream = tcpClient.GetStream())
{
using (StreamReader reader = new StreamReader(networkStream))
{
using (StreamWriter writer = new StreamWriter(networkStream))
{
// writer.AutoFlush = true;
while (true)
{
reponse2 = reader.ReadLine();
}
}
}
}
}
}
catch (Exception e)
{
// Form3 form3 = new Form3();
//form3.Text = e.Message;
}
}
public static void ecrire(Object infos2)
{
Clientt client1 = infos2 as Clientt;
try
{
using (TcpClient tcpClient=client1.CanalTcp)
{
using (NetworkStream networkStream = tcpClient.GetStream())
{
using (StreamReader reader = new StreamReader(networkStream))
{
using (StreamWriter writer = new StreamWriter (networkStream))
{
writer.AutoFlush = true;
demande2 = null;
while (true)
{
if (demande2 != null)
demande2 += "\r\n";
writer.Write(demande2);
demande2 = null;
Thread.Sleep(50);
}
}
}
}
}
}
catch (Exception e)
{
//Form3 form3 = new Form3();
//form3.Text = e.Message;
}
}
internal class Clientt
{
public TcpClient CanalTcp { get; set; }
//public int NumClient { get; set; }
}
}
}