zoukankan      html  css  js  c++  java
  • 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;
    }








  • 相关阅读:
    LeetCode 50: Pow(x, n)
    Codility 1: equilibrium
    LeetCode 49: Anagrams
    crackme160--(5)
    crackme160--(4)
    魔兽显血改键工具的脱壳和修改
    crackme160--(3)
    crackme160--(1)
    python-装饰器
    编程语言C++01-C++入门学习路线
  • 原文地址:https://www.cnblogs.com/jieruishu/p/9277912.html
Copyright © 2011-2022 走看看