我是一名老PERL程序员,正在尝试学习node.JS编程。我对我正在编写的代码在服务器和客户端应用程序之间创建套接字连接有疑问。
以下代码有效。但我不知道如何接受从客户端发送到服务器的数据。
基本上我想做的事情很简单。客户端连接到侦听套接字的服务器,发送一些服务器读取的信息,然后将信息发送回客户端。我不理解的唯一部分是如何让服务器端读取/接受/显示从客户端发送的数据字符串。
有人可以指出我正确的方向吗? 感谢您的帮助。
(我为无知而道歉。)
这是服务器端代码:
var net = require('net');
var server = net.createServer(function(socket) {
// confirm socket connection from client
console.log((new Date())+'A client connected to server...');
socket.on('data', function(data) {
var json = JSON.parse(data.toString());
console.log(json)
});
// send info to client
socket.write('Echo from server: NODE.JS Server \r\n');
socket.pipe(socket);
socket.end();
console.log('The client has disconnected...\n');
}).listen(10337, '192.168.100.1');
以下是客户端代码:
var net = require('net');
var client = new net.Socket();
client.connect(10337, '192.168.100.1', function() {
console.log('Connected'); // acknowledge socket connection
client.write('Hello, server! Love, Client.'); // send info to Server
});
client.on('data', function(data) {
console.log('Received: ' + data); // display info received from server
client.destroy(); // kill client after server's response
});
client.on('close', function() {
console.log('Connection closed');
});
当我执行此操作时,我在服务器上收到错误,其中说客户端发送的字符串是无效令牌。这是错误信息。
undefined:1
Hello, server! Love, Client.
^
SyntaxError: Unexpected token H
at Object.parse (native)
at Socket.<anonymous> (/root/nodejs/server-example.js:7:19)
at Socket.emit (events.js:117:20)
at Socket.<anonymous> (_stream_readable.js:765:14)
at Socket.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:427:10)
at emitReadable (_stream_readable.js:423:5)
at readableAddChunk (_stream_readable.js:166:9)
at Socket.Readable.push (_stream_readable.js:128:10)
at TCP.onread (net.js:529:21)
答案 0 :(得分:1)
以下是我应该编写的代替JSON语句的内容
socket.on('data', function(data) {
var string = (data.toString());
console.log(string)
});
答案 1 :(得分:0)
或处理写入套接字的JSON和字符串:
socket.on('data', function(data) {
try {
var obj = JSON.parse(data.toString())
console.log(JSON.stringify(obj, null, 4))
}
catch(e) {
var string = data.toString()
console.log(string)
}
})