在c#中从tcp客户端接收字节到数组

时间:2013-01-16 06:27:20

标签: c# tcp tcplistener

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

1 个答案:

答案 0 :(得分: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类,可让您指定数据的字节顺序。