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

标签 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 流成功打印客户端的名称

最佳答案

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

关于java - 服务器/客户端套接字和 ObjectOutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36415262/

相关文章:

java - 如何使用 PrinterJob 在 java swing 中按下 JButton 时打印页面?

java - Gradle javaCompile 任务是否总是重新编译所有 java 类(包括未更改的?)

java - 为什么我的打印方法无法按顺序打印出二叉搜索树?

java - 如何使用GridBagLayout实现这种布局?

c++ - 将 printf 和 cout 重定向到套接字

Java套接字对象输出流多线程

java程序疑惑

java - PHP 客户端如何通过 Sockets/RPC 与 Java 程序通信,在不刷新页面的情况下检索新结果?

c++ - 检查套接字是否已在 C++ 中关闭

python - 搭建python与smalltalk通信的桥梁