从TCP客户端接收字节到数组

本文关键字:字节 数组 端接 TCP 客户 客户端 | 更新日期: 2023-09-27 17:53:24

我想从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数组中)........

从TCP客户端接收字节到数组

好吧,你的代码已经有一个问题了:

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类,它允许您指定数据的端序。