socket android用法,Android NDK中socket的用法以及注意事项分析
与Java层中的套接字相比,本机层中的Socket可以选择更多的配置项,并获得关于当前拥塞状态的更准确的信息,那么 NDK中socket的用法以及注意事项分析,大家清楚吗?下文是爱站技术频道小编为大家介绍的,请一起去看看吧。
Android NDK中使用socket的整个过程分为以下几部分:
第一部分: 创建socket并绑定IP和端口
#include
#include
#include
#define MAX_DATA_BUF_LEN 10240
int sd = INVALID_SOCKET;
sockaddr_in addr_org; // 发送端地址
sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // 创建socket
addr_org.sin_family = AF_INET;
addr_org.sin_addr.s_addr = inet_addr("192.128.0.1"); // 发送端IP
addr_org.sin_port = htons(8080); // 发送端端口
bind(sd, (struct sockaddr *)&(addr_org), sizeof(struct sockaddr_in)); // 绑定IP和端口
第二部分: 发送数据
sockaddr_in addr_dst; // 接收端地址
addr_dst.sin_family = AF_INET;
addr_dst.sin_addr.s_addr = inet_addr("192.128.0.2"); // 接收端IP
addr_dst.sin_port = htons(8080); // 接收端端口
... // 生成要发送的数据到SendDataBuff, 长度为ulLen
sendto(sd, SendDataBuff, ulLen, 0, (struct sockaddr *)&(addr_dst), sizeof(sockaddr_in)); // 发送SendDataBuff中的数据
第三部分: 在线程中接收数据(非阻塞式)
void *SocketReceiveThread(void *pParam)
{
fd_set fdset;
struct timeval delayval;
unsigned long lRetVal;
delayval.tv_sec = 0;
delayval.tv_usec = 5000; /*5ms延时*/
while (!end_flag)
{
FD_ZERO(&fdset);
FD_SET(sd, &fdset);
lRetVal = select(sd+1, &fdset, NULL, NULL, &delayval); // 尤其要注意第一个参数
if (0 == lRetVal)
{
continue;
}
else if (SOCKET_ERROR == lRetVal)
{
break;
}
else if (FD_ISSET(sd, &fdset) != 0)
{
char RecvDataBuff[MAX_DATA_BUF_LEN]; // 接收数据buffer
unsigned long ulLen = recvfrom(sd, RecvDataBuff, MAX_DATA_BUF_LEN, 0, NULL, NULL);
... // 处理接收到的数据
}
}
}
第四部分: 关闭socket
close(sd);
以上就是Android NDK中socket的用法以及注意事项分析,如果你还想了解更多的Android知识,欢迎你随时来爱站技术频道学习,相信我们的内容一定会让你满意。
socket android用法,Android NDK中socket的用法以及注意事项分析相关推荐
- android源码settings中显示所有正在运行进程流程分析
下面我要分享一下这几天看源码中获得正在运行进程的简单流程: 也就是图中所看到的 首先我们看到的是settings下的application(应用程序)下的manageApplication(管理应用程 ...
- python中socket模块常用吗_python中socket模块详解
socket模块简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常被叫做"套接字",用于描述IP地址和端口,是一个通信 ...
- python print函数用法_Python3.2中Print函数用法实例详解
本文实例讲述了Python3.2中Print函数用法.分享给大家供大家参考.具体分析如下: 1. 输出字符串 >>> strHello = 'Hello World' >> ...
- Linux之make的用法讲解,linux中make的用法
1.linux中make的用法 目的: 基本掌握了make 的用法,能在Linux系统上编程. 环境: Linux系统 准备: 准备三个文件:file1.c, file2.c, file2.h fil ...
- java中用法实例_java中Calendar类用法实例详解
本文实例讲述了java中Calendar类用法.分享给大家供大家参考,具体如下: java中的Calendar在开发中经常被忽略,这篇博客总结一下这个类,对后面项目中使用时期的时候有帮助. Calen ...
- python socket接收图像 数据_python中socket接受数据的三种方法 | 学步园
原位置:http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/408859 Description: An issue with socket ...
- python中函数用法教程_Python中zip()函数用法实例教程
一.定义: zip([iterable, ...])zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuple ...
- c语言中 d的用法,C语言中的#define用法总结
1.宏定义 格式: #define 标识符(也称为宏名) 替换列表 例如; #define PI 3.14 以上代码就是定义了一个宏. 宏的名称为PI, 我们在使用的时候,会在编译预处理时, ...
- java中toarray()的 用法_java容器中toArray的用法
请高手帮我看看toArray的用法其返回的是哈希码是不是需要重写importjava.util.*;publicclassTest1{publicstaticvoidmain(String[]args ...
最新文章
- 使用dd命令复制ASM磁盘的spfile
- linux驱动开发要知道的那些知识(三)------container_of,定时器 及系统调用
- GitHub上最受欢迎的Android开源项目TOP20
- 2010年基于Linux的10大技术趋势
- 从宝马与京东携手,透视汽车后市场变革
- 动感灯箱制作流程培训_2000多年的灯箱发展史,你知道多少?
- python dataframe 重命名列_Python-重命名pandas列
- mac remix导入本地项目
- 视屏剪辑软件(Pr)Premiere Pro CC 2018安装教程:
- 【原】豆瓣电台桌面版——Win7任务栏支持+托盘+快捷键+历史记录
- word中html在哪,如何word中显示部分的域代码在哪
- centos6 安装 directAdmin
- Java个人职业规划目标改进_java个人职业发展方向规划范文
- 子线程与主线程之间的通信
- 调用COM控件的时候(例如访问数据库)出现类型不匹配。
- uni-app使用Hbuilder X如何苹果手机IOS打包、发布、运行
- 计算机网络中 数据交换的方式有,计算机网络中的通信数据交换技术探讨
- 测试用例设计方法与举例说明
- C++ snprintf的使用
- 当元气森林卖咖啡,能否再造一个爆款?
热门文章
- git mysql差异备份_结合Git实现Mysql差异备份,可用于生产环境
- ug断开视图断开线的距离_UG编程刀路优化技巧
- java对象克隆的例子_Java对象克隆
- creo数控编程怎么样_邹军:通过数控宏程序实现刀具寿命管理
- Arcgis导入KMZ/KML文件的方法
- Linux常用命令拾遗
- jquery获取div/div之间的内容.text() 和 .html()区别
- ORACLE的分布式管理
- ModelCoder中的代数环问题
- 如何给小朋友解释单摆运动_单摆的教案