将TCP客户端从c#转换为nodejs

时间:2018-03-27 06:53:34

标签: c# node.js tcp

我们正在将用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值后没有,第三方服务器开始响应请求

1 个答案:

答案 0 :(得分:0)

尝试这样的事情,(我包括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。这会导致错误。