socket Client/Serveur

socket Client/Serveur - C#/.NET managed - Programmation

Marsh Posté le 22-11-2009 à 13:05:19    

Bjr tous le monde,
je veux faire un programme de sorte que le serveur lit a partir d'un fichier(c:/Test.txt) et envoie les donneés au client ,et ce dernier les écrit dans un autre fichier(c:/info2.txt).  
 
Le probléme qui ce pose c'est que je n'arrive pas a savoir quand est ce que le client arrete de reçevoir , vous me dite quand il ne reçoi rien biensuur mais comment le faire dans un programme pareille?!
 
 
voila le mes codes source
 
 
Client:

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Net;
  6. using System.Net.Sockets;
  7. using System.IO;
  8. namespace Ecriture_Client
  9. {
  10.     class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             //*********Partie Client
  15.             TcpClient c = new TcpClient("localhost", 8080);
  16.             Stream str = c.GetStream();
  17.             byte[] b=new byte[100];
  18.             //*********Partie Ecriture
  19.             string ligne = null; // une ligne de texte
  20.             StreamWriter fluxInfos = null; // le fichier texte
  21.             try
  22.             {
  23.                 // création du fichier texte
  24.                 fluxInfos = new StreamWriter("c:/infos2.txt" );
  25.                     // boucle tant que la ligne reçu est non vide
  26.                     while(str.Read(b,0,50)!=-1)
  27.                     {
  28.                             ligne = Encoding.ASCII.GetString(b);
  29.                             Console.WriteLine(ligne);
  30.                             // écriture ligne dans fichier texte;
  31.                             fluxInfos.WriteLine(ligne);
  32.                     }
  33.             }
  34.             catch (Exception e)
  35.             {
  36.                 Console.WriteLine("L'erreur suivante s'est produite : " + e.Message);
  37.             }
  38.             Console.ReadLine();
  39.         }
  40.     }
  41. }


 
Serveur:

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Net;
  7. using System.Net.Sockets;
  8. namespace Lecture
  9. {
  10.     class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             //*****************Partie Serveur**********
  15.             IPHostEntry iphe = Dns.Resolve("localhost" );
  16.             IPEndPoint ipep = new IPEndPoint(iphe.AddressList[0], 8080);
  17.             TcpListener s = new TcpListener(ipep);
  18.             s.Start();
  19.             TcpClient c = s.AcceptTcpClient();
  20.             Stream str = c.GetStream();
  21.             byte[] b;
  22.             //***********Partie lecture************
  23.             String ligne = null;
  24.             StreamReader fluxInfos = null;
  25.             // lecture contenu du fichier Test.txt
  26.             try
  27.             {
  28.                 fluxInfos = new StreamReader("c:/Test.txt" );
  29.                     ligne = fluxInfos.ReadLine();
  30.                     while (ligne != null)
  31.                     {
  32.                         Console.WriteLine(ligne);
  33.                         b = Encoding.ASCII.GetBytes(ligne);
  34.                         str.Write(b, 0, b.Length);
  35.                         ligne = fluxInfos.ReadLine();
  36.                     }
  37.             }
  38.             catch (Exception e)
  39.             {
  40.                 Console.WriteLine("L'erreur suivante s'est produite : " + e.Message);
  41.             }
  42.             System.Console.ReadLine();
  43.         }
  44.     }
  45. }

Reply

Marsh Posté le 22-11-2009 à 13:05:19   

Reply

Marsh Posté le 22-11-2009 à 15:43:36    

Tu peux essayer d'utiliser un caractère spécial pour indiquer la fin.


---------------
www.blurk.fr
Reply

Marsh Posté le 22-11-2009 à 16:18:12    

oui je peux mais ce n'est pas une trés bonne solution. si j'utiliserai $
 et j'aurai un $ dans mon texte sa va etre un probléme.

Reply

Marsh Posté le 22-11-2009 à 17:33:21    

Tu peux utiliser un caractère spécial non imprimable, il me semble qu'il y a un caractère pour signaler la fin d'un fichier (EOF).


---------------
www.blurk.fr
Reply

Marsh Posté le 22-11-2009 à 17:59:15    

