billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 2014
-
3 févr. 2005 à 18:23
cs_JuS
Messages postés121Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention20 mars 2009
-
24 mai 2005 à 11:50
Voila, g fait un programme serveur en utilisant les NetworkStream et je c pas pourquoi, dès qu'il y a 3 clients minimum, le serveur se met a ramer sévère. Alors je voulais savoir ce que vous pensez de mon code. Est-ce que c a cause de mon code ?
Voila mon code commenté (merci d'avance pour les lecteurs) :
using System;
using System.Collections;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace Serveur_NetworkStream_Objets
{
//On créé un objet client
//Ainsi, on créé un tableau pour tous les clients connectés
class Client
{
public
int Numero;
public
bool Connecte;
//Booléen pour savoir si le client est connecté
public NetworkStream NS;
//Contient le flux réseau du client avec le serveur
public StreamReader SR;
//Flux pour écouter le client
public StreamWriter SW;
//Flux pour parler au client
//Constructeur de l'objet client
public Client(
int New_Numero, NetworkStream New_NS)
{
Numero = New_Numero;
Connecte =
true;
NS = New_NS;
SR =
new StreamReader(NS);
SW =
new StreamWriter(NS);
}
//Fonction qui écoute le client et poste les messages reçus sur la console
public
void Ecouter()
{
string Message_Recu;
Console.WriteLine("Ecoute du client {0}",Numero);
while (Connecte)
//Tant que le client reste connecté
{
try
{
//On attend un message dans le flux pour écouter
//et dès qu'il y a quelque chose, on le met dans Message_Recu
Message_Recu=SR.ReadLine();
}
//En cas d'erreur dans le flux, on déconnecte le client
catch(Exception e)
{
Console.WriteLine("Erreur avec le client {0}, déconnection du client !",Numero);
Connecte =
false;
}
}
//Fin de tant qu'il est connecte (Connecte=true)
//Client déconnecté, on ferme tous les flux
SR.Close();
SW.Close();
NS.Close();
}
//Fonction qui permet d'envoyer un message au client
public
void Envoyer(String Message)
{
SW.WriteLine(Message);
SW.Flush();
}
}
class Serveur
{
[STAThread]
static
void Main(
string[] args)
{
int Port = 1313;
//Numéro du port
TcpListener TCP_Serveur =
new TcpListener(Port);
//TCP du serveur
//Récupération du tableau contenant les IPs du serveur (normalement une seule)
IPAddress[] Tableau_IP = (Dns.GetHostByName(Dns.GetHostName())).AddressList;
TcpClient TCP_Client;
// TCP du client
NetworkStream NS;
Client[] Clients=
new Client[50];
//Création d'un tableau de client
int Numero_Client = 0;
TCP_Serveur.Start();
//Lancement du TCP du serveir
Console.WriteLine("Serveur démarré sur {0}:{1}",Tableau_IP[0],Port);
while(
true)
{
//On attend la connexion d'un client
TCP_Client = TCP_Serveur.AcceptTcpClient();
NS = TCP_Client.GetStream();
//Création du client connecte
Clients[Numero_Client]=
new Client(Numero_Client,NS);
//Lancement d'un thread client
Thread T =
new Thread(
new ThreadStart(Clients[Numero_Client].Ecouter));
T.Start();
Numero_Client++;
}
}
}
}
Je pensais que le pb venait du fait que je fasse un nouveau new alors que g déjà créé le tableau, mais si je le fais pas, il compile pas !!!
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 4 févr. 2005 à 11:49
Hum, ah oui, bonne question la ^^
Soit tu délocalise la fonction d'écoute dans un Thread général, au
niveau de la classe serveur (mais la tu perds une grosse partie de
l'avantage d'avoir une classe Client)
Ou alors, euh, je sais pas, un délégué peut-etre ?
Bon, la j'ai plus le temps de regarder parce que je dois partir, suis désolé :/
Regarde sur le net si tu trouves pas des pistes
a++
Mx
Vous n’avez pas trouvé la réponse que vous recherchez ?