广州致远电子有限公司工程技术笔记TCP/IP协议栈应用V0.01Date:2008/10/27LwIP的RAWAPI接口及编程指南类别内容关键词LwIP,RAWAPI摘要本文详细讲述了LwIP在无操作系统支持环境下的API函数介绍及编程应用。首先,介绍了RAWAPI的特点及优缺点,然后逐个介绍了LwIP提供的所有的RAWAPI函数,最后通过实例的形式介绍了这些API函数具体编程的方法。NoteTechnical广州致远电子有限公司TCP/IP协议栈应用LwIPRAWAPI的接口及编程指南修订历史版本日期原因V0.002008/10/10创建文档V0.012008/10/27修改了UDP服务器的程序。因为作为服务器的主机并不一定要预先知道客户机的IP地址及端口号,本版本程序从回调函数的参数中获取了远程客户机的IP地址及端口号等信息。工程技术笔记©2008GuangzhouZHIYUANElectronicsCO.,LTD.i广州致远电子有限公司TCP/IP协议栈应用LwIPRAWAPI的接口及编程指南销售与服务网络(一)广州周立功单片机发展有限公司地址:广州市天河北路689号光大银行大厦12楼F4邮编:510630电话:(020)3873091638730917387309723873097638730977传真:(020)38730925网址:广州专卖店地址:广州市天河区新赛格电子城203-204室电话:(020)8757863487569917传真:(020)87578842南京周立功地址:南京市珠江路280号珠江大厦2006室电话:(025)836132218361327183603500传真:(025)83613271北京周立功地址:北京市海淀区知春路113号银网中心A座1207-1208室(中发电子市场斜对面)电话:(010)625361786253617982628073传真:(010)82614433重庆周立功地址:重庆市石桥铺科园一路二号大西洋国际大厦(赛格电子市场)1611室电话:(023)6879643868796439传真:(023)68796439杭州周立功地址:杭州市天目山路217号杭州电子科技大楼502室电话:(0571)281396112813961228139613传真:(0571)28139621成都周立功地址:成都市一环路南二段1号数码同人港401室(磨子桥立交西北角)电话:(028)8543983685437446传真:(028)85437896深圳周立功地址:深圳市深南中路2070号电子科技大厦C座4楼D室电话:(0755)83781788(5线)传真:(0755)83793285武汉周立功地址:武汉市洪山区广埠屯珞瑜路158号12128室(华中电脑数码市场)电话:(027)871684978716829787168397传真:(027)87163755上海周立功地址:上海市北京东路668号科技京城东座7E室电话:(021)530834525308345353083496传真:(021)53083491西安办事处地址:西安市长安北路54号太平洋大厦1201室电话:(029)878812968306300087881295传真:(029)87880865工程技术笔记©2008GuangzhouZHIYUANElectronicsCO.,LTD.ii广州致远电子有限公司TCP/IP协议栈应用LwIPRAWAPI的接口及编程指南销售与服务网络(二)广州致远电子有限公司地址:广州市天河区车陂路黄洲工业区3栋2楼邮编:510660传真:(020)38601859网址:(嵌入式系统事业部)(工控网络事业部)(楼宇自动化事业部)技术支持:CAN-bus:电话:(020)226443812264438222644253邮箱:can.support@embedcontrol.comiCAN及模块:电话:(020)2887234422644373邮箱:ican@embedcontrol.comMiniARM:以太网及无线:电话:(020)2887268428267813电话:(020)226443802264438522644386邮箱:miniarm.support@embedtools.com邮箱:wireless@embedcontrol.comethernet.support@embedcontrol.com编程器:分析仪器:电话:(020)22644371电话:(020)226443752887262428872345邮箱:programmer@embedtools.com邮箱:tools@embedtools.comARM嵌入式系统:楼宇自动化:电话:(020)28872347288723772264438322644384电话:(020)226443762264438928267806邮箱:arm.support@zlgmcu.com邮箱:mjs.support@ecardsys.commifare.support@zlgmcu.com销售:电话:(020)22644249226443992264437222644261288725242887234228872349288725692887257338601786维修:电话:(020)22644245工程技术笔记©2008GuangzhouZHIYUANElectronicsCO.,LTD.iii广州致远电子有限公司TCP/IP协议栈应用LwIPRAWAPI的接口及编程指南目录1.简介...........................................................................................................................12.RAWAPI参考手册...................................................................................................22.1简介——回调函数...................................................................................................22.2应用程序状态设置函数...........................................................................................22.3建立TCP连接函数...................................................................................................22.4TCP数据发送函数...................................................................................................52.5TCP数据接收函数...................................................................................................62.6应用程序轮询工作原理及相关函数.......................................................................62.7关闭与中止连接的函数...........................................................................................72.8底层TCP接口...........................................................................................................82.9UDP接口函数...........................................................................................................83.应用程序实例.........................................................................................................123.1UDP服务器通信实例.............................................................................................123.2UDP客户端通信实例.............................................................................................143.3WEB服务器实例....................................................................................................163.4TCP客户端通信实例.............................................................................................19工程技术笔记©2008GuangzhouZHIYUANElectronicsCO.,LTD.1广州致远电子有限公司TCP/IP协议栈应用LwIP的RAWAPI接口及编程指南1.简介LwIP为我们提供了两种应用程序接口(API函数)来实现TCP/IP协议栈,它们分别是:¾low-levelcore/callbackorrawAPI.——低水平的、基于回调函数的API(后面直接称RAWAPI)¾higher-levelsequentialAPI.——高水平的、连续的API(后面直接称sequentialAPI)在使用LwIP栈编程的时候,sequentialAPI为我们提供了一种通用的方法,它与BSD标准的socketAPI非常相似,程序的执行过程同样是基于open-read-write-close模型的。从本质上讲,TCP/IP协议栈的通信过程是事件驱动的,因此,TCP/IP的代码和用户应用程序的代码,应该在不同的线程里面。下面,这篇文档的剩余部分我们来讨论RAWAPI,关于sequentialAPI的编程使用方法作者也有一个专门的说明文档,读者可以查阅相关的文档,这里不做介绍。使用RAWAPI进行TCP/IP编程,可以使应用程序的代码和TCP/IP协议栈的代码很好地结合起来。程序的执行机制是以回调函数为基础的事件驱动的,同时回调函数也是被TCP/IP代码直接调用的。TCP/IP代码和应用程序的代码运行在同一个线程里面。sequentialAPI接口函数则是一种高起点的函数,它不适合于应用在比较小的嵌入式系统中,因为它的实现要求应用程序必须支持多线程。RAWAPI接口函数不仅在程序代码的执行时间上更快,而且在运行中它也占用更少的内存资源。唯一的缺点是应用程序的编写比较困难,并且代码较难理解。尽管如此,在CODE和RAM都较小的嵌入式系统中,这也是我们优先考虑采用的方法。当然,在不同的应用程序中,这两种API我们可以同时采用。实际上,seque