2016-03-23 2 views
4


Я использую NetMQ для обмена данными между процессами.
Я использую версию пакета NuGet 3.3.2.2 на .Net 4.5
Я хочу создать простое сообщение из строки и отправить его по адресу RequestSocket.System.ArgumentNullException с NetMQ.Msg.Put()

Я продолжаю получать System.ArgumentNullException, хотя не экземпляры являются нулевыми в любой точке.

мой сам код содержит:

static void Main(string[] args) 
{ 
    string exampleString = "hello, world"; 

    byte[] bytes = new byte[exampleString.Length * sizeof(char)]; 
    if (bytes == null) 
    { 
     return; 
    } 

    System.Buffer.BlockCopy(exampleString.ToCharArray(), 0, bytes, 0, bytes.Length); 

    var clientMessage = new NetMQ.Msg(); 
    clientMessage.InitEmpty(); 

    if (!clientMessage.IsInitialised) 
    { 
     return; 
    } 

    clientMessage.Put(bytes, 0, bytes.Length); //throws exception! 

} 
+0

Нечетные. Кажется, что в этом [NetMQ code] (https://github.com/zeromq/netmq/blob/master/src/NetMQ/Msg.cs) ничего не было, что явно бросает это исключение. –

+0

Это потому, что ваш 'clientMessage' инициализирован, но не имеет MsgType из-за' InitEmpty() '. –

+0

@diiN_ Как вы можете его инициализировать? –

ответ

2

При вызове Put он вызывает Buffer.BlockCopy(src, 0, Data, i, len);

От github

public void Put([CanBeNull] byte[] src, int i, int len) 
{ 
    if (len == 0 || src == null) 
     return; 

    Buffer.BlockCopy(src, 0, Data, i, len); 
} 

В этой точке Data является null и Buffer.BlockCopy бросает ArgumentNullException

Попробуйте инициализировать его, позвонив по телефону InitPool или InitGC.

+0

прохладный. Теперь я работаю! –

Смежные вопросы