2011-11-13 3 views
0

J'essaie maintenant de travailler avec le serveur. J'ai ce code: enter image description hereErreur dans les connexions serveur

Je commence la méthode 'HandleCC' dans le thread avec 'ParametrizedThreadStart'. J'essaye la connexion sur '127.0.0.1'. Je peux me connecter. Quand je suis connecté, le premier breakpoint est bon, le second aussi, mais le code s'arrête. (La console est toujours en cours d'exécution, mais aucun des points d'arrêt suivants ne rompt le code.) Veuillez m'expliquer, et désolé pour mon anglais.

code complet:

using System; 
using System.Text; 
using System.Net; 
using System.Net.Sockets; 
using System.IO; 
using System.Linq; 
using System.Collections.Generic; 
using System.Collections; 
using System.Threading; 
namespace MTSP 
{ 
class Comunication 
{ 
    private TcpListener listener; 
    private Thread thread; 
    public Comunication() 
    { 
     this.listener = new TcpListener(IPAddress.Any, 20345); 
     this.thread = new Thread(new ThreadStart(this.ListenLoop)); 
     this.thread.Start(); 
    } 
    private void ListenLoop() 
    { 
     this.listener.Start(); 
     while (true) 
     { 
      TcpClient client = this.listener.AcceptTcpClient(); 
      Thread tr = new Thread(new ParameterizedThreadStart(this.HandleCC)); 
      tr.Start(client); 
     } 
    } 
    private void HandleCC(object client) 
    { 
     TcpClient cli = (TcpClient)client; 
     NetworkStream stream = cli.GetStream(); 
     byte[] buffer = new byte[1024]; 
     int bytesread = 0; 
     string mess = ""; 
     StringBuilder compmess = new StringBuilder(); 
     while (true) 
     { 
      bytesread = 0; 
      try 
      { 
       bytesread = stream.Read(buffer, 0, buffer.Length); 
      } 
      catch 
      { 
       break; 
      } 

      compmess.AppendFormat("{0}", Encoding.ASCII.GetString(buffer, 0, bytesread)); 
      string a = compmess.ToString(); 
      string g; 
     } 
     System.Diagnostics.Debug.WriteLine(compmess.ToString()); 
     cli.Close(); 
    } 
} 
} 
+0

Comment créez-vous 'client'? À quel serveur vous connectez-vous? La raison la plus probable 'Read()' ne renvoie pas est que le serveur n'envoie aucune donnée. Et la façon dont vous utilisez 'catch 'et' break' semble être très fausse. Aussi, pourriez-vous poster votre code en texte, pas une capture d'écran? – svick

+0

Vous l'avez dans mon post. – user35443

+1

Ça ne s'arrête pas, ça bloque. Envoyer quelque chose. –

Répondre

0

Dans toutes les applications client-serveur dont vous avez besoin à la fois un client et un serveur. Vous avez écrit le serveur. Voici un exemple d'un client (ce qui a été testé et fonctionne avec votre code comme serveur):

TcpClient client = new TcpClient("localhost", 20345); 
    NetworkStream stream = client.GetStream(); 

    while (true) 
    { 
     string message = Console.ReadLine(); 
     Byte[] data = System.Text.Encoding.ASCII.GetBytes(message); 
     // Send the message to the connected TcpServer. 
     stream.Write(data, 0, data.Length); 
    } 

    stream.Close(); 
    client.Close(); 

Mettez ce client dans une application console séparée, puis:

  • démarrer le serveur
  • puis démarrez le client dans une nouvelle instance de Visual studio, ou démarrer l'exe
  • de type quelque chose dans la fenêtre de la console client
  • prochaine, il passera par votre étape o f mettre à jour le StringBuilder que vous utilisez.
+0

Eh bien, que pourquoi votre client ne travaille pas? Si cela fonctionne pour moi, cela signifie que ce n'est pas un problème de code, peut-être un paramètre quelconque. – misha

+0

Mon client fonctionne, mais mon serveur ne fonctionne pas. Mais il est possible que mon pare-feu bloque le port. – user35443

+0

J'ai été invité à "autoriser" une connexion de sorte que ce pourrait être ... – misha

Questions connexes