我想运行一个简单的服务器 - 客户端程序,客户端检查每个5秒最佳服务器并始终连接最佳服务器。所以我写了下面的代码但是我得到了stackoverflow错误。
public static void main(String[] args) throws IOException, InterruptedException {
RTT best = null;
BestServer bestserver = new BestServer(best);
Socket clientSocket = new Socket(bestserver.bestserver.ip, 6789);
System.out.println("I connect best server");
}
public class BestServer implements Runnable{
static RTT bestserver;
public BestServer(RTT best) throws InterruptedException{
bestserver = best;
findBest();
}
public static void findBest() throws InterruptedException{
Thread t = new Thread(new BestServer(bestserver));
t.start();
t.sleep(5000);
}
public void run(){
//..
}
答案 0 :(得分:2)
您的StackOverflow
来自此行。
while(true){
Socket clientSocket = new Socket(bestserver.bestserver.ip, 6789);
System.out.println("I connect best server");
}
你制作套接字,直到内存不足为止。
您需要设置一定数量的套接字,否则您将永远耗尽内存。
另一个问题是这两行:
public BestServer(RTT best) throws InterruptedException{
bestserver = best;
findBest();
}
public static void findBest() throws InterruptedException{
Thread t = new Thread(new BestServer(bestserver));
}
一个调用findbest()
,另一个调用构造函数。因为在这种情况下,一个人会调用另一个,直到你的内存不足为止。