无法从Node.js连接到Telnet服务器
我有一个telnet服务器embedded在一个C ++应用程序,我可以连接到使用telnet没有问题。
我想写一个连接到我的服务器的节点应用程序,我已经试过了
var net = require('net'); var port = 6502 var host = '127.0.0.1' var socket = net.connect(port,host, function() { console.log("Sending data"); socket.write("hello\r\n") socket.on("data", function (data) { console.log("received data"); console.log( data.toString() ); socket.end(); }) }) socket.on("error", function(err) { console.log("Error"); console.log(err); })
不幸的是我得到的是这个
> node test.js { [Error: connect ECONNREFUSED] code: 'ECONNREFUSED', errno: 'ECONNREFUSED', syscall: 'connect' }
真奇怪的是,如果我设置一个简单的echo服务器,节点一切正常。 这是工作回声服务器代码:
var net = require('net'); var server = net.createServer(function (socket) { socket.write('Echo server\r\n'); socket.pipe(socket); }); server.listen(6502, '127.0.0.1');
并从我得到
Sending data received data Echo server hello
有什么理由:
- 我可以telnet到我的应用程序罚款
- 我可以从节点连接到同一端口上的节点echo服务器
- 如果我从节点应用程序连接到我的应用程序,则会拒绝连接
额外的信息
- 在OSX(小牛)
- 节点版本0.10.28
- Telnet服务器是通过embedded式lua和luasocket(lua 5.1)提供的,
解决了!
问题是我的应用程序服务器中的代码绑定到本地主机,默认情况下绑定到:: 1的IPV6地址
传递一个本地主机到net.connect承担IPV4,不起作用。
mac命令行telnet和nc都正常工作,并正确连接。
两种解决scheme
- 应用程序绑定到127.0.0.1和本地节点工作正常
- 在test.js中将主机地址设置为:: 1,并通过ipv6进行连接
所有修正现在虽然:)
GAZ
看起来你忘了告诉服务器在你的代码中听。 它抛出一个连接拒绝错误,因为没有什么可以连接到…
在最后添加: server.listen(port);
net.connect的原型是(options,callback)请参阅http://nodejs.org/api/net.html#net_net_connect_options_connectionlistener
然后我会build议testing你的代码对一个标准的telnet服务器,看看它的行为,最后我会强烈build议使用jshint或jslint。