2010-11-08 43 views
0

je suis en train ici pour envoyer le contenu d'un fichier texte par le serveur et l'envoyer au clientlecture du contenu d'un fichier à partir du serveur, puis l'envoyer au client par socket C#

c'est le serveur

Socket server = new Socket(AddressFamily.InterNetwork, 
       SocketType.Stream, ProtocolType.Tcp); 
     IPEndPoint localEP = new IPEndPoint(IPAddress.Any, 9050); 
     server.Bind(localEP); 
     server.Listen(10); 
     Console.WriteLine("Waiting for Client..."); 
     Socket client = server.Accept(); 
     IPAddress clientAddress = ((IPEndPoint)client.RemoteEndPoint).Address; 
     Console.WriteLine("Got connection from " + clientAddress); 

    NetworkStream stream = new NetworkStream(client); 
    StreamReader reader = new StreamReader(stream); 
    StreamWriter writer = new StreamWriter(stream); 


    writer.WriteLine("Welcome to my test server"); 
    writer.Flush(); 
    string line = null; 
    while ((line = reader.ReadLine()).Length != 0) 
    { 
     Console.WriteLine("loooking for this file:" + line); 
     System.IO.FileInfo fi = new System.IO.FileInfo(line); 
     Console.WriteLine("Found"); 
     writer.WriteLine("File Size: " + fi.Length + "\nContent:"); 
     StreamReader tr = new StreamReader(line); 
     string s = null; 
     //string b = ""; 
    while((s= tr.ReadLine()).Length != 0) 
     { 
      writer.WriteLine(tr.ReadLine()); 
      writer.Flush(); 
     } 

     tr.Close(); 

    } 
    client.Close(); server.Close(); 

la partie du client où il lit à partir du serveur est ce

String line = null; 
     line = textBox3.Text; 
     writer.WriteLine(line); // Send line to Server 
     writer.Flush(); 
     string s = null; 
     // Read line from server, then echo on the screen 
     while((s= reader.ReadLine()).Length != 0) 
     { 
      textBox4.Text += reader.ReadLine() + "\r\n\r\n"; 
     } 

quand je lance le code, aucune erreur du tout, mais le client est bloqué, et quand j'arrêter le serveur, le contenu o f le fichier montrera ,, BTW, c'est une application GUI

Répondre

0

while ((s = lecteur.ReadLine())! = null) { textBox4.Text + = s; }

+0

mmm, toujours le même problème, il ne montre pas ce qu'il lit jusqu'à ce que j'arrête le serveur – Nadeem

0

Sample code for StreamReader utilise la construction ci-dessous pour détecter la fin du flux. Aussi - voulez-vous vraiment lire deux lignes dans cette boucle?

while (reader.Peek() >= 0) 
{ 
    s= reader.ReadLine(); 
    textBox4.Text += s + Environment.NewLine + Environment.NewLine; 
} 
+0

désolé, cela n'a pas aidé: S ... en fait ce que je tente de faire est que je veux lire un fichier texte par le serveur et Je veux l'envoyer au client, donc je lis ligne par ligne et l'envoie au serveur, et j'ai essayé de lire le dossier entier et l'envoie, les deux manières fonctionnent, mais je devrais arrêter le serveur ainsi l'affichage d'application de client le contenu: S – Nadeem

+0

@Nadeem - J'essaierais ceci en utilisant deux 'NetworkStream' différents sur le serveur - un pour la lecture et l'autre pour l'écriture. Pareil sur le client si vous n'en avez qu'un seul là. –

+0

J'ai essayé de faire deux réseaux, mais son ne fonctionne pas, encore le gel de clien, et quand j'arrête le serveur, son fonctionnement – Nadeem

0

Vous avez mentionné qu'il s'agit d'une application graphique? Si oui, sur quel fil faites-vous la lecture? Si vous faites la lecture sur le thread principal, alors l'application messageloop sera gelée et rien ne s'affichera jusqu'à ce que vous arrêtiez l'autre côté et que vous arrêtiez la connexion.

+0

pour mon gui, n'utilise pas de threads, et j'ai fait la même chose mais j'ai utilisé console applicatoin , j'ai utilisé reader.readtoend(), le client se bloque également, et quand j'ai tué le serveur, il m'a montré tout le texte dans la console .. console.write (reader.readtoend()); – Nadeem