2015-07-20 219 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(..)并设置好即可。