ne sois pas trés étonner mais je connais pas le caractére spécial non imprimable . sa veux dire quoi ?

Reply

Marsh Posté le 22-11-2009 à 18:20:14    

En gros il existe des caractère spéciaux qui ne sont pas imprimable, jette un coup d'œil du coté de la table ASCII.


---------------
www.blurk.fr
Reply

Marsh Posté le 22-11-2009 à 19:11:02    

en fait tu n'as en principe rien a faire sachant que tu travailles avec des flux.  
la méthode "Read" renvoit "0" quand le flux est terminé:
cfr MSDN:
The read method return the total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not currently available, or zero (0) if the end of the stream has been reached.
 
http://msdn.microsoft.com/en-us/li [...] .read.aspx


---------------
quand un homme raisonne mal c'est qu'il n'a pas les données pour raisonner mieux (diderot)
Reply

Marsh Posté le 22-11-2009 à 19:29:04    

j'ai fait un nouveau programme qui me permet de lire ligne par ligne au niveau du Serveur ( StreamReader/StreamWriter ) et l'envoyé au client , le probléme qui ce pose c'est que le client ne sais toujours pas quand il s'arrete , il tourne dans une boucle infinie par contre le serveur s'arrete à la fin du fichier:
Client:

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Net;
  6. using System.Net.Sockets;
  7. using System.IO;
  8. namespace Ecriture_Client
  9. {
  10.     class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             //*********Partie Client
  15.             TcpClient c = new TcpClient("localhost", 8080);
  16.             //*********Partie Ecriture
  17.             NetworkStream networkStream = c.GetStream();
  18.             StreamReader streamReader = new StreamReader(networkStream);
  19.             String theString;           
  20.             StreamWriter fluxInfos = null;
  21.             try
  22.             {
  23.                 // création du fichier texte
  24.                 fluxInfos = new StreamWriter("c:/infos2.txt" );
  25.                 theString = streamReader.ReadLine();
  26.                     // boucle tant que la ligne reçu est non vide
  27.                 while (theString!="" )
  28.                     {
  29.                         Console.WriteLine(theString);
  30.                         theString = streamReader.ReadLine();
  31.                          fluxInfos.WriteLine(theString);
  32.                          
  33.                     }
  34.             }
  35.             catch (Exception e)
  36.             {
  37.                 Console.WriteLine("L'erreur suivante s'est produite : " + e.Message);
  38.             }
  39.             streamReader.Close();
  40.             networkStream.Close();
  41.             c.Close();
  42.              
  43.         }
  44.     }
  45. }


Serveur:

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Net;
  7. using System.Net.Sockets;
  8. namespace Lecture
  9. {
  10.     class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             //*****************Partie Serveur**********
  15.             IPHostEntry iphe = Dns.Resolve("localhost" );
  16.             IPEndPoint ipep = new IPEndPoint(iphe.AddressList[0], 8080);
  17.             TcpListener s = new TcpListener(ipep);
  18.             s.Start();
  19.             TcpClient c = s.AcceptTcpClient();
  20.             //***********Partie lecture************
  21.             NetworkStream networkStream = c.GetStream();
  22.             StreamWriter streamWriter = new StreamWriter(networkStream);
  23.             streamWriter.AutoFlush = true;
  24.             String ligne = null;
  25.             StreamReader fluxInfos = null;
  26.             // lecture contenu du fichier Test.txt
  27.             try
  28.             {
  29.                 fluxInfos = new StreamReader("c:/Test.txt" );
  30.                     ligne = fluxInfos.ReadLine();
  31.                     while (ligne != null)
  32.                     {
  33.                         Console.WriteLine(ligne);
  34.                         streamWriter.WriteLine(ligne);
  35.                         ligne = fluxInfos.ReadLine();
  36.                     }
  37.             }
  38.             catch (Exception e)
  39.             {
  40.                 Console.WriteLine("L'erreur suivante s'est produite : " + e.Message);
  41.             }
  42.             networkStream.Close();
  43.             streamWriter.Close();
  44.             //c.Close();
  45.             System.Console.ReadLine();
  46.         }
  47.     }
  48. }


Message édité par man_u le 22-11-2009 à 19:45:47
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed