首页 文章

异步套接字连接,当服务器断开TCP通信时,客户端GUI挂起

提问于
浏览
0

我正在使用Tcp套接字进行CLR C(服务器)到Android(客户端)之间的通信,同时使用.Net For 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();
        }

我不明白从服务器发送Bye消息和(Backgroundworker1-> CancellationPending)关闭所有服务器套接字并关闭移动套接字为什么UI无响应?请帮忙..

1 回答

  • 0

    问题出在doinbackground中的Client中,它再次调用while循环,从而导致异常,因为套接字中没有收到任何数据并导致异常 . 最后给客户端添加了一些睡眠,一段时间后客户端查询服务器,如果没有来自服务器的消息,则客户端关闭并转移到postexecution函数 .

相关问题