我是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代表测试。
我如何修复它以便显示我发送的文字<
答案 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>