服务器/客户端套接字和ObjectOutputStream

时间:2016-04-05 00:44:46

标签: java sockets

服务器

   Socket client_socket = server_back_end.server_socket.accept(); //1.

   ClientInfo new_client = new ClientInfo(
    new ObjectOutputStream(client_socket.getOutputStream()), //writer
    new ObjectInputStream(client_socket.getInputStream()),   //reader
    "blah, about to be re-written"
  );

 new_client.user_name = (String) new_client.reader.readObject(); //3. "bob"
 //new_client.user_name = new_client.reader.readLine(); //this doesnt work either

 System.out.println("Client " + new_client.user_name + " has connected.");

客户端:

Socket client_socket = new Socket();
client_socket.connect(new InetSocketAddress(server_ip, server_port), 500);
client_front_end.display("<<Connection Successful.>>\n");

String user_name = txtfield.getText(); //"bob"

client = new ClientInfo(
   new ObjectOutputStream(client_socket.getOutputStream()), //writer
   new ObjectInputStream(client_socket.getInputStream()),   //reader
   user_name);

client.writer.writeChars(client.user_name); //2.

我首先运行服务器代码。当我在服务器端单步执行调试器时,“// 1”。执行,并等待客户端连接。

然后我运行客户端代码。我期望发生的是“// 2”。应该叫“// 3”。在服务器代码中,选取名称,然后打印用户已连接的内容。但是 ObjectOutputStream.writeChars(client.user_name)未触发服务器中的读取。我究竟做错了什么?我的目标是使用这些ObjectOutput / ObjectInput流

从客户端成功打印名称

1 个答案:

答案 0 :(得分:1)

您正在阅读一个对象,但您不是在写一个对象。你正在写字符。 readObject()只能读取writeObject()的输出。 readInt()只能读取writeInt()的输出。等等。