0

目前在 ZMQ 中接收二进制消息时,我必须执行以下操作:

int maxMessageSize = 1024*500*16*                            
var buffer = new byte[maxMessageSize];
var messageLength = socket.Receive(buffer);
var message = new ArraySegment<byte>(buffer, 0, messageLength).ToArray();

这有一个主要问题:我必须提前知道最大消息大小,我不知道。消息的大小可以从 1KB 到 20MB 不等。有什么方法可以完全接收消息而不预定义缓冲区大小然后将其修剪成数组?

4

1 回答 1

0

您可以对发件人进行编码以分两部分发送消息。

第一部分是缓冲区大小 ( int),可以使用 发送socket.SendMore()

第二部分缓冲区本身与常规socket.Send().

将 设置maxMessageSize为第一个socket.Receive(),然后socket.Receive()再设置正确的缓冲区大小。

于 2014-10-15T10:38:35.537 回答