Java:通过套接字发送和接收对象

时间:2016-10-19 11:03:36

标签: java sockets object

我是学生,学习网络编程并遇到一些问题。

这是我的客户:

public class Test2Client_Tranfer_An_Obj {

Socket socket = null;
ObjectOutputStream out;
ObjectInputStream in;

public Test2Client_Tranfer_An_Obj() {
    try {
        socket = new Socket("localhost", 12345);

        out = new ObjectOutputStream(socket.getOutputStream());
        in = new ObjectInputStream(socket.getInputStream());
        System.out.println("Ready");

        System.out.println("" + in.readUTF());
        System.out.println("" + in.readUTF());
        System.out.println("Recived");

        out.writeUTF("hihi");

        System.out.println("Sended");




    } catch (Exception e) {
        e.printStackTrace();
    }

}

public static void main(String[] args) {

    System.out.println("Client");
    Test2Client_Tranfer_An_Obj test = new Test2Client_Tranfer_An_Obj();
}

}

这是我的服务器:

public class Test2Server_Tranfer_An_Obj {

ServerSocket serverSocket;
ObjectOutputStream out;
ObjectInputStream in;

public Test2Server_Tranfer_An_Obj() {

    try {
        serverSocket = new ServerSocket(12345);
        Socket socket = serverSocket.accept();

        out = new ObjectOutputStream(socket.getOutputStream());
        in = new ObjectInputStream(socket.getInputStream());
        System.out.println("Ready!");
        out.writeUTF("huhu");
        out.writeUTF("hoho");
        System.out.println("Sended");

        String s = in.readUTF();
        System.out.println("" + s);
        System.out.println("Recived");

    } catch (Exception e) {
        e.printStackTrace();
    }

}

public static void main(String[] args) {
    System.out.println("Server");
    Test2Server_Tranfer_An_Obj demo = new Test2Server_Tranfer_An_Obj();

}

}

但是,当我运行我的程序时,这个结果:

服务器控制台

  

服务器   准备!   Sended

客户端控制台

  

客户端就绪

任何人都可以告诉我为什么以及我能做些什么? 感谢阅读! 希望回复你的回答

2 个答案:

答案 0 :(得分:1)

在这种情况下,

对象流过度杀伤。您实际上并没有使用writeObject / readObject,并且使用DataInputStreamDataOutputStream可以执行您想要的操作。

在这种特殊情况下,缓冲了对象流,这意味着缓存小写,直到您flush()close()流来提高性能。如果你不这样做,writeUTF只会写入内存,而不是内存。

c.f。默认情况下,数据流缓冲。

答案 1 :(得分:0)

In your server after write to the outputstream. you have to add out.flush() to write to socket