我正在嘗試使線程聊天服務器正常工作。但是我的套接字正在關閉,我不知道它爲什麼。Java SocketException。它爲什麼關閉?
在服務器類我創建了一個新的ClientHandler的
addHandler(new ClientHandler(this, incoming));
addHandler操作開始線程,並增加了新的ClientHandler的到服務器的ArrayList。 傳入是客戶端套接字。
public ClientHandler(Server serverArg, Socket sockArg) {
server = serverArg;
client = sockArg;
System.out.println(client.isClosed());
}
沒有什麼所謂的
之間
public void run() {
try {
System.out.println(client.isClosed());
in = new Scanner(client.getInputStream());
out = new PrintWriter(client.getOutputStream(), true);
announce();
System.out.println("Waiting for input");
boolean done = false;
while(!done && in.hasNextLine()) {
System.out.println("There is input!");
server.broadcast(clientName + ": " + in.nextLine());
}
} catch (Exception e) {
System.out.println(e.toString());
}
}
當我運行這段代碼。這是輸出:
false
true
java.net.SocketException: Socket is closed
爲什麼在創建此類之後立即關閉/在啓動之前?
你能複製你的完整代碼嗎 –
還不知道爲什麼它不起作用。我現在修好了,但似乎沒有任何改變。即使我將代碼轉換爲上述狀態,它仍然有效。 – user3237823
我玩過的東西:實現Runnable,在ClientHandler中擴展Thread。 – user3237823