当前位置:  编程技术>移动开发

Android NDK中socket的用法以及注意事项分析

    来源: 互联网  发布时间:2014-10-19

    本文导语:  Android NDK中使用socket的整个过程分为以下几部分:第一部分: 创建socket并绑定IP和端口 代码如下:#include #include #include #define MAX_DATA_BUF_LEN 10240int sd = INVALID_SOCKET;sockaddr_in addr_org;  // 发送端地址sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);  ...

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入门之RelativeLayout、FrameLayout用法分析
  • Android入门之LinearLayout、AbsoluteLayout的用法实例讲解
  • Android中AutoCompleteTextView与MultiAutoCompleteTextView的用法
  • Android入门之Gallery用法实例解析
  • Android开发之时间日期组件用法实例
  • android中GridView的用法示例
  • Android Map新用法:MapFragment应用介绍
  • Android提高之SurfaceView的基本用法实例分析
  • android CursorLoader用法介绍
  • Android入门之AlertDialog用法实例分析
  • Android入门之PopupWindow用法实例解析
  • Android入门之Gallery+ImageSwitcher用法实例解析
  • Android中GPS定位的用法实例
  • Android提高之Service用法实例解析
  • Android控件ListView用法(读取联系人示例代码)
  • Android入门之Style与Theme用法实例解析
  • Android Intent的几种用法详细解析
  • Android中AsyncTask的用法实例分享
  • Android开发之AlarmManager的用法详解
  • Android提高之Activity+Intent用法示例
  • Android开发需要的几点注意事项总结
  • 关于Android WebView的loadData方法的注意事项分析
  • Android及andriod无线网络Wifi开发的几点注意事项
  • Android生存指南之:开发中的注意事项
  • Android 编程下字库的使用及注意事项
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 申请Android Map 的API Key(v2)的最新申请方式(SHA1密钥)
  • Android瀑布流实例 android_waterfall
  • android 4.0 托管进程介绍及优先级和回收机制
  • Android系统自带样式 (android:theme)
  • Android访问与手机通讯相关类的介绍
  • Android网络共享软件 Android Wifi Tether
  • Android 2.3 下StrictMode介绍
  • Android 图标库 Android GraphView
  • 轻量级Android开发工具 Android Tools
  • Android 开发环境 Android Studio
  • IDEA的Android开发插件 idea-android
  • Android手机事件提醒 Android Notifier
  • XBMC的Android客户端 android-xbmcremote
  • Android小游戏 Android Shapes
  • Android电池监控 Android Battery Dog
  • android开发:“android:WindowTitle”没有对应项no resource
  • Android 上类似IOS 的开关控件。 Android ToggleButton
  • Android 将 android view 的位置设为右下角的解决方法
  • Android 2D游戏引擎 Android Angle
  • Android的UI工具包 android-ui-utils
  • 白宫Android客户端 wh-app-android


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    Android访问与手机通讯相关类的介绍 iis7站长之家