简单的TCP聊天node.js

我刚接触node.js,来自js背景,我很难理解后台的东西,目前我正在尝试创build简单的控制台聊天。 服务器代码:

var net=require("net"); var sockets=[]; net.createServer(function(socket){ sockets.push(socket); socket.on("data",function(data){ posliSpravu(socket,JSON.parse(data)); }); socket.on("close",function(){ console.log(socket + " has disconnected"); sockets.splice(sockets.indexOf(socket),1); }) }).listen(8888); function posliSpravu(from,message){ var msg=JSON.stringify("Niekto povedal : " + message)+'\n'; sockets.forEach(function(incoming_socket){ if(incoming_socket!=from){ incoming_socket.write(msg); } }) } 

代码为客户端

 var net=require("net"); var client=new net.Socket(); client.connect(8888,function(){ console.log("Connected"); }); process.stdin.resume(); process.stdin.on("data",function(data){ posli(data); }) client.on("data",function(data){ console.log("Recieved data === " + JSON.parse(data)); }) function posli(msg){ client.write(JSON.stringify(msg)+'\n'); } 

当我试图发送一些消息,它总是输出“消息收到=== [对象] [对象]”

我试图用JSON.strngifyreplaceJSON.parse,但是输出只是一些数字,用ascii来表示。

我怎样才能修复它,所以它会显示我发送的文本<

socket.setEncoding('utf8');process.stdin.setEncoding('utf8'); 是你的朋友。 你只需要在等待数据的行之前添加一次,一切都应该按照你最初的想法来工作。

你在一个string上调用JSON.stringify 。 确保你使用了一个有效的对象。 在线路上发送实际的JSON也更好:

 //server var msg=JSON.stringify({ name: 'Niekto povedal', content: message }); // client var message = JSON.parse(data); console.log("Recieved data from :" + message.name); console.log("Recieved data === " + JSON.stringify(message.content));