LWIP应用指南学习。
一 TCP接口函数:tcp_init() 必须在调用其它TCP函数之前调用,必须用一个硬件定时器来配置每TCP_FAST_INTERVAL (ms)调用一次tcp_fasttmr() ;每TCP_SLOW_INTERVAL (ms)调用一次tcp_slowtmr().
二 UDP接口函数:
2.1创建:struct udp_pcb *udp_new(void),对应的删除void udp_remove(struct udp_pcb *pcb),调用创建之后就不需要改网络连接来通讯了,删除以释放占用资源。
2.2绑定本地IP和端口号:err_t udp_bind(struct udp_pcb *pcb,struct ip_addr *ipaddr,u16_t port)
2.3将指定的PCB连接到远程主机(不收发任何网络数据)err_t udp_connect(struct udp_pcb *pcb,struct ip_addr *ipaddr,u16_t port),对应的是断开连接void udp_disconnect(struct udp_pcb *pcb)
2.4连接后就可以调用发送函数将pbuf数据通过PCB(指定的ip和端口号,如果没有指定该函数将随机分配一个端口号发送出去)发送出去,err_t udp_send(struct udp_pcb *pcb, struct pbuf *p)
2.5err_t udp_sendto(struct udp_pcb *pcb,struct pbuf *p,struct ip_addr *dst_ip,u16_t dst_port)相当于2.3和2.4的组合,如果在调用该函数之前调用了2.3,则2.3的端口和IP将被该函数覆盖。
2.6数据接收:void udp_recv(struct udp_pcb *pcb,void (* recv)(void *arg, struct udp_pcb *upcb,struct pbuf *p,struct ip_addr *addr,u16_t port),void *recv_arg)函数recv是收到数据时的回调函数需要自行设计,最后一个是回调函数的参数。
三UDP例子解析
3.1UDP客户端
struct pbuf *p;
p = pbuf_alloc(PBUF_RAW,sizeof(UDPData),PBUF_RAM);
p->payload=(void *)UDPData;//指定发送缓冲区
IP4_ADDR(&ipaddr,192,168,1,16);//设定远程服务器IP
UdpPcb = udp_new();
udp_bind(UdpPcb,IP_ADDR_ANY,1025); /* 绑定本地 IP 地址 和端口号*/
udp_connect(UdpPcb,&ipaddr,1025); /* 连接远程主机和端口 */
while(1)
{
udp_send(UdpPcb,p); //向远程服务器发送数据
。。。
}
3.2TCP_WebSever:
void http_init(void)
{
struct tcp_pcb *pcb;
pcb = tcp_new(); /* 建立通信的 TCP 控制块(pcb) */
tcp_bind(pcb,IP_ADDR_ANY,80); /* 绑定本地 IP 地址和固定端口号80 */
pcb = tcp_listen(pcb); /* 进入监听状态 */
tcp_accept(pcb,http_accept); /* 设置有连接请求时的回调函数 */
}
static err_t http_accept(void *arg,struct tcp_pcb *pcb,err_t err)
{
tcp_setprio(pcb, TCP_PRIO_MIN); /* 设置回调函数优先级,当 存在几个连接时特别重要 此函数必须调用*/
tcp_recv(pcb,http_recv); /* 设置 TCP 段到时的接收回调函数 */
err = ERR_OK;
return err;
}
3.3TCP客户端:
void TCP_Client_Init()
{
struct tcp_pcb *Clipcb;
struct ip_addr ipaddr;
IP4_ADDR(&ipaddr,192,168,1,16);//远端服务器IP
Clipcb = tcp_new(); /* 建立通信的 TCP 控制块(Clipcb) */
tcp_bind(Clipcb,IP_ADDR_ANY,1026); /* 绑定本地 IP 地址和端口号 */
tcp_connect(Clipcb,&ipaddr,1026,TcpCli_Connected);//有连接时的回调函数
}
err_t TcpCli_Connected(void *arg,struct tcp_pcb *pcb,err_t err)
{
tcp_write(pcb,TCP_TestData,sizeof(TCP_TestData),0); /* 客户端连接上主机后发送的测试数据 */
tcp_close(pcb);
return ERR_OK;
}
LWIP应用指南学习。的更多相关文章
- Hadoop权威指南学习笔记二
MapReduce简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.n ...
- 《JS权威指南学习总结》
JS权威指南学习总结:http://www.cnblogs.com/ahthw/category/652668.html
- 《JS权威指南学习总结--开始简介》
本书共分成了四大部分: 1.JS语言核心 2.客户端JS 3.JS核心参考 4.客户端JS核心参考 其中 <JS权威指南学习总结--1.1语法核心> 是:第一部分JS语言核心 各章节重点 ...
- Hadoop权威指南学习笔记一
Hadoop简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出.一起学习一起进步. 转载请注明:http://blog.csdn.net/ ...
- Hadoop权威指南学习笔记三
HDFS简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考.有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.net/my ...
- HTTP权威指南-学习笔记
目录 HTTP权威指南-学习笔记 HTTP: Web的基础 URL与资源 HTTP报文 连接管理 HTTP结构 Web服务器 代理 缓存 集成点: 网关,隧道及中继 Web机器人 识别,认证与安全 客 ...
- JavaScript 权威指南-学习笔记(一)
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! ## JavaScript 权威指南-学 ...
- CSS权威指南学习笔记系列(1)CSS和文档
题外话:HTML是一种结构化语言,而CSS是它的补充:这是一种样式语言.CSS是前端三板斧之一,因此学习CSS很重要.而我还是菜鸟,所以需要加强学习CSS.这个是我学习CSS权威指南的笔记,如有不对, ...
- lua游戏开发实践指南学习笔记1
本文是依据lua游戏开发实践指南做的一些学习笔记,仅用于继续自己学习的一些知识. Lua基础 1. 语言定义: 在lua语言中,标识符有非常大的灵活性(变量和函数名),只是用户不呢个以数字作为起始符 ...
随机推荐
- Git_学习_04_ 多人协作开发的过程
多人协作的工作模式通常是这样: 1.首先,可以试图用 git push origin branch-name 推送自己的修改: 2.如果推送失败,则因为远程分支比你的本地更新,需要先用 git pul ...
- bzoj3513
给定n个长度分别为$a_i$的木棒,问随机选择3个木棒能够拼成三角形的概率. $a_i$和$n$都在$10^5$以内 对于每一个i,我们统计比i短的边有多少组合能组成长度<=i的 用1减去这个概 ...
- 白痴qwerta的胡言乱语(一句话日度感想?
10.2 >我tm吹爆这个Latex插件!!!太漂亮了吧?!!! 10.3 >什么鬼气考试 还有这考试的大家也肽水了吧 >再吹一次这个Latex插件!!! 10.6 >今天在琢 ...
- 洛谷P3373线段树模板2
题目:https://www.luogu.org/problemnew/show/P3373 带乘的线段树,更新时把加的标记也乘一下,然后取值时先乘后加. 代码如下: #include<iost ...
- AndroidStudio启动时不自动打开项目
取消勾选Reopen last project on startup选项 点击 OK 就行了
- [hdu4738]求桥模板
oj问题,待修改,存档. #include<stdio.h> #include<iostream> #include<cstdio> #include<sta ...
- [poj1741]Tree(点分治+容斥原理)
题意:求树中点对距离<=k的无序点对个数. 解题关键:树上点分治,这个分治并没有传统分治的合并过程,只是分成各个小问题,并将各个小问题的答案相加即可,也就是每层的复杂度并不在合并的过程,是在每层 ...
- 反射获取窗体所有控件的Text
可以直接通过反射获取当前窗体的所有控件的Text(具有Text属性),具体代码如下: foreach (var field in form.GetType().GetFields(System.Ref ...
- js中push(),pop(),unshift(),shift()的用法
js中push(),pop(),unshift(),shift()的用法小结 1.push().pop()和unshift().shift() 这两组同为对数组的操作,并且会改变数组的本身的长度及 ...
- 利用JS函数制作时钟运行程序
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...