2015-07-20 163 views
0

我做了一個應用程序,必須發送一個類到使用套接字編寫的c + +服務器。該類由變量都是Ints。我想將java類轉換爲字節,然後通過套接字作爲數據包發送它。服務器需要8個字節的數據包大小。當我嘗試轉換我的對象時,我得到了超過8個字節。我還能如何將我的對象發送到服務器?此外,我的代碼在兩個2字節卡盤中發送4個字節的數據。爲什麼這樣做?Android客戶端與遠程服務器

public void connect2() { 
     String serverHostname = new String("My IP"); 
     ObjectOutputStream out2 = null; 
     ObjectInputStream in2 = null; 

     try { 

      echoSocket = new Socket(serverHostname, MYPORT); 
      StatusPacket p = new StatusPacket(); 

     byte[] data = new byte[8]; 
     data = serializeObject(p); 
     int j = data.length; 

      out2 = new ObjectOutputStream(echoSocket.getOutputStream()); 
      out2.flush(); 
      in2 = new ObjectInputStream(echoSocket.getInputStream()); 
      DataOutputStream dOut = new  DataOutputStream(echoSocket.getOutputStream()); 


       out2.write(data); 

      out2.close(); 
      in2.close(); 
      echoSocket.close(); 


     } catch (UnknownHostException e) { 
      System.err.println("Don't know about host: " + serverHostname); 
      System.exit(1); 
     } catch (IOException e) { 
      System.err.println("Couldn't get I/O for " 
        + "the connection to: " + serverHostname); 
      System.exit(1); 
     } 


    } 

回答

0

的ObjectOutputStream和ObjectInputStream的使用Java序列化機制,其中包括的不僅僅是類屬性值的更多信息。你不想用C++代碼處理這些代碼,所以我建議你從你的代碼中移除所有的序列化代碼和這兩個流。

既然你已經知道你想要的字節級別,你應該真的使用該DataOutputStream來代替。它允許你傳輸像byte,int,long等標量數據類型,而不需要任何開銷。只需從對象中獲取這兩個32位整數,然後將它們傳遞給DataOutputStream.writeInt(..)並設置好即可。