0%

简单socket编程和网路io

实验环境:
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连接其实不是一回事