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実際に読み取られたバイト数を示すために、によって返される値を無視しています。それはほとんどの場合、悪い考えです。同様に、必要なすべての情報を 1 回の呼び出しで受け取ると想定しています。通常、すべてのデータを読み取るまでループする必要があります-一定量を期待していることを知るか、データなくなるまで読み取ることによって。

データをバイト配列に取得したら、それを整数配列に変換する方法は、バイト配列の形式によって異なります。をそのまま使用できる場合もあります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 に答える