客户端没有在Java中通过ObjectStream接收Server发送的Object

时间:2016-03-28 17:23:06

标签: java sockets

我试图解决这个问题很长一段时间,最后决定从专家那里得到帮助。我使用套接字编程开发了服务器客户端应用程序,我的客户端能够成功连接到服务器。现在我试图根据来自客户端的请求从服务器发送对象通过套接字,我的服务器能够捕获请求但是,服务器发送的响应(writeObject(...))无法到达客户端。

服务器代码段:

ServerSocket sSocket = new ServerSocket(socketNumber);
ArrayList<LoginPassword> logIn = new ArrayList<>();
Socket cSocket = sSocket.accept();
ObjectOutputStream outputStream = new ObjectOutputStream(cSocket.getOutputStream());
outputStream.flush();
ObjectInputStream inputStream = new ObjectInputStream(cSocket.getInputStream());
LoginPassword lp1 = new LoginPassword("admin","admin");
logIn.add(lp1);
outputStream.writeObject(logIn);
outputStream.flush();

Clinet代码段:

Socket client = new Socket(InetAddress.getLocalHost(),socketNumber);
ArrayList<LoginPassword> myList = new ArrayList<>();
ObjectOutputStream outputStream = new ObjectOutputStream(client.getOutputStream());
outputStream.flush();
ObjectInputStream inputStream = new ObjectInputStream(client.getInputStream());
//Wait untill the data is available
myList = (ArrayList<LoginPassword>) inputStream.readObject();

在我的情况下,客户端readObject()永远不会被调用,因为它无法检测到Server发送的数据。请帮助。

1 个答案:

答案 0 :(得分:1)

您必须先创建ObjectOutputStream,最好是两端。否则,您将获得创建ObjectInputStream的死锁。

另外,我很想知道以下评论的含义是什么:

// Wait untill the data is available

如果这表示调用available()的代码丢失,则删除它。只要有必要,readObject()就会阻止。 available()的正确用法很少,而且不是其中之一。