• 正点原子lwIP学习笔记——Socket接口TCP实验


    1. Socket接口TCP Client配置连接

    配置步骤如下所示:

    1. sin_family设置为AF_INET表示IPv4网络协议;
    2. sin_port为设置端口号;
    3. sin_addr. s_addr设置远程IP地址;
    4. 调用函数Socket创建Socket连接, 注意该函数的第二个参数SOCK_STREAM表示TCP连接SOCK_DGRAM表示UDP连接;
    5. 调用函数connect连接远程IP地址;
    6. 调用收发函数实现远程通讯 。

    2. Socket接口TCP Client实验

    例程功能:

    本实验使用Socket编程接口实现TCP Client客户端并可通过按键向所连接的TCP服务器发送数据,也能够接收来自TCP服务器的数据,并实时显示至LCD屏幕上 。

    首先需要宏定义IP_ADDR地址为PC的IP地址,可以直接设置,例如**“192.168.1.34”;然后设置接收缓冲的大小,端口号以及发送的优先级**;然后定义接收数据缓冲区以及发送数据的内容;数据发送的标志位也需要定义好;

    先来看接收线程:需要定义g_lwip_connect_state来表示连接情况;然后通过sockaddr_in的结构体atk_client_addr,来设置IP协议、IP地址和端口号,然后通过socket函数来进行Socket连接(这里需要选定UDP或者TCP,显然本实验是TCP);然后调用connect进行连接远程IP地址,成功后g_lwip_connect_state置1并进入while死循环;循环中调用recv来进行数据接收,然后通过xQueueSend发送邮箱给到LCD的显示任务显示接收数据;如果接收到关闭连接信号,调用closesocket关闭,并回到接收线程顶部继续等待连接;

    然后来看发送线程:在while死循环中继续进入while循环,如果flag标志位判断是发送信息,且Socket连接成功,则会调用write函数发送数据,发送后标志位清零;如果write失败,会跳出内部while进而调用closesocket关闭连接

    3. Socket接口TCP Server连接配置

    配置步骤如下所示:

    1. sin_family 设置为 AF_INET 表示 IPv4 网络协议;
    2. sin_port 为设置端口号;
    3. sin_addr.s_addr设置本地IP地址;
    4. 调用函数Socket创建Socket连接 ,注意:该函数的第二个参数SOCK_STREAM表示TCP连接,SOCK_DGRAM表示UDP连接;
    5. 调用函数bind绑定本地IP地址和端口号;
    6. 调用函数listen监听连接请求;
    7. 调用函数accept监听连接;
    8. 调用收发函数进行通讯 。

    4. Socket接口TCP Server实验

    例程功能:

    本实验使用Socket编程接口实现TCP服务器并可通过按键向连接的TCP客户端发送数据,也能够接收来自TCP客户端的数据,并实时显示至LCD屏幕上。

    与TCP Client的区别的地方这里会详细阐述:

    首先一样,通过sockaddr_in结构体的server_addr进行IP协议、地址和端口号的赋值,然后调用socket建立新的Socket连接;然后通过bind进行绑定本地IP地址和端口号

    之后,调用listen进行监听连接;进入接收线程的while,调用accept对监听到的连接进行请求,请求成功就会再次进入新的while;这其中调用recv接收消息,如果接收成功就调用xQueueSend发送邮箱,把缓冲区的地址发送给显示任务完成LCD的显示;如果接收到的是关闭请求,就会调用closesocket关闭连接

    然后是发送线程,这里就是调用send进行发送(也可以与Client实验一样的逻辑用write来写)。

    5. Socket接口TCP Server多连接

    主要是需要对客户端创建一个client_info的结构体记录socket的客户端数量以及对应的IP地址和长度;

    需要在lwip_demo中,while循环进行客户端创建连接的任务(OS创建),具体的步骤就是之前讲过的一些IP地址和端口号的操作。

    总结

    Socket接口的TCP实现同样很简单,大多数开发都是采用Socket接口完成以太网连接。

  • 相关阅读:
    SkyEye卫星篇-国的加强“芯”
    分布式应用之监控平台zabbix的认识与搭建
    Verilog中的系统任务(显示/打印类)--$display, $write,$strobe,$monitor
    基于Python开发的智能停车场车牌识别计费系统(源码+可执行程序+程序配置说明书+程序使用说明书)
    【FreeCodeCamp】 ResponsiveWebDesign网页设计 测试3学习笔记
    PHP脉聊交友系统网站源码,可通过广告变现社交在线聊天交友即时通讯APP源码,附带视频搭建教程
    Flink Kafka获取数据写入到MongoDB中 样例
    uniapp编写小程序解决富文本渲染图片空白间隙问题
    【C++】搜索二叉树底层实现
    sprinboot 引入 Elasticsearch 依赖包
  • 原文地址:https://blog.csdn.net/xhj12138/article/details/133324383