1 使用 Socket 接口编程

在 LwIP 中, Socket API 是基于 NETCONN API 之上来实现的,系统最多提供MEMP_NUM_NETCONN 个 netconn 连接结构,因此 Socket 套接字的个数也是那么多个,为了更好对 netconn 进行封装, LwIP 还定义了一个套接字结构体——lwip_sock(我称之为Socket 连接结构) , 每个 lwip_sock 内部都有一个 netconn 的指针, 实现了对 netconn 的再次封装。
LwIP 定义了一个 lwip_sock 类型的 sockets数组, 通过套接字就可以直接索引并且访问这个结构体了, 这也是为什么套接字是一个整数的原因。

1.1 Socket API

socket()
bind()
用于服务器端绑定套接字与网卡信息
connect()
它用于客户端中,将 Socket 与远端 IP 地址、端口号进行绑定,在
TCP 客户端连接中,调用这个函数将发生握手过程(会发送一个 TCP 连接请求),并最终建立新的 TCP 连接,而对于 UDP 协议来说,调用这个函数只是在 UDP 控制块中记录远端IP 地址与端口号,而不发送任何数据。
listen()
只能在 TCP 服务器中使用,让服务器进入监听状态,等待远端的连接请求, LwIP 中可以接收多个客户端的连接。
accept()
用于 TCP 服务端中,等待着远端主机的连接请求,并且建立一个新的 TCP 连接,在调用这个函数之前需要通过调用 listen()函数让服务器进入监听状态。 accept()函数的调用会阻塞应用线程直至与远程主机建立 TCP 连接。
read()、 recv()、 recvfrom()
sendto()
send()
end()函数可以用于 UDP 协议和 TCP 连接发送数据。在调用 send()函数之前,必须使用 connect()函数将远端主机的 IP 地址、端口号与 Socket 连接结构进行绑定。对于 UDP 会话, send()函数将调用 lwip_sendto()函数发送数据, 而对于 TCP 连接, 将调用netconn_write_partly()函数发送数据。
write()
这个函数一般用于处于稳定的 TCP 连接中传输数据,当然也能用于 UDP 协议中,它也是基于 lwip_send 上实现的,但是无需我们设置 flag 参数。
close()
close()函数是用于关闭一个指定的套接字,在关闭套接字后,将无法使用对应的套接字描述符索引到连接结构,如果连接是 TCP 协议,将产生一个请求终止连接的报文发送到对端主机中,如果是 UDP 协议,将直接释放 UDP 控制块的内容。

LWIP学习笔记7——使用 Socket 接口编程相关推荐

  1. Linux学习笔记(3)- 网络编程以及范例程序

    Linux学习笔记(3)- 网络编程以及范例程序 前言 网络介绍 IP地址的介绍 端口和端口号的介绍 通信流程 socket介绍 TCP介绍 python3编码转换 TCP客户端程序开发流程 多任务版 ...

  2. 【LWIP】LWIP协议|相关知识汇总|LWIP学习笔记

    这里作为一个汇总帖把,把以前写过的LWIP相关的博客文章汇总到一起,方便自己这边查找一些资料. 收录于: [LWIP]LWIP协议|相关知识汇总|LWIP学习笔记 LWIP协议 [LWIP]LWIP网 ...

  3. 《Go语言圣经》学习笔记 第七章 接口

    <Go语言圣经>学习笔记 第七章 接口 目录 接口是合约 接口类型 实现接口的条件 flag.Value接口 接口值 sort.Interface接口 http.Handle接口 erro ...

  4. 阿里云“7天实践训练营”入门班第二期学习笔记 第五天 在线编程挑战

    阿里云"7天实践训练营"入门班第二期学习笔记 第五天 在线编程挑战 吾辈,完全不会编程 以下内容全程来自阿里云社区的大佬分析讲解 原题目 知识点:搜索.字符串.位运算 有一天Jer ...

  5. Python自动化学习笔记(八)——接口开发、发送网络请求、发送邮件、写日志...

    1.接口开发(flask模块) Python自动化学习笔记(七)接口开发部分的内容补充 1.1参数为json格式: flask.request.is_json #判断参数是否是json格式 flask ...

  6. Java学习笔记(四)——接口

    Java学习笔记(四)--接口 1.格式 2.接口的特点 3.接口举例 1.格式 接口:初期理解,可以认为是一个特殊的抽象类.当抽象类中的方法都是抽象的,那么该类 可以通过接口的方式来表示. clas ...

  7. lwIP TCP/IP 协议栈笔记之十八: Socket接口编程

    目录 1. Socket 概述 2. LwIP 中的socket 3. Socket API 3.1 socket() 3.2 bind() 3.3 connect() 3.4 listen() 3. ...

  8. 网络编程学习笔记一:Socket编程

    "一切皆Socket!" 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. --有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信 ...

  9. LwIP学习笔记——STM32 ENC28J60移植与入门

    0.前言 去年(2013年)的整理了LwIP相关代码,并在STM32上"裸奔"成功.一直没有时间深入整理,在这里借博文整理总结.LwIP的移植过程细节很多,博文也不可能一一详解个别 ...

最新文章

  1. 特殊命令eval的用法两例
  2. Tech·Ed 2006博客园聚会
  3. Maven中的dependencyManagement 意义
  4. 比较器Comparable(内部比较器)和Comparator(外部比较器)
  5. php substr 去掉前n位_PHP全栈学习笔记16
  6. QDialog常用理解
  7. 1.1 了解web性能
  8. Demo分享丨看ModelArts与HiLens是如何让车自己跑起来的
  9. 什么是CGI 什么是 FastCGI 什么是 php-fpm
  10. 10个Python实战编程项目,有趣又好玩
  11. 清华山维EPS二次开发VBS基础篇
  12. 微软代码审查工具_微软代码审查的工作方式
  13. 英剧推荐【IT狂人】
  14. python从图片提取文字_用python提取图片文字
  15. 设置jupyter notebook文件保存位置
  16. 外星飞船CSS3动画代码
  17. PSINS工具箱15状态组合导航仿真程序(test_SINS_GPS_153)浅析-初始化设置
  18. java判断任意两数的最小公倍数和最大公约数
  19. 阶梯电价C语言PTA
  20. 蓝色easyui组件美化easyui皮肤html后台系统模版设计

热门文章

  1. 过冲、振铃 的消除方法
  2. Docker - Docker挂载mysql
  3. Linux下 prctl 进程控制
  4. socket 端口复用 linux,socket 端口复用
  5. Apollo详细介绍
  6. 数据大于long long最大值,处理方法 子串加法运算
  7. 2022 ICML | Pocket2Mol: Efficient Molecular Sampling Based on 3D Protein Pockets
  8. 1023: 东北串王数签子
  9. cmd命令行窗口运行py文件
  10. cd /home 和cd home的区别以及一些常用的linux的命令