我目前正在编写用于android的客户端软件,它将重复发送请求到服务器。重新使用套接字并检测它何时需要重新建立
因为我认为每次发出请求时都会重新连接套接字是件很浪费的事情我试着开发一种方法,只要套接字处于活动状态并且当它死了,就会尝试一次重新建立联系。
这是我目前的解决方案:
class Foo
{
private Socket socket=null;
private OutputStream outStream=null;
private InputStream inStream=null;
public void someRequest() throws UnknownHostException, IOException
{
setupConnection();
// Do stuff with outStream and inStream here
}
private void setupConnection() throws UnknownHostException, IOException
{
try
{
if(socket!=null && socket.isConnected() && !socket.isClosed()) return;
if(outStream!=null) outStream.close();
if(inStream!=null) inStream.close();
socket = new Socket(SERVER_NAME,SERVER_PORT);
outStream = socket.getOutputStream();
inStream = socket.getInputStream();
}
catch(IOException e)
{
socket = null;
throw e;
}
}
}
的想法是,所有的IOExceptions将由外部代码调用someRequest方法抓住了,但是显然这意味着,有没有办法让我的Foo类知道该套接字需要重新连接!
我能想出的唯一解决方案是捕获someRequest中的异常,表示套接字已死并重新抛出异常,但是由于我加载了一些SomeRequest类型的方法,这看起来不是一个干净的解决方案。
谢谢。
我结束了这个解决方案,所以非常感谢你! – monoceres 2011-03-23 16:00:30