Android客户端与远程服务器

时间:2015-07-20 21:14:57

标签: java android sockets

我正在制作一个应用程序,必须使用套接字将类发送到用c ++编写的服务器。该类由变量组成,两者都是Ints。我想将java类转换为字节,然后通过套接字将其作为数据包发送。服务器期望数据包大小为8个字节。当我尝试转换我的对象时,我得到超过8个字节。我怎样才能将我的对象发送到服务器?此外,我的代码在两个2字节的卡盘中发送4个字节的数据。为什么这样做?

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


    }

1 个答案:

答案 0 :(得分:0)

ObjectOutputStream和ObjectInputStream使用Java序列化机制,其中包含的信息不仅仅是类属性值。您不想处理C ++代码中的那些,因此我建议您从代码中删除所有序列化代码和这两个流。

由于您已经知道了字节级别的内容,因此您应该使用该DataOutputStream。它允许您传输标量数据类型,如byte,int,long等,而不会产生任何开销。只需从对象中获取这两个32位整数,然后将它们传递给DataOutputStream.writeInt(..),就可以了。