2011-04-26 49 views
-1

有沒有辦法在一個單一的bytearray和客戶端發送一系列的int作爲一個整體,削減4個字節的bytearray,以便我可以檢索返回值?我一直在嘗試,但到目前爲止,我只能通過一次發送1個值來做到這一點。謝謝。通過套接字發送整數的bytearray

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(); 
       } 

    } 
+0

如果您的序列化的需求變得更加複雜,你可以嘗試谷歌協議緩衝區。 http://code.google.com/p/protobuf-net/ - 開箱即用C++和Java進行互操作非常好。 – 2011-04-26 15:53:37

+0

非常感謝推! – k80sg 2011-04-26 16:56:31

+1

爲什麼你不接受最近9個問題的答案? – 2011-04-26 17:46:52

回答

0

您可以使用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(); 
0

使用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);