簡體   English   中英

異步套接字連接,服務器斷開連接時,客戶端GUI掛起TCP通信

[英]Async socket connection, Client GUI Hangs When Server is Disconnected TCP Communication

我將Tcp套接字用於CLR C ++(服務器)與Android(客戶端)之間的通信,而將.Net用於GUI。 在通信和接收數據時。 在C ++應用程序中使用后台工作器

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

在Android中,我正在使用異步類執行代碼,並從套接字接收文本到處理程序。 在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();
        }

我不明白從服務器發送“再見”消息時,並且(Backgroundworker1-> CancellationPending)所有服務器套接字都已關閉,而移動套接字已關閉,為什么UI沒有響應? 請幫忙..

問題出在doinbackground的Client中,該客戶端再次調用while循環,因此導致異常,因為套接字中未接收到任何數據並導致異常。 最后,為客戶端增加了一些睡眠,一段時間后,客戶端會查詢服務器,而如果沒有來自服務器的消息,則客戶端將關閉並轉移到執行后功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM