我们正在将用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值后没有,第三方服务器开始响应请求
答案 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。这会导致错误。