【发布时间】:2014-06-25 02:31:56
【问题描述】:
我制作了一个可以通过互联网连接的客户端-服务器应用程序。我已经在我的客户端硬编码了服务器的 IP,这是固定的。
我的问题是我想要一种不需要大量处理和内存的方法。 我希望我的客户检查互联网是否可用,然后尝试连接到服务器(如果它已启动并正在运行)。如果没有,那就等待再试一次。 请记住,该应用程序应该始终 24/7 全天候在您的计算机上运行,并在可能的情况下连接,就像 Skype 一样,从某种意义上说,它始终处于开启状态,并且当您有可用的互联网并且服务器可访问时,它会连接。
我的客户端连接到服务器的代码:
private void connectToServer() throws Exception {
showMessage("Attempting Connection... \n");
try{
connection = new Socket(InetAddress.getByName(serverIP), 6789);
showMessage("Ok dude you are Connected to:" + connection.getInetAddress().getHostName());}
catch(IOException e){
int x = 0;
while (true){
try {
showMessage("Sorry Your IP was not found, \nAutomatic detection:");
showMessage("Now trying again");
connection = new Socket(InetAddress.getByName(serverIP),6789);
break;
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
showMessage("\nConnection not established, trying again\n");
}
/*x++;
if(x>10) break;*/
}
//throw new Exception();
}
}
这确实有效,但需要大量处理和内存!
我知道通过添加 thread.sleep(5000),我最终会添加它们等等... 但这并不能解决内存问题。我的程序将运行很长时间,这并不能阻止不可避免的事情。
有没有更好的办法?
谢谢
P.S : showMessage() 只是我在 GUI 上显示输出的函数
我检查内存的方法是使用 Window 的任务管理器! (内存急剧增加)
【问题讨论】:
-
这似乎是问题
connection = new Socket(InetAddress.getByName(serverIP),6789);。即使连接不成功,它也会创建一个新的 Socket 连接对象而不清除它,这就是为什么你有太多的连接对象正在消耗你的内存。尝试在连接不可用时找到清除对象的方法。
标签: java client-server client