Android下的socket关闭问题
来源:互联网 发布:淘宝店铺号怎么弄 编辑:程序博客网 时间:2024/05/20 21:22
在项目中利用NIO进行建链过程,在建链和协议初始化完毕后,将socket改为block模式进行数据收发,但此后调用socket.close()后发现该socket并未断开,但客户端显示的socket状态,closed属性都正常。
经反复调试后,发现在socket上读取数据时,使用了DataInputStream,在socket关闭后,读数据线程仍阻塞在DataInputStream.Read_xxx()上,也就是说socket.close()并未引起该函数的异常,导致Android始终未真正断开socket。
在仔细阅读了Android的文档后,发现使用下述方法可完美断开socket:
Socket socket = instance.channel.socket(); if (socket != null) { socket.shutdownInput(); socket.shutdownOutput(); InputStream in = socket.getInputStream(); OutputStream ou = socket.getOutputStream(); try{ in.close(); ou.close(); } catch (IOException e) { } } //关闭socket instance.channel.socket().close(); //关闭channel instance.channel.close();比较关键的是前面shutdown部分,和流的关闭部分。最初是只有socket.close()和channel.close(),发现不对后,尝试加入了流的close(),发现仍不能触发DatainputStream.Read_xxx()返回后,尝试加入了shutdown操作,终于成功。!
- Android下的socket关闭问题
- android下socket编程问题:服务器关闭时,客户端发送请求的异常处理
- android下socket编程问题:服务器关闭时,客户端发送请求的异常处理
- 关于socket 关闭的问题
- Androin学习笔记四十四:android下socket编程问题:服务器关闭时,客户端发送请求的异常处理
- java socket 以及 流 关闭的问题
- Vxworks下检测关于socket连接关闭的问题-----拔掉网线或超时,自动断开
- Socket关闭问题
- Android平台下Socket编程中接收缓冲的问题
- 再谈一下Android下SOCKET通讯的编码问题
- Android 关闭硬件加速的问题
- c语言下,关闭socket的两种方式
- socket 的关闭
- 关于.net socket编程中客户端关闭的问题
- socket关闭后无法绑定端口的问题
- socket关闭后再new,再connect失败的问题
- Java socket中IO流的关闭问题
- javascript IE7下的关闭文件问题
- 客户端和服务端通讯的N种方式(一)
- Fxcop使用参考
- 一个简单的SQL语句拼装代码
- android 小常识(包含一些界面开发的推荐颜色和自定义按钮~)
- 探梦方寸间 移动终端CPU、GPU浅析
- Android下的socket关闭问题
- 客户端和服务端通讯的N种方式(二)
- 文件操作练习
- c# 多线程网络聊天程序
- HTML5基础,第4部分:点睛之笔Canvas
- 无法在 SQL Server 2005 Manger Studio 中录入中文的问题
- 如何查看ANDROID源码版本
- sql行列统计后,行列转换显示
- 关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”