一:相关API介绍

1.相关源码文件:usocket.h usocket.c

2.类型标志

   1:  #define USOCK_TCP 0
   2:  #define USOCK_UDP 1
   3:  #define USOCK_SERVER        0x0100
   4:  #define USOCK_NOCLOEXEC        0x0200
   5:  #define USOCK_NONBLOCK        0x0400
   6:  #define USOCK_NUMERIC        0x0800
   7:  #define USOCK_IPV6ONLY        0x2000
   8:  #define USOCK_IPV4ONLY        0x4000
   9:  #define USOCK_UNIX        0x8000
3.接口函数
/**
* 创建一个新的网络sock
*
* @param type - 类型标志
* @param host - 作为server表示绑定本地地址;作为client表示需连接的地址
* @param service - 端口
* @return - sock fd > 0; 错误 < 0
*/

int usock(int type, const char *host, const char *service);
 
二:实例
server代码
   1:  #include <stdio.h>
   2:  #include <stdlib.h>
   3:  #include <string.h>
   4:  #include <sys/types.h>          /* See NOTES */
   5:  #include <sys/socket.h>
   6:  #include <netinet/in.h>
   7:  #include <arpa/inet.h>
   8:  #include <libubox/usock.h>
   9:   
  10:  int main()
  11:  {
  12:      struct sockaddr_in cli_addr;
  13:      socklen_t len = sizeof(struct sockaddr);
  14:      int type = USOCK_TCP | USOCK_SERVER  | USOCK_NOCLOEXEC | USOCK_IPV4ONLY;
  15:      const char *host = "CarRadio";
  16:      const char *service = "8000";
  17:      char recv_buf[1024] = {0};
  18:      int connect_fd, u_fd = usock(type, host, service);    
  19:      if (u_fd < 0) {
  20:          perror("usock");
  21:          return -1;
  22:      }
  23:      while (1) {
  24:          connect_fd = accept(u_fd, (struct sockaddr *)(&cli_addr), &len);
  25:          if (connect_fd < 0) {
  26:              perror("accept");
  27:              return -1;
  28:          }
  29:          printf("client_addr: %s\n", inet_ntoa(cli_addr.sin_addr));
  30:          recv(connect_fd, recv_buf, 1024, 0);
  31:          printf("recv %s\n", recv_buf);
  32:          close(connect_fd);
  33:      }
  34:      
  35:      return 0;
  36:  }
  37:   
 
 

client代码:
   1:  #include <stdio.h>
   2:  #include <stdlib.h>
   3:  #include <string.h>
   4:  #include <sys/types.h>          /* See NOTES */
   5:  #include <sys/socket.h>
   6:  #include <libubox/usock.h> 
   7:   
   8:  int main()
   9:  {
  10:      struct sockaddr cli_addr;
  11:      socklen_t len = sizeof(struct sockaddr);
  12:      int type = USOCK_TCP  | USOCK_NOCLOEXEC | USOCK_IPV4ONLY;
  13:      const char *host = "CarRadio";
  14:      const char *service = "8000";
  15:      char recv_buf[1024] = {0};
  16:      int c_fd = usock(type, host, service);    /* create a linker socket*/
  17:      if (c_fd < 0) {
  18:          perror("usock");
  19:          return -1;
  20:      }
  21:      send(c_fd, "helloworld", 10, 0);
  22:      sleep(10);
  23:      close(c_fd);
  24:      return 0;
  25:  } 

 
 
