Node.js `socket.pipe()` 的 TCP 回显服务器示例问题
Node.js TCP echo server example issue with `socket.pipe()`
我有来自 https://nodejs.org 的这个例子,它回显了输入。
var net = require('net');
var server = net.createServer(function (socket) {
socket.write('Echo server\r\n');
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 World\n");
});
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 server\r\n');
socket.pipe(socket);
});
这里我们除了记录错误什么都不做,尽管你可以用它做其他事情。
我有来自 https://nodejs.org 的这个例子,它回显了输入。
var net = require('net');
var server = net.createServer(function (socket) {
socket.write('Echo server\r\n');
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 World\n");
});
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 server\r\n');
socket.pipe(socket);
});
这里我们除了记录错误什么都不做,尽管你可以用它做其他事情。