Невозможно узнать из приведенной информации, в чем конкретно заключается ваша конкретная проблема, но вот несколько общих советов по отладке сетевых соединений, которые могут помочь.
Самое важное - это уметь точно видеть, что именноданные отправляются и принимаются до того, как они будут интерпретированы и преобразованы приложением (ями).Лучший способ сделать это - использовать внешнее программное обеспечение для мониторинга линии, такое как WireShark .Если вы собираетесь много заниматься этим, познакомьтесь с таким инструментом.
Но для большинства работ это, вероятно, излишне.Просто зарегистрируйте фактические байты, которые вы отправляете и получаете до , когда вы конвертируете их, например:
var count = socket.Receive(buffer);
Console.WriteLine("Received {0} bytes: {1}", count, BitConverter.ToString(buffer, 0, count));
Во-вторых, помните о проблемах порядка байтов , когдаинтерпретировать поток байтов как двоичные целые числа.Если вы точно не знаете, что и отправитель, и получатель будут использовать один и тот же порядок байтов, рассмотрите возможность использования Сетевой порядок байтов (он же Big Endian) для ваших многобайтовых двоичных значений.
Например, если ваше приложение с сокетом c # запущено в Windows, ваше 64-битное целочисленное значение, вероятно, будет сохранено как младший порядок:
long le_value = 0x0807060504030201; // "01-02-03-04-05-06-07-08"
long be_value = IPAddress.HostToNetworkOrder(le_value); // "08-07-06-05-04-03-02-01"
Чтобы преобразовать полученное значение порядка байтов в сети обратно вlittle endian:
ulong le_value = IPAddress.NetworkToHostOrder(be_value);
Надеюсь, это поможет.