嘿我试图从最近2-3天调试这个程序。问题在于,我构建了一个客户端服务器体系结构,并且所有客户端在使用Socket连接的某个时间间隔后都会ping服务器(使用它们的信息)。因此,在服务器端,当我尝试构造ObjectOutputStream时,程序卡住了。这里是客户端的代码。
程序卡在ObjectInputStream的构造函数
public void pingUpdate(){
Thread pingThread = new Thread() {
public void run() {
while(true) {
try {
ping_socket = new Socket("localhost", 11111);
ObjectOutputStream ping_objectOutputStream = new ObjectOutputStream(ping_socket.getOutputStream());
ping_objectOutputStream.flush();
ping_objectOutputStream.writeObject(user);
ping_objectOutputStream.close();
ping_socket.close();
}catch (Exception exception) {
exception.printStackTrace();
}
}
};
pingThread.start();
}
这里是服务器的代码
public void run() {
while (true) {
try {
System.out.println("Server Listening");
Socket client = null;
client = serverSock.accept();
System.out.println("Accepted");
InputStream inputStream = client.getInputStream();
System.out.println("Input stream established");
ObjectInputStream ois = new ObjectInputStream(inputStream);
System.out.println("Object streams established");
User user = (User) ois.readObject();
System.out.println("Object read");
ois.close();
client.close();
}
catch (Exception e){
e.printStackTrace();
}
}
}
服务器程序打印,直到“建立输入流”,并会被卡住。我不知道为什么会发生这种情况,尽管我在客户端刷新了输出流。谢谢。
您应该创建一次流。你的'pingThread'在每个循环中创建一个新的'ObjectOutputStream'。你可能也想通过一些网络教程,否则你会在几个星期内进行调试。 – Kayaman
如果抛出异常,则不关闭套接字。 – EJP
@Kayaman在循环的每次迭代中创建ObjectOutputStream会出现什么问题? – omjego