我正在用Java編寫一個Server/Client程序。服務器等待連接,然後爲該連接創建一個新線程。服務器然後返回並偵聽其他端口上的連接。用java多線程服務器/客戶端,如何判斷客戶端線程是否關閉?
sck = srvrSckt.accept();
server.numConnections++;
System.out.print("Connection was made on " + server.port[i] + ".\n");
Connections conn = new Connections(sck);
server.threads[i] = new Thread(conn);
server.threads[i].start();
一個連接已完成後,我想回去檢查是否有以前的連接已經關閉。然後我會將這些端口標記爲可供將來的連接使用。有沒有辦法做到這一點?
我已經讀過,線程間通信的最佳方式是使用共享變量。但是,我找不到這樣的一個好例子。另外,我不確定共享變量是否可行,因爲我不僅要檢查已成功關閉的連接,還要檢查突然斷開連接的連接。
任何幫助你可以提供將不勝感激。謝謝。
編輯:
這是代碼的一個較大的部分。這可能會讓我的問題更清楚。
if (server.isAvailable[i] == true)
{
availablePort = server.allPorts[i];
server.isAvailable[i] = false;
ServerSocket srvrSckt = new ServerSocket(availablePort);
System.out.println("Waiting for connection on port " + availablePort + "...");
srvrSckt.setSoTimeout(5000);
try {
sck = srvrSckt.accept();
server.numConnections++;
System.out.print("Connection was made on " + server.port[i] + ".\n");
Connections conn = new Connections(sck);
server.threads[i] = new Thread(conn);
server.threads[i].start();
} catch (Exception e) {
server.isAvailable[i] = true; // no connection was made
srvrSckt.close();
}
'你的意思是,你將標誌着這些端口avalaible'你有什麼端口開放的X號和要到服務器只佔1級的要求嗎?端口?我不明白你的問題 – Cratylus
什麼端口? TCP服務器只使用一個端口。您根本不必管理它,更不用說將其標記爲可用於未來的連接。而'客戶端線程'沒有關閉,客戶端*連接*被關閉。你的問題仍然模糊。請重申。 – EJP
@ user985637,您可能希望選擇一篇文章作爲您接受的答案,這是SO上的一個非常好的練習。 – Bhaskar