异步套接字连接,客户端 GUI 在服务器断开连接时挂起 TCP 通信
Async socket connection, Client GUI Hangs When Server is Disconnected TCP Communication
我正在使用 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 期间,我使用异步 Class 执行并从套接字接收文本到处理程序。在 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 中的客户端,它再次调用 while 循环,因此导致异常,因为套接字中没有接收到数据并导致异常。最后向客户端添加了一些睡眠,一段时间后客户端查询服务器,如果没有来自服务器的消息,客户端将关闭并转移到执行后功能。
我正在使用 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 期间,我使用异步 Class 执行并从套接字接收文本到处理程序。在 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 中的客户端,它再次调用 while 循环,因此导致异常,因为套接字中没有接收到数据并导致异常。最后向客户端添加了一些睡眠,一段时间后客户端查询服务器,如果没有来自服务器的消息,客户端将关闭并转移到执行后功能。