我正在尝试在服务器和客户端之间分离TCP套接字消息。我尝试这样做的方法是通过以4个字节开始每个消息,其中包含一个描述消息大小的整数。问题是我不知道如何用额外的字节填充该整数,使其大小为4字节。我在窗户上。
此外,服务器是在节点中编写的,但我想我已经找到了那个方面。
以下是我的一些代码,如果它有帮助:
$data = JSON->new->utf8->encode({test=>123});
print $OUTPUT_SOCKET length(encode('UTF-8', $data)); # This needs to be 4 bytes
print $OUTPUT_SOCKET $data
答案 0 :(得分:1)
sprintf "%32d", $length # Padded with spaces
sprintf "%032d", $length # Padded with zeroes
如果不需要是文本格式,请使用以下内容:
pack 'N', $length # 32-bit unsigned int (4 bytes) in BE byte order.
pack 'Q>', $length # 64-bit unsigned int (8 bytes) in BE byte order.
如果采用这种方法,您可以将所有内容组合在一起:
print $SOCK pack 'N/a*', $encoder->encode($data); # Or Q>/a*