2012-06-25 2 views
0

Я отправляю данные асинхронно по TCP-сокету. В настоящее время я подключен к симулятору SMSC на своем локальном компьютере, чтобы проверить, что все пакеты созданы правильно, прежде чем подключиться к реальной вещи.TCP Communication Behavior

Я только отправляю PDU один раз, и SMSC получает его отлично, и генерирует ответ PDU и отправляет его обратно, но после этого на симуляторе появляется сообщение об ошибке, указывающее, что он не может принимать 100 сообщений. Проблема в том, что я только отправляю его один раз, нет цикла, который постоянно отправляет сообщения, и я отлаживал и проверял, что он отправляет только один раз.

Я думаю, что проблема может заключаться в создании PDU. Я начинаю с создания массива байтов размером 1024 и затем заполнения по мере необходимости. Когда он заполняется, он не использует все пространство массива. Поэтому я думаю, что когда симулятор получает его, извлекает данные из массива, а затем считывает байты «0» в массиве после фактических данных в виде нового сообщения, так как он дает мне ответное сообщение о том, что данные не действует.

Есть ли вообще избежать этого, или я просто что-то пропустил здесь? По мне, при получении значения в массиве байтов, вы должны использовать только необходимую кодировку для извлечения данных, а остальные байты «0» следует игнорировать?

Извините, если мой вопрос неясен.

ответ

0

Проблема в том, что в массиве действительно 0 байт.

Я решил ее, удалив 0 байт из массива, после прочтения статьи, размещенной на Stack Overflow:

Вот решение:

private byte[] CleanArray(byte[] array) 
    { 
     int i = array.Length - 1; 

     while (array[i] == 0) 
     { 
      i--; 
     } 

     byte[] cleanedArray = new byte[i + 1]; 
     Array.Copy(array, cleanedArray, i + 1); 

     return cleanedArray; 
    }