2016-06-19 7 views
0

Ich begann NodeJS zu lernen und ich habe einige Anfänger Probleme.NodeJS v6.2.2 - TCP-Server erhält zusätzliche Leerzeichen von der Client-String-Nachricht

Dies ist mein einfacher TCP-Server-Code:

const net = require('net'); 
const StringDecoder = require('string_decoder').StringDecoder; 


const PORT = 9000; 
const ADDRESS = '127.0.0.1'; 

const server = net.createServer((socket) => { 
    socket.on('data', (chunk) => { 
     const decoder = new StringDecoder('utf8'); 
     const message = Buffer.from(chunk); 
     console.log(decoder.write(message + ' length:' + message.length)); 
    }); 
}).listen(PORT, ADDRESS); 

console.log('Server running at: %s:%s', ADDRESS, PORT); 

server.on('connection', (socket) => { 
    var playerAddress = socket.remoteAddress.toString() +':'+ socket.remotePort.toString(); 
    console.log('Player connected: %s', playerAddress); 
}); 

Und es ist C# Client-Anwendung:

using System; 
using System.Net.Sockets; 

namespace SimpleTCPClient 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      TcpClient client = new TcpClient("127.0.0.1", 9000); 
      try 
      { 
       using (NetworkStream stream = client.GetStream()) 
       { 
        string message = "Borko"; 
        byte[] bytes = new byte[message.Length * sizeof(char)]; 
        System.Buffer.BlockCopy(message.ToCharArray(), 0, bytes, 0, bytes.Length); 

        stream.Write(bytes, 0, bytes.Length); 
       } 
      } 
      catch (ObjectDisposedException) 
      { 
       Console.WriteLine("Lost connection to the server."); 
      } 
      catch (InvalidOperationException) 
      { 
       Console.WriteLine("Application isn't connected to the server."); 
      } 
      finally 
      { 
       client.Close(); 
      } 

     } 
    } 
} 

Nach dem Server und Client-Anwendung ausgeführt habe ich diese Ausgabe: TCP Server output

Ich kann keine Lösung für diese Leerzeichen finden. Bitte helfen Sie. Vielen Dank!

Antwort

1

Die Art und Weise Sie die Zeichenfolge in ein Byte-Array konvertieren falsch ist, der folgende Code Ihre persönlichen Raum Problem behebt:

using System; 
using System.Net.Sockets; 

namespace SimpleTCPClient 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      TcpClient client = new TcpClient("127.0.0.1", 9000); 
      try 
      { 
       using (NetworkStream stream = client.GetStream()) 
       { 
        string message = "Borko"; 
        byte[] bytes = Encoding.UTF8.GetBytes(message); 

        stream.Write(bytes, 0, bytes.Length); 
       } 
      } 
      catch (ObjectDisposedException) 
      { 
       Console.WriteLine("Lost connection to the server."); 
      } 
      catch (InvalidOperationException) 
      { 
       Console.WriteLine("Application isn't connected to the server."); 
      } 
      finally 
      { 
       client.Close(); 
      } 

     } 
    } 
}