makefile文件:
   1:  include $(TOPDIR)/rules.mk
   2:   
   3:  PKG_NAME:=usocket
   4:  PKG_RELEASE:=1.0.0
   5:   
   6:  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
   7:   
   8:  include $(INCLUDE_DIR)/package.mk
   9:   
  10:  define Package/$(PKG_NAME)
  11:      CATEGORY:=Utilities
  12:      SUBMENU:=Demo
  13:      DEPENDS:=+libubox
  14:      TITLE:= usocket test project.
  15:  endef
  16:   
  17:  define Package/$(PKG_NAME)/description
  18:      If you can't figure out what this program does, you're probably
  19:      brain-dead and need immediate medical attention.
  20:  endef
  21:   
  22:   
  23:  define Build/Prepare
  24:      mkdir -p $(PKG_BUILD_DIR)
  25:      $(CP) ./src/* $(PKG_BUILD_DIR)/
  26:  endef
  27:   
  28:  define Package/$(PKG_NAME)/install
  29:      $(INSTALL_DIR) $(1)/bin
  30:      $(INSTALL_BIN) $(PKG_BUILD_DIR)/userver $(1)/bin/
  31:      $(INSTALL_BIN) $(PKG_BUILD_DIR)/uclient $(1)/bin/
  32:  endef
  33:   
  34:  $(eval $(call BuildPackage,$(PKG_NAME)))
  35:   
  36:   

 
 
以上代码是一个简单的TCP测试代码
运行结果:
client_addr: 192.168.2.254
recv helloworld



libubox组件(1)——usock的更多相关文章

  1. libubox组件(3)——uloop

    一:uloop概述 uloop有三个功能: 文件描述符触发事件的监控,  timeout定时器处理, 当前进程的子进程的维护 二: uloop的整体框架 1: /** 2: * 初始化事件循环 3: ...

  2. openWrt libubox组件之uloop原理分析

    1.    libubox概述 libubox是openwrt新版本中的一个基础库,有很多应用是基于libubox开发的,如uhttpd,netifd,ubusd等. libubox主要提供以下两种功 ...

  3. libubox组件(2)——blob/blobmsg (转载 https://segmentfault.com/a/1190000002391970)

    一:blob相关接口 1.数据结构 1: struct blob_attr { 2: uint32_t id_len; /** 高1位为extend标志,高7位存储id, 3: * 低24位存储dat ...

  4. libubox

    lbubox是openwrt的一个核心库,封装了一系列基础实用功能,主要提供事件循环,二进制格式处理,linux链表实现和一些JSON辅助处理. 它的目的是以动态链接库方式来提供可重用的通用功能,给其 ...

  5. libubox-uloop

    参考:libubox组件(3)——uloop uloop是提供事件驱动机制接口,类似libevent事件框架,基于epoll接口来实现的. uloop三大功能:事件管理(uloop_fd).超时管理( ...

  6. ExtJS 4.2 评分组件

    上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...

  7. react组件的生命周期

    写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...

  8. react-router 组件式配置与对象式配置小区别

    1. react-router 对象式配置 和 组件式配置    组件式配置(Redirect) ----对应---- 对象式配置(onEnter钩子) IndexRedirect -----对应-- ...

  9. Angular2入门系列教程3-多个组件,主从关系

    上一篇 Angular2项目初体验-编写自己的第一个组件 好了,前面简单介绍了Angular2的基本开发,并且写了一个非常简单的组件,这篇文章我们将要学会编写多个组件并且有主从关系 现在,假设我们要做 ...

随机推荐

  1. Java高级架构师(一)第25节:实现前端的业务登录等功能

    package com.sishuok.architecture1; import javax.servlet.http.Cookie; import javax.servlet.http.HttpS ...

  2. ACM--输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。

    代码如下: #include <stdio.h> main() { char a,b,c,d; int i; scanf("%d",&i); getchar() ...

  3. IIS5/6/7 ASP.net 请求处理过程

    tks:http://www.cnblogs.com/TomXu/p/3756774.html 主要内容 本文讲解的是:服务器接受Http Request请求之后,是如何进入.Net CLR,从而进一 ...

  4. 加入新的linux系统调用

    上一篇详解了linux系统调用的原理,接下来依据上一篇的原理简介怎样创建新的linux系统调用 向内核中加入新的系统调用,须要运行3个步骤: 1. 加入新的内核函数 2. 更新头文件unistd.h ...

  5. Spark(十一) -- Mllib API编程 线性回归、KMeans、协同过滤演示

    本文测试的Spark版本是1.3.1 在使用Spark的机器学习算法库之前,需要先了解Mllib中几个基础的概念和专门用于机器学习的数据类型 特征向量Vector: Vector的概念是和数学中的向量 ...

  6. Windows下搭建Solr环境

    1.配置Java环境,可参考菜鸟教程:http://www.runoob.com/java/java-environment-setup.html (注意:在"系统变量"中设置3项 ...

  7. Linq-语句之Select/Distinct和Count/Sum/Min/Max/Avg

    上一篇讲述了LINQ,顺便说了一下Where操作,这篇开始我们继续说LINQ to SQL语句,目的让大家从语句的角度了解LINQ,LINQ包括LINQ to Objects.LINQ to Data ...

  8. Chrome 37 Beta: 使用Windows的DirectWrite和支持<dialog>元素

    今天的Chrome Beta 发布版包含了许多新的开发者特性.这些特性帮助你制作更丰富的.更迅速的和更引人入胜的网页内容以及应用程序,尤其是移动设备上.除非特别指出,否则下面描述的变化对Android ...

  9. 【codeforces #282(div 1)】AB题解

    A. Treasure time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  10. spring常用的一些注解以及注解注入总结

    常用的spring注解有如下几种: @Controller@Service@Autowired@RequestMapping@RequestParam@ModelAttribute@Cacheable ...