嘿我試圖從最近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