C#套接字字节数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#套接字字节数组相关的知识,希望对你有一定的参考价值。

好的,所以我从请求中接收字节..

我打电话来读取字节

        byte[] buffer = new byte[1024];
        int resp = socket.Receive(buffer);

如果我用这个,

 Console.WriteLine(resp)

它返回9的整数,表示接收到9个字​​节

我用的时候

 int byte1 = buffer[0];
 Console.WriteLine(byte1);

它返回

0

所以当我使用的时候

        long bytelong = BitConverter.ToInt64(buffer, 0);
        Console.WriteLine(bytelong);

我期待

 0( + other 7 bytes from the array )

但我收到的是

 -1249284928492

这是错误的,因为我知道第一个字节是

0

真的很困惑这个..

答案

不可能从给出的具体问题的确切信息中获知,但这里有一些调试网络通信的一般建议可能有所帮助。

最重要的是能够在应用程序解释和转换数据之前准确查看正在发送和接收的数据。最好的方法是使用外部线路监控软件,如WireShark。如果您要做很​​多这样的事情,请熟悉这样的工具。

但对于大多数可能有点过分的工作。只需在转换之前记录您发送和接收的实际字节数,例如:

var count = socket.Receive(buffer);
Console.WriteLine("Received {0} bytes: {1}", count, BitConverter.ToString(buffer, 0, count));

其次,在将字节流解释为二进制整数时,请注意byte ordering issues。如果您不确定发送方和接收方都将使用相同的字节排序,那么请考虑使用Network Byte Order(又名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"

要将接收的网络字节顺序值转换回小端:

ulong le_value = IPAddress.NetworkToHostOrder(be_value);

希望有所帮助。

以上是关于C#套接字字节数组的主要内容,如果未能解决你的问题,请参考以下文章

Java套接字在写入字节数组后仅获得NUL字符

web代码片段

浮点数组到字节数组和反之亦然

通过套接字编程在 C# 中使用动态字节数组 [List<byte> 不起作用]

如何通过 Dart 中的套接字接收图像

如何将字节数据从套接字写入 C 中的无符号字符向量? [关闭]