无法从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。