C#套接字字节数组

问题描述 投票:-2回答:1

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

我打电话来读取字节

        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

真的很困惑这个..

c# arrays sockets bitconverter
1个回答
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);

希望有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.