2015-12-13 84 views
0

我使用Tcp套接字在CLR C++(服務器)與Android(客戶端)之間進行通信,而對於GUI使用.Net。 傳輸和接收數據。在下使用背景工人++應用異步套接字連接,服務器斷開連接時,客戶端GUI掛起TCP通信

if(backgroundworker1->CancellationPending) 
       { 
        listenerSocket->Close(); // Listener Socket is Closed 
        netStream->Close(); 
        serverSocket->Close(); 
        serverSocket->Shutdown(SocketShutdown::Both); 
        e->Cancel; 
        break; 
       } 

雖然Android中我使用異步類用於執行,並接收來自插座文本到一個Handler。而在Doinbackground函數中,我正在使用此代碼。

 try 
     { 

      socket = new Socket(dstAddress, dstPort); 
      BufferedReader inputStream = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      do 
      { 
       try 
       { 
        if (!inputStream.ready()) 
        { 
         if (message != null) 
          { 
           MainActivity.handler.obtainMessage(0, 0, -1,"Server: " + message).sendToTarget(); 
          message = ""; 
         } 
        } 
        int num = inputStream.read(); 
        message += Character.toString((char) num); 
        Log.e(message,message); 
       } 
       catch (Exception classNot) 
       { 
        Log.e("Client TASK","classnot exception"); 
       } 
      } 

      while (!message.equals("bye")); 
      inputStream.close(); 
      socket.close(); 
     } 

我不明白,雖然我從服務器發送BYE消息和(Backgroundworker1-> CancellationPending) 所有服務器套接字被關閉和移動插座被關閉,爲什麼是UI不響應?請幫助..

回答

0

問題出在doinbackground中的客戶端它再次調用while循環因此導致異常,因爲在套接字中沒有收到數據並導致異常。最後給客戶端增加了一些睡眠,一段時間後客戶端查詢服務器,而如果沒有來自服務器的消息,客戶端關閉並轉移到後處理功能。

相關問題