1650|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

TCP/IP堆栈的初始化和配置网络应用程序的开发 [复制链接]

TCP/IP堆栈的初始化和配置

            在任何SOCKET应用程序建立之前,TCP/IP堆栈必须被正确的配置然后初始化。通常可以动态创建或者在DSP/BIOS中静态创建一个堆栈初始化任务,不管应用程序当中建立了多少SOCKET,在整个系统中只能有一个堆栈初始化任务,并且该任务会成为整个网络任务的唯一调度者,因此该任务在应用程序结束前不会返回。
  堆栈初始化过程:(1)使用NC_SystemOpen()。该函数为所有网络应用程序建立堆栈和内存环境;(2)使用CfgNew()。该函数会创建一个配置句柄,利用该句柄使用CfgAddEntry()函数可以添加DHCP、DNS、HTTP等服务和配置SOCKET缓冲区大小与ARP超时参数;(3)使用NC_NetStart()。该函数根据前面的配置参数启动网络,并创建三个回调函数,分别是网络启动时只运行一次的函数、网络被关闭时只运行一次的函数、当IP地址改变时运行的函数。通常会在启动函数里面创建自己的应用程序线程,在关闭函数里面删除创建的应用程序线程。
  
  网络应用程序的开发
  
  如果编程人员熟悉Windows平台的SOCKET的使用,那么在DSP平台上一样可以很容易的开发网络应用程序,甚至可以完全不需要了解硬件结构,因为NDK的API和Windows SOCKET API函数名和功能都是十分相近的。下面的程序采用DHCP协议动态获得IP,UDP协议传输数据,如下:
  //网络初始化
  NC_SystemOpen();
  hCfg = CfgNew();
  CfgAddEntry( hCfg,CFGTAG_SYSINFO,CFGITEM_DHCP_HOS
  TNAME,0,strlen(HostName),(UINT8 *)HostName,0);

……
  //配置DHCP协议动态获得IP
  CI_SERVICE_DHCPC dhcpc;
  bzero(&dhcpc, sizeof(dhcpc));
  dhcpc.cisargs.Mode = CIS_FLG_IFIDXVALID;
  dhcpc.cisargs.IfIdx = 1;
  dhcpc.cisargs.pCbSrv = &ServiceReport;
  CfgAddEntry(hCfg,CFGTAG_SERVICE,CFGITEM_SERVICE_D
  HCPCLIENT,0,sizeof(dhcpc),(UINT8 *)&dhcpc,0);
  ……
  //配置SOCKET缓冲区大小
  rc = 8704;
  CfgAddEntry(hCfg,CFGTAG_IP,CFGITEM_IP_SOCKBUFMAX,
  CFG_ADDMODE_UNIQUE,sizeof(uint),(UINT8 *)&rc,0);
  //启动网络服务
  do
  {rc = NC_NetStart(hCfg,NetworkOpen,NetworkClose,NetworkIPA
  ddr);
  } while(rc > 0);
  ……
  //配置应用层协议,本程序采用UDP
  SOCKET s;
  struct sockaddr_in sin1;
  s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  if(bind(s,(PSA) &sin1, sizeof(sin1)) < 0)

点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表