我有一个来自https://nodejs.org其回显输入。
var net = require('net');
var server = net.createServer(function (socket) {
socket.write('Echo serverrn');
socket.pipe(socket);
});
server.listen(1338, 'localhost');
我用这个ruby脚本发送了一个数据:
require 'socket'
a = TCPSocket.new('localhost', 1338) # could replace 127.0.0.1 with your "real" IP if desired.
a.write "hi server!"
puts "got back:" + a.recv(1024)
a.close
然而,我得到了这个错误
events.js:85
throw er; // Unhandled 'error' event
^
Error: read ECONNRESET
at exports._errnoException (util.js:746:11)
at TCP.onread (net.js:550:26)
可能出了什么问题?当我只使用socket.end()
时,它工作得很好。
var net = require('net');
var server = net.createServer(function (socket) {
console.log("Connection from " + socket.remoteAddress);
socket.end("Hello Worldn");
});
server.listen(1338, "localhost");
已添加
我需要修改ruby代码,以免导致nodejs出错。
require 'socket'
a = TCPSocket.new('localhost', 1338) # could replace 127.0.0.1 with your "real" IP if desired.
a.write "hi server!"
puts "got back:" + a.recv(1024)
puts "got back:" + a.recv(1024)
a.close
您的Ruby脚本正在提前关闭连接(在读取所有数据之前)。
Node.js代码应该预见到这种可能性并加以处理:
var server = net.createServer(function (socket) {
socket.on('error', function(err) {
console.error('SOCKET ERROR:', err);
});
socket.write('Echo serverrn');
socket.pipe(socket);
});
在这里,我们只记录错误,尽管你可以用它做其他事情。