Expliquez moi clairement ce code source......

Résolu/Fermé
OUROBANGNA Messages postés 69 Date d'inscription lundi 26 octobre 2009 Statut Membre Dernière intervention 17 mars 2014 - 26 oct. 2009 à 22:44
OUROBANGNA Messages postés 69 Date d'inscription lundi 26 octobre 2009 Statut Membre Dernière intervention 17 mars 2014 - 28 oct. 2009 à 21:39
Bonjour,
je ma nomme OURO BANG'NA Badiou. j'ai un code source d'une application de communication client/serveur sur un reseau local.. J'excecute l'application qui marche tres bien.. Je voudrais qu'on m'explique assez clairement ligne par ligne le code source. Pour vous aider j'ai fais du java. je programme sur netBeans et sur eclipse. j'ai un peu survolé le C#. j'ai utiliser le C# pr créer une petite application en base de données.

voici le code source au niveau du serveur:
using System;
using System.Net.Sockets;
using System.Net;
using System.IO;

namespace MiniChatServer
{
/// <summary>
/// Description résumée de Class1.
/// </summary>
class Class1
{
/// <summary>
/// Point d'entrée principal de l'application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO : ajoutez ici le code pour démarrer l'application
//
try
{
bool bStatus = true;
string sMessageServer = "";
string sMessageClient = "";
IPAddress address = IPAddress.Parse("127.0.0.1");

TcpListener tcplistener = new TcpListener(address,8100);
tcplistener.Start();

Console.WriteLine("Serveur démarré...");
Socket SocketpourClient = tcplistener.AcceptSocket();

Console.WriteLine("Un client vient de se connecter.\nIP du client : " + SocketpourClient.RemoteEndPoint + "\n");

NetworkStream FluxReseau = new NetworkStream(SocketpourClient);
StreamReader sr = new StreamReader(FluxReseau);
StreamWriter sw = new StreamWriter(FluxReseau);

while ( bStatus )
{
if ( SocketpourClient.Connected )
{
sMessageServer = sr.ReadLine();
Console.WriteLine("Client : " + sMessageServer);

if ( sMessageServer == "bye" )
{
bStatus = false;
sr.Close();
sw.Close();
FluxReseau.Close();
SocketpourClient.Close();
return;
}
Console.Write("Serveur : ");
sMessageClient = Console.ReadLine();
sw.WriteLine(sMessageClient);
sw.Flush(); // Forcer l'envoi du message au client
}
} // fin du while
sr.Close();
sw.Close();
FluxReseau.Close();
SocketpourClient.Close();

Console.WriteLine("Arret du serveur");
}
catch( Exception e )
{
Console.WriteLine(e.ToString());
}
}// fin du Main
}// fin de la classe
}// fin du namespace


voici celui du coté du client:

using System;
using System.IO;
using System.Net.Sockets;
using System.Net;

namespace MiniChatClient
{
/// <summary>
/// Description résumée de Class1.
/// </summary>
class Class1
{
/// <summary>
/// Point d'entrée principal de l'application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO : ajoutez ici le code pour démarrer l'application
//
TcpClient SocketPourClient;
bool bStatus = true;

try
{
string IPServer = "127.0.0.1";
SocketPourClient = new TcpClient(IPServer, 8100);
Console.WriteLine("Connecte au serveur.\nIP du serveur : " + IPServer + "\n");
}
catch
{
Console.WriteLine("Connexion impossible");
return;
}

NetworkStream FluxClient = SocketPourClient.GetStream();
StreamReader sr = new StreamReader(FluxClient);
StreamWriter sw = new StreamWriter(FluxClient);

try
{
string ClientMessage = "";
string ServerMessage = "";

while ( bStatus )
{
Console.Write("Client : ");
ClientMessage = Console.ReadLine();

if ( ClientMessage == "bye" )
{
bStatus = false;
sw.WriteLine(ClientMessage);
sw.Flush();
}
else
{
sw.WriteLine(ClientMessage);
sw.Flush();
ServerMessage = sr.ReadLine();
Console.WriteLine("Serveur : " + ServerMessage);
} // fin du else
} // fin du while
} // fin du try
catch
{
Console.WriteLine("Probleme reseau !");
}
sr.Close();
sw.Close();
FluxClient.Close();
SocketPourClient.Close();
}
}
}

