0

我想从 tcp 客户端接收字节到数组中。我有一个字节数组 dataToRecieve,我在其中接收这些字节。

但是我在这里遇到了一些问题,任何人都可以检查我的代码:

while (true) {
    try {                           
       Socket handler = mainSocket.Accept();
       byte[] dataToRecieve = new byte[handler.ReceiveBufferSize];
       int[] dataArray = new int[1024];
       handler.Receive(dataToRecieve);
       //////SOME CODE
       int i = handler.Send(msg);
       handler.Shutdown(SocketShutdown.Both);
       handler.Close();
    }
catch(Exception) {}
--------//////some code

现在我想将字节接收到字节数组中,而不是将其转换为 int 数组(但是数据应该在 int 数组中)......

4

1 回答 1

0

好吧,您的代码在这里已经有问题了:

handler.Receive(dataToRecieve);

您忽略了返回的值Receive,告诉您实际读取了多少字节。这几乎总是一个坏主意。同样,您假设您在一次通话中收到了您需要的所有信息。通常你要么必须循环,直到你读完所有数据——要么知道你期望一定数量,要么读到没有更多数据。

将数据转换为字节数组后,将其转换为整数数组取决于字节数组中的格式。您也许可以只使用Buffer.BlockCopy,但前提是字节数组中的字节序与内存中的字节序匹配。或者,您可以简单地创建一个正确大小的数组,然后编写一个循环:

int[] integers = new byte[size / 4];
for (int i = 0; i < integers.Length; i++)
{
    integers[i] = BitConverter.ToInt32(bytes, i * 4);
}

但是,您需要再次考虑字节序。我的MiscUtil库有一个EndianBitConverter类,它允许您指定数据的字节顺序。

于 2013-01-16T07:07:01.787 回答