使用NDK开发阻塞式socket客户端程序,recv读取数据无法关闭socket问题的解决
来源:互联网 发布:linux vsftpd 怎么使用 编辑:程序博客网 时间:2024/06/15 07:27
因近期开发的项目需要使用ndk开发socket客户端程序。ndk开发的库一共写了四个函数,
下面给出android中对四个函数的定义:
public native int ConnectTo(String ip, int port);
public native int SendData(int socketconnect,byte[] databuff,int datalen);
public native int RecvData(int socketconnect,byte[] databuff,int datalen);
public native int closeConnect(int socketconnect);
其中,在cpp文件的实现中,RecvData函数使用的recv是阻塞式的,一直处于等待接收状态,直至有数据接收进来。
在android中,开启一个新的线程中对RecvData进行调用,然而,处于等待状态的RecvData在运行时,
调用closeConnect时竟然无法关闭连接。这个问题害的我查了两天,一开始以为是线程写的有问题。多次试验发现,只要在线程中不调用RecvData就可以正常关闭。
后来查了几次资料才发现,在cpp的函数实现中,closeConnect调用close(sd);之前需要调用shutdown(sd,2);这样,就可以正常关闭连接了。
0 0
- 使用NDK开发阻塞式socket客户端程序,recv读取数据无法关闭socket问题的解决
- 关于 socket.recv 阻塞问题
- 非阻塞式的socket send recv
- linux socket阻塞recv
- socket使用TCP协议时,send、recv函数解析以及TCP连接关闭的问题
- socket使用TCP协议时,send、recv函数解析以及TCP连接关闭的问题
- socket使用TCP协议时,send、recv函数解析以及TCP连接关闭的问题
- socket使用TCP协议时,send、recv函数解析以及TCP连接关闭的问题
- 关于socket阻塞与非阻塞情况下的recv、seng、read、write返回值问题
- 关于socket阻塞与非阻塞情况下的recv、seng、read、write返回值问题
- 关于SOCKET的阻塞非阻塞recv和send
- 关于SOCKET的阻塞非阻塞recv和send
- [转]socket的send、recv阻塞设置阻塞超时时间
- socket的send、recv阻塞设置阻塞超时时间
- socket的send、recv阻塞设置阻塞超时时间
- socket的send、recv阻塞设置阻塞超时时间
- socket的send、recv阻塞设置阻塞超时时间
- socket、 send、recv、阻塞相关
- Spring注解学习(一)-构建简单Web应用
- 淘宝JAVA中间件Diamond详解(1)-简介&快速使用
- STL 堆 heap
- NYOJ 6 喷水装置(一)【贪心】
- 来自大数据的反思:需要你读懂的10个小故事
- 使用NDK开发阻塞式socket客户端程序,recv读取数据无法关闭socket问题的解决
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- 简单编码
- codeforce 140C
- 关于linux内核重要文件的基本描述
- C# 重写WndProc 拦截 发送 系统消息
- Qt 5.3 下OpenCV 2.4.11 开发(9)直方图均衡化
- 上海行——GameJam赛后小记
- 枚举用法详解