无法从Node.js连接到Telnet服务器

时间:2014-05-11 08:18:54

标签: node.js networking telnet

我有一个嵌入在C ++应用程序中的telnet服务器,我可以连接到没有问题 使用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服务器,节点一切正常,那真的很奇怪 精细。这是工作的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服务器
  • 如果我从节点应用程序连接到我的应用程序
  • ,则会拒绝连接

额外信息

  • On OSX(mavericks)
  • 节点版本0.10.28
  • C ++中的Telnet服务器是通过嵌入式lua和luasocket(lua 5.1)
  • 提供的

3 个答案:

答案 0 :(得分:3)

解决!

问题是我的应用服务器中的代码绑定到localhost并且默认情况下 绑定到:: 1

的IPV6地址

将一个localhost主机传递给net.connect假定IPV4并且不起作用。

mac命令行telnet和nc都能正常工作并正确连接。

两种解决方案:

  • App绑定到127.0.0.1,节点中的localhost工作正常
  • 在test.js中将主机地址设置为:: 1,并通过ipv6
  • 连接

现在所有修复:)

煤汽

答案 1 :(得分:0)

看起来你忘了告诉服务器听你的代码。它会抛出连接拒绝错误,因为没有任何东西可以连接到...

最后添加:server.listen(port);

答案 2 :(得分:0)

net.connect的原型是(选项,回调) 见http://nodejs.org/api/net.html#net_net_connect_options_connectionlistener

然后我会建议针对标准的telnet服务器测试你的代码以查看它的行为,最后我强烈建议使用jshint或jslint。