与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的用法以及注意事项分析相关推荐

  1. android源码settings中显示所有正在运行进程流程分析

    下面我要分享一下这几天看源码中获得正在运行进程的简单流程: 也就是图中所看到的 首先我们看到的是settings下的application(应用程序)下的manageApplication(管理应用程 ...

  2. python中socket模块常用吗_python中socket模块详解

    socket模块简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常被叫做"套接字",用于描述IP地址和端口,是一个通信 ...

  3. python print函数用法_Python3.2中Print函数用法实例详解

    本文实例讲述了Python3.2中Print函数用法.分享给大家供大家参考.具体分析如下: 1. 输出字符串 >>> strHello = 'Hello World' >> ...

  4. Linux之make的用法讲解,linux中make的用法

    1.linux中make的用法 目的: 基本掌握了make 的用法,能在Linux系统上编程. 环境: Linux系统 准备: 准备三个文件:file1.c, file2.c, file2.h fil ...

  5. java中用法实例_java中Calendar类用法实例详解

    本文实例讲述了java中Calendar类用法.分享给大家供大家参考,具体如下: java中的Calendar在开发中经常被忽略,这篇博客总结一下这个类,对后面项目中使用时期的时候有帮助. Calen ...

  6. python socket接收图像 数据_python中socket接受数据的三种方法 | 学步园

    原位置:http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/408859 Description: An issue with socket ...

  7. python中函数用法教程_Python中zip()函数用法实例教程

    一.定义: zip([iterable, ...])zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuple ...

  8. c语言中 d的用法,C语言中的#define用法总结

    1.宏定义 格式: #define   标识符(也称为宏名)   替换列表 例如; #define PI 3.14 以上代码就是定义了一个宏.  宏的名称为PI, 我们在使用的时候,会在编译预处理时, ...

  9. java中toarray()的 用法_java容器中toArray的用法

    请高手帮我看看toArray的用法其返回的是哈希码是不是需要重写importjava.util.*;publicclassTest1{publicstaticvoidmain(String[]args ...

最新文章

  1. 使用dd命令复制ASM磁盘的spfile
  2. linux驱动开发要知道的那些知识(三)------container_of,定时器 及系统调用
  3. GitHub上最受欢迎的Android开源项目TOP20
  4. 2010年基于Linux的10大技术趋势
  5. 从宝马与京东携手,透视汽车后市场变革
  6. 动感灯箱制作流程培训_2000多年的灯箱发展史,你知道多少?
  7. python dataframe 重命名列_Python-重命名pandas列
  8. mac remix导入本地项目
  9. 视屏剪辑软件(Pr)Premiere Pro CC 2018安装教程:
  10. 【原】豆瓣电台桌面版——Win7任务栏支持+托盘+快捷键+历史记录
  11. word中html在哪,如何word中显示部分的域代码在哪
  12. centos6 安装 directAdmin
  13. Java个人职业规划目标改进_java个人职业发展方向规划范文
  14. 子线程与主线程之间的通信
  15. 调用COM控件的时候(例如访问数据库)出现类型不匹配。
  16. uni-app使用Hbuilder X如何苹果手机IOS打包、发布、运行
  17. 计算机网络中 数据交换的方式有,计算机网络中的通信数据交换技术探讨
  18. 测试用例设计方法与举例说明
  19. C++ snprintf的使用
  20. 当元气森林卖咖啡,能否再造一个爆款?

热门文章

  1. git mysql差异备份_结合Git实现Mysql差异备份,可用于生产环境
  2. ug断开视图断开线的距离_UG编程刀路优化技巧
  3. java对象克隆的例子_Java对象克隆
  4. creo数控编程怎么样_邹军:通过数控宏程序实现刀具寿命管理
  5. Arcgis导入KMZ/KML文件的方法
  6. Linux常用命令拾遗
  7. jquery获取div/div之间的内容.text() 和 .html()区别
  8. ORACLE的分布式管理
  9. ModelCoder中的代数环问题
  10. 如何给小朋友解释单摆运动_单摆的教案