Отправка байта целых чисел через сокет - PullRequest
0 голосов
/ 26 апреля 2011

Есть ли способ отправить серию int в целом одним байтовым массивом и на стороне клиента, сократить байтовый массив на 4 на 4 байта, чтобы я мог получить обратные значения? Я пытался, но до сих пор я могу сделать это только отправляя 1 значение за раз. Спасибо.

public void SendData_Click(System.Object sender, System.EventArgs e)
    {
                int value = 500;
                int value2 = 1000;
                int value3 = 1500;

                int[] valueStore = new int[3];
                valueStore[0] = value;
                valueStore[1] = value2;
                valueStore[2] = value3;

                 for (int i = 0; i < 3; i++)
                {
                   byte[] array = BitConverter.GetBytes(valueStore[i]);
                   byte[] outStream = array;
                   serverStream.Write(outStream, 0, outStream.Length);
                   serverStream.Flush();
                 }

     }

Ответы [ 2 ]

0 голосов
/ 26 апреля 2011

Используйте BinaryWriter:

byte[] bytes;
using (var ms = new MemoryStream())
using (var bw = new BinaryWriter(ms))
{
    for (int i = 0; i < 3; i++)
        bw.Write(valueStore[i]);
    bytes = ms.ToArray();
}
serverStream.Write(bytes, 0, bytes.Length);
0 голосов
/ 26 апреля 2011

Вы можете использовать BinaryWriter для записи целых чисел в поток, который можно легко преобразовать в байтовый массив перед отправкой.См. Ниже:

int value = 500;
int value2 = 1000;
int value3 = 1500;
System.IO.MemoryStream ms = new System.IO.MemoryStream();
System.IO.BinaryWriter bw = new System.IO.BinaryWriter(ms);
bw.Write(value);
bw.Write(value2);
bw.Write(value3);
byte[] array = ms.ToArray();
serverStream.Write(array, 0, array.Length);
serverStream.Flush();

Чтобы прочитать значения на другой стороне, используйте это:

System.IO.MemoryStream ms = new System.IO.MemoryStream(array);
System.IO.BinaryReader br = new System.IO.BinaryReader(ms);
int value = br.ReadInt32();
int value2 = br.ReadInt32();
int value3 = br.ReadInt32();
...