gpt4 book ai didi

Java 服务器两小时后停止

转载 作者:行者123 更新时间:2023-11-30 03:37:12 26 4
gpt4 key购买 nike

你好,大家好,我有一个简单的服务器,通过 tcp 接收文件通常工作正常,但如果请求不是来自客户端 2 小时,我的服务器无事可做。如果客户端想在 2 小时后从服务器请求,服务器什么也不做做。有什么建议吗

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();
}
}
}

最佳答案

正如您目前所写的问题一样,这只是对可能发生的情况的疯狂猜测。

while 循环的位置为您的服务器建议了以下逻辑(伪代码):

LISTEN for a client
ACCEPT a client
LOOP
PROCESS A TRANSATION with client
[ wait next message possibly 2 hours]

那是错误的。网络中可能有许多组件会中止非 Activity 连接,因为它拥有未使用的资源。

你应该使用:

LISTEN for a client
LOOP
ACCEPT a client
PROCESS A TRANSATION with client
CLOSE the connection
[ wait next message possibly 2 hours]

这样,连接就会正确关闭,而不是保持不活动状态,并且客户端会为每个新事务打开一个干净的连接。

关于Java 服务器两小时后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27562232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com