简单的TCP聊天node.js

时间:2016-01-28 23:09:35

标签: javascript json node.js tcp

我是node.js的新手,来自js背景我很难理解后端内容的概念,目前我正在尝试创建简单的控制台聊天。服务器代码:

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.strngify替换JSON.parse,但输出只是一些数字,可以用ascii代表测试。

我如何修复它以便显示我发送的文字<

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您在字符串上调用//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)); 。确保使用有效对象。最好通过线路发送实际的JSON:

<html>