Node.js 如何在NodeJS中读取TCP端口/套接字?那里';s号“;改为;方法

Node.js 如何在NodeJS中读取TCP端口/套接字?那里';s号“;改为;方法,node.js,sockets,Node.js,Sockets,我应该和一个控制器通信,它有一个配置为发送状态数据的端口。我应该在特定IP的端口2424上读取NodeJS。 我已经尽了我所能,但什么也读不懂。 以下是我的困惑: *我没有收到“连接”事件-这可能是因为在控制器级别实现的接口非常简单吗?或者没有建立连接 *nodejs的套接字中没有“read”方法——只有一个on('data'),它从未收到任何东西 我提到我没有听,因为我的应用程序是一个客户端,不接受任何连接,只是连接到一个服务来接收数据 我的代码是: var host = 'xxx.yyy.z

我应该和一个控制器通信,它有一个配置为发送状态数据的端口。我应该在特定IP的端口2424上读取NodeJS。 我已经尽了我所能,但什么也读不懂。 以下是我的困惑: *我没有收到“连接”事件-这可能是因为在控制器级别实现的接口非常简单吗?或者没有建立连接 *nodejs的套接字中没有“read”方法——只有一个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();
    }
所以,问题是:在没有“读取”方法和“连接”事件发送的情况下,如何使用节点的套接字读取这个ip/端口

非常感谢,
Catalin

您的节点代码通常看起来正常

你可以试着换衣服

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

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

client.connect(port, host);

您使用的节点版本是什么?另外,您是否获得任何事件?@mscdex:使用节点v0.8。21@mscdex:不确定如何检查我是否收到任何消息:因为我没有收到“连接”,所以其他所有消息都不会发生。对于某些数据报协议,我确实使用相同的服务器,并且我接收所有包。不过,到目前为止没有什么好运气。您可以尝试使用节点v0.10.26(最新的v0.10版本),看看这是否有帮助,但是如果您绝对确定它应该是Tcp,而不是UDP或其他东西,那么我不知道还有什么建议。我尝试了所有方法,也是您建议的方法。还尝试了var client=net.createConnection(端口、主机、函数(){…});
client.connect(port, host);