node.js socket.io 连接到非 http 设备

问题描述 投票:0回答:1

我正在开发一个使用 C# 应用程序和套接字连接到远程设备的系统,该连接是通过连接到 IP 地址和端口号来建立的。发送一条非常短的纯文本消息,并使用短文本消息再次发出请求。

响应也是纯文本。我想用node.js替换在客户端执行这些事务的应用程序

在节点应用程序中,我安装了socket.io和socket.io-client模块,我在Windows 10 Pro版本10.0.19045上使用node.js v21.7.1

在我的节点应用程序中:

var socket    = require("socket.io");
var socketcli = require("socket.io-client");
...
var strTestCli = "X.X.X.X:1024";
var sckTest = socketcli.connect(strTestCli);
console.dir(sckTest);
sckTest.on("connection", objConn => {
    console.log("Connected to " + strTestCli);
    objConn.on("disconnect", () => {
        console.log("Connected to " + strTestCli + " disconnected!");
    });
});

显然我没有输入IP地址,但我知道我使用的IP地址是正确的并且存在。

当我转储 sckTest 时,uri 显示:

uri:  'undefined//X.X.X.X:1024'
...
engine: Socket {
   ...
   hostname: 'undefined',
   port: '80'

我完全走错路了吗?谁能帮助我走上正确的道路,这可以用node.js来完成吗?

[编辑]我也尝试过使用网络套接字模块:

var wsCli = require("websocket").client;
...
var strTestCli = "ws://X.X.X.X:1024/";
var sckTest = new wsCli(strTestCli, 'echo-protocol');
console.dir(sckTest);
sckTest.on("connectFailed", err => {
    console.log(err);
});
sckTest.on("connect", objConn => {
    console.log("Connected to " + strTestCli);
    objConn.on("disconnect", () => {
        console.log("Connected to " + strTestCli + " disconnected!");
    });
});

转储sckTest的结果:

uri:  Url {
    protocol: 'ws:',
    slashes: true,
    auth: null,
    host: `X.X.X.X:1024`,
    port: `1024`,
    hostname: `X.X.X.X`,
    hash: null,
    search: null,
    query: null,
    pathname: '/',
    path: '/',
    href: 'ws://X.X.X.X:1024/'
}

谢谢@rveerd,实施了您的建议并在客户端上发现了这一点: https://gist.github.com/tedmiston/5935757

node.js sockets
1个回答
0
投票

socket.io 套接字是不是普通的 TCP/IP 套接字,所以这不起作用。

您不需要外部模块即可在 Node.js 中使用普通 TCP/IP 套接字。您可以使用内置的

net
模块来实现此目的。

有关详细信息,请参阅文档

© www.soinside.com 2019 - 2024. All rights reserved.