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

Posted

技术标签:

【中文标题】无法从 Node.js 连接到 Telnet 服务器【英文标题】:Can't Connect To A Telnet Server From Node.js 【发布时间】:2014-06-28 17:16:19 【问题描述】:

我有一个嵌入在 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' 

真正奇怪的是,如果我用节点设置一个简单的回显服务器,一切正常 美好的。这是有效的回显服务器代码:

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 进入我的应用程序了 我可以在同一端口上从节点连接到我的节点回显服务器 如果我从我的节点应用程序连接到我的应用程序,我会收到连接被拒绝

额外信息

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

【问题讨论】:

当您成功连接到 C++ telnet 服务器时,您使用的telnet 命令行是什么? rlwrap 远程登录 localhost 6502 【参考方案1】:

解决了!

问题是我的应用服务器中的代码默认绑定到 localhost 绑定到 ::1 的 IPV6 地址

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

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

两种解决方案:

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

现在一切都已修复:)

【讨论】:

感谢分享!【参考方案2】:

您似乎忘记告诉服务器监听您的代码。它抛出一个连接被拒绝的错误,因为没有任何东西可以连接......

在末尾添加:server.listen(port);

【讨论】:

我不想创建一个监听的服务器。我正在尝试从节点连接到已经运行并且可以使用命令行 telnet 正常工作的服务器【参考方案3】:

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

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

【讨论】:

net.connect 是多态的,net.connect(port, [host], [connectListener]) 也可以。在您链接到的页面上向下滚动一点:)

以上是关于无法从 Node.js 连接到 Telnet 服务器的主要内容,如果未能解决你的问题,请参考以下文章

无法从Win Forms C#app连接到远程Node.js Socket.IO服务器

如何从任何 ip 连接到 node.js 服务器

节点服务器无法连接到 postgres db

通过网页连接到 telnet

无法连接到 mySQL 服务器,Windows 10/Node.js

我无法使用 Node.JS 服务器连接到 SQL 服务器