我目前正在編寫用於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