无法从 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服务器