简单的TCP聊天节点.js

simple TCP chat node.js

本文关键字:节点 js 聊天 TCP 简单      更新时间:2023-09-26

我是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表示测试。

该如何修复它,以便它显示我发送的文本<</p>

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

您正在字符串上调用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));