2014-02-21 134 views
0

我想运行一个简单的服务器客户端程序,其中客户端检查每个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(){ 
    //.. 
} 
+1

'while(true)'huh? –

+0

这是客户端还是服务器?如果它是服务器,你可能想看看ServerSocket类。 http://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html – Nathan

+0

不,它是客户端。客户端连接rtt总是最好的服务器,并且他每5秒检查一次bestserver – user1914367

回答

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(),另调用构造函数。既然是这样,那么一个人会打电话给另一个,直到你内存不足。

+0

但即使我删除while,我仍然有相同的错误 – user1914367