Merci d'avance............
A voir également:

5 réponses

Pacorabanix
26 oct. 2009 à 22:48
Bonjour,

le mieux pour un code aussi long serait déjà que vous remettiez un message en utilisant les balises code (bouton à droite de "gras italique souligné"), ainsi les espacements seront préservés!

Sinon c'est beaucoup trop gros pour être lisible.

Bonne continuation
1
OUROBANGNA Messages postés 69 Date d'inscription lundi 26 octobre 2009 Statut Membre Dernière intervention 17 mars 2014 5
27 oct. 2009 à 22:03
ok Re-bonjour parcorabanix, revoici le code source......
J'ai comme fais comme vs m'avez indiqué. J crois ke c'est assez lisible maintenant.. Merci d'avance pour votre disponibilité...
COTE CLIENT



using System;
using System.IO;
using System.Net.Sockets;
using System.Net;

namespace MiniChatClient
{
	/// <summary>
	/// Description résumée de Class1.
	/// </summary>
	class Class1
	{
		/// <summary>
		/// Point d'entrée principal de l'application.
		/// </summary>
		[STAThread]
		static void Main(string[] args)
		{
			//
			// TODO : ajoutez ici le code pour démarrer l'application
			//
			TcpClient SocketPourClient;
			bool bStatus = true;
			
			try
			{
				string IPServer = "127.0.0.1";
				SocketPourClient = new TcpClient(IPServer, 8100);
				Console.WriteLine("Connecte au serveur.\nIP du serveur : " + IPServer + "\n");
			}
			catch
			{
				Console.WriteLine("Connexion impossible");
				return;
			}
			
			NetworkStream FluxClient = SocketPourClient.GetStream();
			StreamReader sr = new StreamReader(FluxClient);
			StreamWriter sw = new StreamWriter(FluxClient);
			
			try
			{
				string ClientMessage = "";
				string ServerMessage = "";
				
				while ( bStatus )
				{
					Console.Write("Client : ");
					ClientMessage = Console.ReadLine();
					
					if ( ClientMessage == "bye" )
					{
						bStatus = false;
						sw.WriteLine(ClientMessage);
						sw.Flush();
					}
					else
					{
						sw.WriteLine(ClientMessage);
						sw.Flush();
						ServerMessage = sr.ReadLine();
						Console.WriteLine("Serveur : " + ServerMessage);
					} // fin du else
				} // fin du while
			} // fin du try
			catch
			{
				Console.WriteLine("Probleme reseau !");
			}
			sr.Close();
			sw.Close();
			FluxClient.Close();
			SocketPourClient.Close();
		}
	}
}




0
pacorabanix
27 oct. 2009 à 23:43
ligne par ligne ? vraiment ? Je n'aurais pas le courage de tout faire. Voici un début :

			TcpClient SocketPourClient;

