如何在java中的1个套接字中发送2种不同类型的数据

时间:2016-01-11 12:13:03

标签: java

有人可以帮我发送2个不同的数据类型超过1个套接字只能从android到java服务器...我必须一起发送一个数组和一个字符串。它崩溃了应用程序

   private void Send()
{
    Thread t = new Thread() {

        public void run() {

            try {

                Socket s = new Socket("192.168.0.3", 7000);
                ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());

                out.writeObject(array);
                out.flush();
                out.close();

                DataOutput out1 =new DataOutput(s.getOutputStream()); 
                out1.writeUTF(id); 
                out1.flush(); 
                out1.close;
                s.close();

            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };
    t.start();

    Toast.makeText(MainActivity.this, "Message Sent !", Toast.LENGTH_SHORT).show();
}

2 个答案:

答案 0 :(得分:0)

我假设你的代码中的错误是,你的Socket的Outputstream已经关闭了。问题是,如果关闭任何流,则所有基础流也将关闭。因此,如果关闭ObjectOutputStream,套接字流也会自动关闭。

如果我是你,我会创建一个包含所需数据的新类,并仅发送此类的实例。

    class TempObject {

        public TempObject(Object[] array, String id) {
            this.array = array;
            this.id = id;
        }

        public Object[] array;
        public String id;
    }

    private void Send() {

        TempObject obj = new TempObject(array, id);
        Socket s = new Socket("192.168.0.3", 7000);
        ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
        out.writeObject(obj);
        out.flush();
        out.close();
    }

答案 1 :(得分:0)

如果要发送多个元素,请使用表或集合。如果要发送string和int变量,可以创建自己的类来存储它们。