正点原子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接口完成以太网连接。

你可能感兴趣的:(lwIP学习,学习,笔记,tcp/ip,stm32,websocket,网络协议)