2012-05-29 124 views
0

在我的位於android設備的服務器中,如果客戶端的數量超過特定數量,那麼服務器關閉套接字。但在我的客戶端(其他Android設備),我得到一個力量關閉。我如何優雅地處理它? 這裏是我的客戶機上的連接部分:優雅地處理socket.close()

serverIpAddress = serverIp.getText().toString(); 

    if (!serverIpAddress.equals("")) 
    { 
      try 
      { 
       InetAddress serverAddr = InetAddress.getByName(serverIpAddress); 
       SocketAddress sockaddr = new InetSocketAddress(serverAddr, 5000); 
       nsocket = new Socket(); 
       nsocket.connect(sockaddr);      
      }catch(Exception e){ 
       Log.i("Connect", "Connection Error"); 
      } 

      if (nsocket.isConnected()){ 
        score.setText("Your score is " + sc); 
        serverIp.setVisibility(View.GONE); 
        connectPhones.setVisibility(View.GONE); 
        enterIP.setVisibility(View.GONE); 
        Log.i("Connect", "Socket created, streams assigned"); 
        Log.i("Connect", "Waiting for inital data..." + nsocket.isConnected()); 
        receiveMsg(); 
      } 
+0

向通過套接字使用的協議添加一個關閉過程。因爲我們不知道你的協議是什麼,所以我們很難幫助你這麼做。也許服務器可能會發送客戶端「稍後再試」消息,然後客戶端將關閉套接字?這樣,只有當客戶端沒有響應時,服務器纔會關閉,並且通常它會乾淨地發生。 –

+0

還捕捉'異常'[通常被認爲是一個不好的做法](http://stackoverflow.com/questions/4716353/if-catching-null-pointer-exception-is-not-a-good-practice-is-catching -例外) – m0skit0

回答

0

繼續檢查插座的連接仍然是開放的或無限循環中不使用isClosed(),當服務器關閉其連接時,isClosed()獲取真實的,然後顯示一條消息或吐司,向用戶提供您想要的理由。

0

聽起來像你用來讀取套接字的任何東西都是阻塞讀取,並在套接字關閉時引發異常,並且在讀取時卡住。確保read是在try塊中,並使用catch/finally來正常退出當前正在執行的任何操作。

相關問題