【问题标题】:does not read anything using ObjectInputStream in Java socket不使用 Java 套接字中的 ObjectInputStream 读取任何内容
【发布时间】:2020-03-09 04:29:11
【问题描述】:

我创建了一个简单的服务器和一个客户端,但服务器无法读取从客户端发送的任何内容。发送字符串后,我还添加了一条打印语句,但也无法打印。

public class Server {
                public static void main(String[] args) throws IOException, ClassNotFoundException {
                    ServerSocket serverSocket = new ServerSocket(6666);

                    Socket clientSocket = serverSocket.accept();
                    System.out.println("accepting client at address " + clientSocket.getRemoteSocketAddress());
                    ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());
                    ObjectOutputStream out = new ObjectOutputStream(clientSocket.getOutputStream());

                    String input = (String) in.readObject();
                    System.out.println(input);
                    out.writeObject("Received");
                    out.flush();
                }
}

下面是客户端,我只想发送一个字符串“?????不发送”:

 public class Test {

        public static void main(String[] args) throws IOException, ClassNotFoundException {
            Client client = new Client();
            client.sentInfo();
        }

        private static class Client {

            private ObjectInputStream objectInputStream;
            private ObjectOutputStream objectOutputStream;

            public Client() throws IOException {
                Socket socket = new Socket("127.0.0.1", 6666);
                this.objectInputStream = new ObjectInputStream(socket.getInputStream());
                this.objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
            }

            public void sentInfo() throws IOException, ClassNotFoundException {
                this.objectOutputStream.writeObject("?????does not send");
                this.objectOutputStream.flush();
                System.out.println("????????");
                Message resp = (Message) this.objectInputStream.readObject();
                System.out.println(resp.getMessage());
            }

        }
 }

如果我只使用 InputStream 并使用缓冲区读取字节,我尝试了其他方法,如下所示: Server code

这是客户端代码:client code

上面两个链接中的代码可以工作。但是,如果我尝试使用 ObjectInputStream,它将无法正常工作:

这是服务器:server

这是客户:client

这是我要发送的 Message 对象:Message class

有人可以帮我解释一下吗?谢谢!

【问题讨论】:

    标签: java sockets serversocket


    【解决方案1】:

    要从套接字读取字符串,请使用以下内容:

    DataInputStream input = new DataInputStream(clientSocket.getInputStream()); String message = input.readUTF();

    您可以从一个套接字打开多个流,因此如果您想读取其他真正需要 ObjectInputStream 的内容,也可以打开它。不要忘记正确关闭流和套接字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 2014-04-17
      • 2013-06-27
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      • 2018-10-12
      相关资源
      最近更新 更多