我正在开发一个使用 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
socket.io 套接字是不是普通的 TCP/IP 套接字,所以这不起作用。
您不需要外部模块即可在 Node.js 中使用普通 TCP/IP 套接字。您可以使用内置的
net
模块来实现此目的。
有关详细信息,请参阅文档。