博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LWIP学习笔记7——使用 Socket 接口编程
阅读量:4091 次
发布时间:2019-05-25

本文共 1161 字,大约阅读时间需要 3 分钟。

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 控制块的内容。

转载地址:http://gdnii.baihongyu.com/

你可能感兴趣的文章
CSS实例:Tab选项卡效果
查看>>
前端设计之特效表单
查看>>
前端设计之CSS布局:上中下三栏自适应高度CSS布局
查看>>
Java的时间操作玩法实例若干
查看>>
JavaScript:时间日期格式验证大全
查看>>
pinyin4j:拼音与汉字的转换实例
查看>>
XML工具代码:SAX从String字符串XML内获取指定节点或属性的值
查看>>
时间日期:获取两个日期相差几天
查看>>
责任链模式 Chain of Responsibility
查看>>
高并发与大数据解决方案概述
查看>>
解决SimpleDateFormat线程安全问题NumberFormatException: multiple points
查看>>
MySQL数据库存储引擎简介
查看>>
处理Maven本地仓库.lastUpdated文件
查看>>
Kafka | 请求是怎么被处理的?
查看>>
Java并发编程1-线程池
查看>>
CentOS7,玩转samba服务,基于身份验证的共享
查看>>
计算机网络-网络协议模型
查看>>
计算机网络-OSI各层概述
查看>>
Java--String/StringBuffer/StringBuilder区别
查看>>
mySQL--深入理解事务隔离级别
查看>>