【问题标题】:Convert TCP client from c# to nodejs将 TCP 客户端从 c# 转换为 nodejs
【发布时间】:2018-09-05 11:10:09
【问题描述】:

我们正在将用 c# 代码编写的 TCP 客户端转换为 nodejs。

c#中的TCP客户端写成:

    using (TcpClient tcpClient = new TcpClient())
    {
       tcpClient.Connect(HOST, port);
       NetworkStream stream = tcpClient.GetStream();
       StreamWriter streamWriter = new StreamWriter((Stream)stream);
       string str = "{ \"message\" : \"" + message + "\" }";
       streamWriter.Write(str);
       streamWriter.Flush();
       int num = 0;
       stream.WriteByte((byte)num);
       tcpClient.Close();
    }

nodejs转换后的代码是

     var client = new net.Socket();
     client.connect(PORT, HOST, function () {
        var command = { "message" : "message" };
        var message = JSON.stringify(command);
        client.write(message, function () {
           client.write('successfully sent the message');
           client.destroy();
        });
     });

这与第三方服务器对话。使用 c# 时,我们从服务器得到正确的响应,而 nodejs 没有响应

不知道我错过了什么。请帮忙

更新:

在使用 WireShark 检查数据包后,我终于弄明白了。 C# 代码将 NULL (ascii: 00) 附加到消息中,而 nodejs 代码在附加 NULL 值后没有,第三方服务器开始响应请求

【问题讨论】:

  • client.write('successfully sent the message'); 你真的想把这个也写到行吗?
  • 我会这样做: 1. 使用 Wireshark 之类的工具检查是否有消息,如果有,它与 C# 的不同之处。 2. 检查服务器日志是否收到消息以及是否有异常。
  • 也许你的意思是console.log('successfully sent the message'); ???
  • 是的。它应该是console.log('successfully sent the message');

标签: c# node.js tcp


【解决方案1】:

尝试这样的事情,(我包括一个 Node.js 测试服务器):

var net = require('net');

var server = net.createServer(function(socket) {    
    socket.write('Hello from server!');

    socket.on('data', function(data) {
        console.log('Server: Received: ' + data);
    });
});

server.listen(PORT);

var client = new net.Socket();
client.connect(PORT, HOST, () => {
    console.log('Client: Connected to server.');
    var message = JSON.stringify({ "message" : "message" }) + '\r\n';
    client.write(message, () => {
       client.write('successfully sent the message\r\n' , () => {
           console.log("We're done with the client, closing..");
           client.end();
       });
    });
});

client.on('data', function(data) {
    console.log('Client: Received data: ' + data);
});

client.on('close', function() {
    console.log('Client: Connection closed');
});

您可以通过在同一台机器上运行并使用相同的 PORT 来测试这一点。然后你可以尝试使用另一个地址(和端口)。我认为前面代码的问题是您在 client.write 之后直接调用了 client.destroy。这会导致错误。

【讨论】:

  • 我从 c# 和 Nodejs 代码中都得到了相同的消息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 2020-12-07
  • 2012-05-24
  • 1970-01-01
  • 2015-08-15
相关资源
最近更新 更多