我用c#制作了我的客户端tcp套接字,并且c#服务器也没有问题
首先,在我向客户端发送数据之前,我发送的报头包含数据长度以及其他一些数据
现在我在nodeJs服务器TCP上尝试了相同的客户端代码,但由于nodeJs中的缓冲区大小而遇到了一些问题
首先这是我的标题
function writeInt(stream, int){
var bytes = new Array(5)
bytes[0] = 2
bytes[1] = int >> 24
bytes[2] = int >> 16
bytes[3] = int >> 8
bytes[4] = int
bytes[5] = 0
stream.write( Buffer.from(bytes))
}
// 1,2,3,4缓冲区的大小
如果我想向我使用的客户端发送消息
var buf = Buffer.from("HELLO THIS IS A MESSAGE FROM SERVER");
writeInt(sock, buf.length)
sock.write(buf);
这是有效的,因为我使用字符串,但是当我尝试发送整数时,出现了issuse
喜欢
var buf = Buffer.from([1,2222,999,666]);
writeInt(sock, buf.length)
sock.write(buf);
第一件事,当我使用buf.length
时,缓冲区的长度错误了,它返回了4
!
我尝试了其他方法,例如在NodeJs网站中找到它
let buf = Buffer.alloc(3); // Init buffer without writing all data to zeros
buf.writeUInt16BE(220);
和
let buf = Buffer.allocUnsafe(2);
buf.writeUInt16BE(1234);
所有这些返回错误的缓冲区长度
或缓冲区长度不像我通过函数writeInt
仅当Integer
发送字符串而没有任何麻烦的情况下,这种情况才会发生