我想用 Nodejs 实现一个简单的客户端-服务器连接。 但是我遇到了以下问题。
考虑代码
server.js:
var net = require('net'),
sys = require('sys');
net.createServer(onConnection).listen(8124);
function onConnection(socket) {
socket.setNoDelay(true);
socket.addListener("connect", function () {
sys.puts('client connected: ' + this.remoteAddress);
});
socket.addListener("data", function (data) {
sys.puts("message: \n" + data + "\n - end of msg.");
});
socket.addListener("end", function () {
sys.puts('end of connection');
this.end();
});
}
sys.puts('Server running at 127.0.0.1:8124');
client.js:
var net = require('net'),
sys = require('sys');
var stream = net.createConnection(8124);
stream.addListener("connect", function(){
sys.puts('connected');
stream.write('a');
stream.flush();
stream.write('b');
stream.flush();
});
stream.addListener("data", function(data){
sys.puts("Message: \n" + data + "\n - end of msg.");
});
当我运行 client.js 时,有时我只收到一条消息“ab”而不是两条消息“a”和“b”。
有什么“正确的方法”来解决这个问题吗?
最佳答案
TCP 是一个流 协议(protocol)。管道一端的单个 write
可能导致另一端的多个“读取”,反之亦然。您必须通过在消息中包含长度来明确告诉对方您要发送多少字节;或提供易于识别的消息分隔符。无论如何,您需要循环阅读。
关于sockets - Nodejs 流式传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3335092/