gpt4 book ai didi

node.js - 如何在 NodeJS 中读取 TCP 端口/套接字?没有 "read"方法

转载 作者:搜寻专家 更新时间:2023-10-31 23:27:27 26 4
gpt4 key购买 nike

我应该与 Controller 通信,该 Controller 具有配置为发送状态数据的端口。我应该使用 NodeJS 在特定 IP 的端口 2424 上读取。我已经尽我所能,但没有任何内容被读取。这是我的困惑:* 我没有收到“连接”事件——这可能是因为在 Controller 级别实现的接口(interface)非常简单吗?或者没有建立连接* nodejs 的套接字中没有“读取”方法 - 只有一个 on('data') 从未收到任何东西。

我提到我没有听,因为我的应用程序是一个客户端,不接受任何连接,只是连接到服务以接收数据

我的代码是这样的:

var host = 'xxx.yyy.zzz.ttt';
var port = 2424;
var client = net.connect({port:port, host:host}, function() {
log.logOut(ModName, '[checkPortaRack] Client connected.');
});

client.setTimeout(SOCKET_TIMEOUT * 1000);

client
.on('timeout', function() {
client.destroy();
callback(new Error("No data received. So device '"+dev.name+"' in error"));
})
.on('connect', function() {
log.logOut(ModName, '[checkPortaRack] Connected...');
})
.on('data', function(chunk) {
data += chunk;
console.log(data.toString());
log.logOut(ModName, 'Got data...');
client.destroy();
})
.on('end', function() {
data = data.toString().replace('\u0000',"");
log.logOut(ModName, 'Data: '+JSON.stringify(data));
console.log('client disconnected');
})
.on('error', function(e) {
status.deviceDown = true;
log.logOut(ModName, "[checkPortaRack][Device Error]["+dev.name+"] ERROR Getting data from device: " + e.message);
callback(new Error("Error while receiving data. So device '"+dev.name+"' in error"));
});

负责人发送了这个 C# 代码,他们说这个代码很有魅力:

private void HandleClientComm(object client)
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream clientStream = tcpClient.GetStream();

byte[] message = new byte[4096];
int bytesRead;

while (true)
{
bytesRead = 0;

try
{
//blocks until a client sends a message
bytesRead = clientStream.Read(message, 0, 4096);
}
catch
{
System.Diagnostics.Debug.WriteLine("catch");
//a socket error has occured
break;
}

if (bytesRead == 0)
{
//the client has disconnected from the server
System.Diagnostics.Debug.WriteLine("Client Disconnected");
break;
}

//message has successfully been received
ASCIIEncoding encoder = new ASCIIEncoding();
System.Diagnostics.Debug.WriteLine(encoder.GetString(message, 0, bytesRead));
}

tcpClient.Close();
}

因此,问题是:如何使用 Node 的套接字读取此 ip/端口,而不使用“读取”方法且不发送“连接”事件?

非常感谢,卡塔林

最佳答案

您的 Node 代码通常看起来没问题。

你可以尝试改变

var client = net.connect({port:port, host:host}, function() {
log.logOut(ModName, '[checkPortaRack] Client connected.');
});

var client = new net.Socket();

然后将其添加到您的代码底部:

client.connect(port, host);

关于node.js - 如何在 NodeJS 中读取 TCP 端口/套接字?没有 "read"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23244698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com