实验环境:
ubuntu 24.04
vscode
gcc
1.socket
什么是socket?socket 本质上是:“操作系统提供的网络通信接口”,程序通过socket完成网络io复杂操作
—程序 <-> socket <-> 内核TCP/IP协议栈 <-> 网卡 <-> 网络
网络通信很复杂,因此需要设计出一套API供开发者使用。
2.利用socket通信的流程
建立连接
-服务端
1.创建socket
‘’’c/c++
‘’’
2.绑定端口和ip
‘’’c/c++
‘’’
3.监听
‘’’c/c++
‘’’
可以通过
‘’’bash
netstat -anop | grep {你监听的端口}
‘’’
来查看端口是否被监听
4.accept(等待连接,tcp在给个函数内完成三次握手)
注意!!!此时服务端会创建一个socket专门用于给连接的客户端通信,此前创建的socket是用于监听连接的
-客户端
1.创建socket
2.connect(连接服务端)
数据通信
1.发送数据send()
2.接收数据recv()
3.关闭连接close()此时发生四次挥手
注意!!!只有双方都close了才会彻底关闭tcp连接,一方close只代表不发送数据了但还是可以接收数据
改进
只能面对单个
总结:
1.端口被绑定不能被再次绑定
2.执行listen之后可以被连接(数据可以被发送但是无法被处理),并且会产生新的连接状态
3.此时虽然连接已经被建立的但仍然需要再创建一个socket进行通信
4.fd才是io,与tcp连接其实不是一回事