ceci crée une variable objet de type TcpClient. (dont la déclaration est dans un des fichiers inclus au départ, je ne m'y connais pas beaucoup en réseau, je ne sais pas lequel exactement).

			bool bStatus = true;

une variable "drapeau" initialisée à true.

			try
			{
				string IPServer = "127.0.0.1";
				SocketPourClient = new TcpClient(IPServer, 8100);
				Console.WriteLine("Connecte au serveur.\nIP du serveur : " + IPServer + "\n");
			}

le try signifie que si une exception (=erreur run-time) se produit lors de l'exécution de ce code, le programme sautera directement à la clause catch après.
On instancie un objet TcpClient nommé SocketPourClient, en lui passant comme paramètre de départ (de constructeur) l'adresse réseau "127.0.0.1" et 8100 comme second paramètre (probablement un numéro de port, mais il faut vérifier dans la documentation de la classe TcpClient). C'est probablement là qu'une exception peut se produire, envoyée par le constructeur TcpClient().
Ensuite on affiche un message dans la console.


			catch
			{
				Console.WriteLine("Connexion impossible");
				return;
			}
			

en cas d'erreur, on se contente de le signaler dans la console et de quitter le programme.
			NetworkStream FluxClient = SocketPourClient.GetStream();
			StreamReader sr = new StreamReader(FluxClient);
			StreamWriter sw = new StreamWriter(FluxClient);


on crée un nouvel objet NetworkStream à l'aide de la méthode GetStream() de socketPourClient. (voir la documentation de cette fonction de TcpClient). On se rappelle qu'on l'a correctement initialisé avant, et on a même vérifié s'il n'y avait pas eu de problème.
Pour manipiler un flux (stream) on passe par des objets StreamReader et StreamWriter. (on doit leur passer le flux dans l'initialisation par le constructeur, voir la documentation de StreamReader et StreamWriter).

Là je n'ai plus le courage pour continuer maintenant :)

je laisse qq'un d'autre continuer.

Mais quel est le problème de compréhension au juste ? la syntaxe java ? le foncitonnement des flux ? un peu tout ?
0
OUROBANGNA Messages postés 69 Date d'inscription lundi 26 octobre 2009 Statut Membre Dernière intervention 17 mars 2014 5
28 oct. 2009 à 00:49
Merci Pacorabanix, pour ta disponiblité.




je comprend la syntaxe JAVA tres parfaitement... je veux comprendre la sémentique. je veux savoir concretement keske les classes predefinies dans ce programme me permettent de faire. je veux connaitre ce kel font physiquement.
par exemple aucour de l'execution , je vois une console qui ressemble au MS DOS. quelle est la classe me permettant de faire ceci????
pourkoi le flux??? prkoi le streamReader et streamWriter???
Voila ce ke je voulais savoir..... je crois ke je vais me referer a la documentation comme tu m'a conseillé..
si t'a un lien où je peux le trouver envoie le moi ,
Merci.........
0
pacorabanix
28 oct. 2009 à 02:51
en général, les flux (stream) sont la manière standard de gérer des données qui arrivent et qui partent en packets (comme : ce qui s'affiche dans une console, ce que l'utilisateur tape au clavier, les informations envoyées par un controlleur, par un réseau, par le disque dur lors de la lecture d'un fichier...).

C'est comme si vous avez à votre disposition pour votre programme deux tuyaux : Un qui envoie des choses à l'extérieur, et un qui reçoit des choses. Vous engagez quelqu'un pour gérer tout ce qui arrive et quelqu'un pour envoyer ce que vous voulez. Ce sont le streamReader et le streamWriter. On fait cela aussi pour lire les fichiers par exemple. Ce sont des interfaces proprement concues pour cette tache difficile qui est le dialogue avec le reste du système, dont les périphériques.


La console est une manière standard et simple pour dialoguer avec l'utilisateur sans utiliser d'interface graphique.

Normalement on utilise quelque chose comme java.system.out.println("hello") pour afficher qqchose dans la console....

Je ne connais pas non plus le mot clé using de votre code. Il ne s'agit pas de java mais de C#, je pense, donc là je ne connais pas grand chose. Il y a toujours developpez.net qui contient une mine d'information et des forums spécialisés par langages. Et aussi des cours et des tutoriaux qui doivent certainement parler de réseaux.

Je suppose au vu des l'allure des noms après les "using" que tout ce qui est utilisé dans ce programme est tout à fait standard.

Je suppose (mais je ne connais pas le c# donc je ne suis pas sûr) par exemple que Console est en fait System.IO.Console, et le using System.IO permet d'éviter la syntaxe lourde. Tout ça me semble assez basique pour pouvoir trouver la documentation à l'aide de google ou sur un site comme developpez.net!

Bonne continuation dans vos recherches.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
OUROBANGNA Messages postés 69 Date d'inscription lundi 26 octobre 2009 Statut Membre Dernière intervention 17 mars 2014 5
28 oct. 2009 à 21:39
MERCI pacorabanix,
c'est tres gentil d'etre a l'ecoute. je vais aller sur developpez.net pour voir la definition de ces fonctions prédefinies dans le programme. Pour les stream( flux) c'est saisi.. ....
je crois ke ça ira comme ça. pour plus de details je vais voir sur devellopez.net.........

merci encore une fois...
0