2017-03-10 3 views
-1

Je jouais avec la mise en réseau en C# et, fondamentalement, ce que je veux faire, c'est quand un client envoie le message "shutdown" au serveur, il va lancer un arrêt complet. Cependant, du côté serveur, mon instruction "if" n'est jamais exécutée et je ne sais pas pourquoi; aide serait appréciée (je ne suis pas avancé à C# lol)C# Si l'instruction n'est pas exécutée

côté serveur:

Console.Title = "RemoteControl Server v1.0"; 
     IPAddress ip = IPAddress.Parse("127.0.0.1"); 
     TcpListener listener = new TcpListener(ip, 8080); 
     Console.WriteLine("Server started!"); 
     Console.WriteLine("Listening for client connection on port 8080.."); 

     Console.Clear(); 

     listener.Start(); 
     TcpClient client = listener.AcceptTcpClient(); 
     Console.WriteLine("Client connected from: " + client.Client.RemoteEndPoint); 
     NetworkStream stream = client.GetStream(); 

     while (true) 
     { 
      byte[] buffer = new byte[client.ReceiveBufferSize]; 
      int bytesRead = stream.Read(buffer, 0, client.ReceiveBufferSize); 

      string data = Encoding.ASCII.GetString(buffer, 0, bytesRead); 

      // THIS BIT DOESN'T GET EXECUTED 

      if (data == "shutdown") 
      { 
       Console.WriteLine("Shutdown command acknowledged."); 
       // do stuff.. 
      } 
      Console.WriteLine(data); 
     } 

côté client:

 Console.Title = "RemoteControl Client v1.0"; 

     Console.WriteLine("Connecting to server.."); 
     try 
     { 
      TcpClient client = new TcpClient("127.0.0.1", 8080); 
      NetworkStream stream = client.GetStream(); 
      Console.WriteLine("Connected!"); 

      while (true) 
      { 
       Console.Write("> "); 
       byte[] msg = ASCIIEncoding.ASCII.GetBytes("> " + Console.ReadLine()); 
       stream.Write(msg, 0, msg.Length); 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.Clear(); 
      Console.WriteLine("Couldn't connect to server! Stacktrace:"); 
      Console.WriteLine(ex.StackTrace); 
      Console.WriteLine(); 
      Console.WriteLine("Press any key to continue.."); 
      Console.ReadKey(); 
     } 
+0

Indiquez un point d'arrêt et vérifiez quelle est la valeur de "données de chaîne"? –

+1

Impossible de savoir à coup sûr sans un bon [mcve] qui reproduit fidèlement le problème. Mais je dirais que c'est parce que, comme presque tout le monde qui plonge dans l'écriture de code de réseau sans l'étudier d'abord, vous n'avez rien fait pour délimiter les données envoyées par le client. Même si le code client envoie '" shutdown "', il n'y a aucune garantie que le serveur recevra toute la chaîne tout seul. –

Répondre

0

trouvé le problème .. ressemble J'envoyais aussi un symbole ">" dans le message via le client et je vérifiais seulement si le texte entrant était "éteint".