我试图解决这个问题很长一段时间,最后决定从专家那里得到帮助。我使用套接字编程开发了服务器客户端应用程序,我的客户端能够成功连接到服务器。现在我试图根据来自客户端的请求从服务器发送对象通过套接字,我的服务器能够捕获请求但是,服务器发送的响应(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发送的数据。请帮助。
答案 0 :(得分:1)
您必须先创建ObjectOutputStream
,最好是两端。否则,您将获得创建ObjectInputStream
的死锁。
另外,我很想知道以下评论的含义是什么:
// Wait untill the data is available
如果这表示调用available()
的代码丢失,则删除它。只要有必要,readObject()
就会阻止。 available()
的正确用法很少,而且不是其中之一。