1
hello everybady我有簡單的服務器,通過tcp接收文件通常工作正常,但如果請求不是來自客戶端2小時,我的服務器無事可做。如果客戶想在2小時後請求從服務器,服務器無事可做。 你有任何建議Java Server在兩個小時後停止
import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;
/* w ww . jav a 2 s . c o m*/
public class Main extends Thread {
private ServerSocket serverSocket;
public final static int FILE_SIZE =128*1204;//128k
int bytesRead;
public Main() throws IOException {
serverSocket = new ServerSocket(1072);
}
public void run() {
BufferedInputStream bis=null;
System.out.println("Waiting for client on port " + serverSocket.getLocalPort() + "...");
Socket client=null;
try {
client = serverSocket.accept();
System.out.println("1:"+client.getKeepAlive());
client.setKeepAlive(true);
} catch (IOException e1) {
e1.printStackTrace();
}
System.out.println("Just connected to " + client.getRemoteSocketAddress());
while (true) {
try {
byte [] mybytearray_rec = new byte [FILE_SIZE];
bis = new BufferedInputStream(client.getInputStream());
String s=null;
while(bis.available()>0)
{
bytesRead =bis.read(mybytearray_rec);
s = new String(mybytearray_rec,0,bytesRead);
System.out.print(s);
}
} catch (SocketTimeoutException s) {
System.out.println("SocketTimeoutException:"+s);
break;
} catch (IOException e) {
System.out.println("IOException:"+e);
e.printStackTrace();
break;
}catch (Exception e) {
System.out.println("Exception:"+e);
e.printStackTrace();
break;
}
}//While;
}
public static void main(String[] args) throws InterruptedException {
try {
Thread t = new Main();
t.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
你想在2小時後結束服務器? – 2014-12-19 08:33:28
你有哪些服務器?如果你使用'Redhat的'Openshift'或類似的解決方案,這可能是正常的,因爲我注意到他們傾向於關閉用戶機器,如果他們閒置一段時間。 – spoko 2014-12-19 08:36:23
很難理解你的問題。你可以試着翻譯它與谷歌,即再次發佈?將Buffersize從1204調整爲1024.將while(true)替換爲非無限狀態並刪除中斷。 – Stefan 2014-12-19 08:56:57