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

4

我有一个嵌入在C++应用程序中的Telnet服务器,可以使用Telnet连接到该服务器。

我想编写一个Node应用程序来连接我的服务器,我已经尝试过以下方法:

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' }

真奇怪,如果我使用Node.js设置一个简单的回显服务器,一切都很正常。下面是工作正常的回显服务器代码:

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连接我的应用程序
  • 我可以从node连接到同一端口上运行的节点echo服务器
  • 如果我从我的node应用程序连接到我的应用程序,则会收到拒绝连接的消息

额外信息

  • 操作系统:OSX(Mavericks)
  • Node版本:0.10.28
  • 使用嵌入式Lua和LuaSocket(Lua 5.1)提供的C ++ Telnet服务器。

当您成功连接到C++ telnet服务器时,您使用的telnet命令行是什么? - mscdex
rlwrap telnet localhost 6502 - Gary Liddon
3个回答

4

问题已解决!

问题是我的应用程序服务器绑定到了本地主机,并且默认情况下绑定到IPV6地址::1。

将主机设置为localhost传递给net.connect假定为IPV4,导致连接失败。

但在Mac命令行中使用telnet和nc却能正常工作并正确连接。

有两个解决方案:

  • 将应用程序绑定到127.0.0.1和localhost,则Node中的工作正常。
  • 在test.js中将主机地址设置为::1,则可以通过ipv6连接。

现在所有问题都已经解决了 :)

Gaz


感谢分享! - Cynthia Sanchez

0

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

在最后添加这行代码:server.listen(port);


1
我不是在尝试创建一个监听的服务器。我正在尝试从节点连接到已经运行并且可以使用命令行telnet正常工作的服务器。 - Gary Liddon

0

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接