【发布时间】:2017-09-13 14:17:24
【问题描述】:
我有一个客户端应用程序和一个服务器应用程序。客户端应用程序通过 java.net.Socket(协议 = TCP)向服务器应用程序发送数据包。在 Socket.Close() 上,我的服务器应用程序立即向我显示连接已关闭 - 这就是它必须正常工作的方式。注意:整个 tcp-streaming 逻辑在辅助活动中,这就是为什么我使用 onBackPressed() 函数来完成整个 tcp-streaming 并切换到主要活动。
工作场景:
@Override
public void onBackPressed(){
m_socket.Close();
finish();
}
如前所述,套接字关闭,服务器立即通知连接已关闭。
不工作的场景,因为 Socket.close() 似乎太慢了:
@Override
public void onBackPressed(){
m_socket.Close();
m_wifiManager.disconnect();
finish();
}
此方案仅在 20% 的情况下正常工作。在另外 80% 的情况下,我的服务器应用程序通知连接以 大延迟 关闭。在我看来,这是因为 tcp-socket 需要关闭时间 - 所以进程被 wifi-connection 断开中断,并且无法正确关闭套接字 (#)。作为我观点的证明:如果我逐步调试,这个场景在 100% 的情况下都有效。服务器立即通知。
我已经尝试过什么也不能正常工作:
m_wifiManager.disconnect()inonPause()m_wifiManager.disconnect()inonDestroy()
所以我的问题是:
我的意见 (#) 正确吗?是否没有及时关闭套接字?
我该如何解决这个问题?这样 tcp-socket-closure 会正确完成,就像在第一个场景中一样,然后 wifi 断开连接?
【问题讨论】:
-
您向我们展示的是客户端代码还是服务器代码?我假设客户?
标签: java android sockets wifimanager onbackpressed