Socket通信是一种在网络中进行进程间通信的机制。它使用了一种称为套接字(Socket)的编程接口,通过该接口可以创建、连接、发送和接收数据等操作。
Socket通信中,有两个主要的角色:服务器和客户端。服务器负责监听指定的端口,等待客户端的连接请求;而客户端则主动发起连接请求,与服务器建立连接。
创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),
网络7层协议架构图
1. socket则是对TCP/IP协议的封装和应用
科普|OSI七层网络协议 - 知乎
Socket通信中的Tcp协议三次握手(建立连接)和四次挥手(断开连接)是建立和断开连接的过程。
-
三次握手:建立连接过程
- 客户端调用
socket()
函数创建一个套接字,并调用connect()
函数向服务器发起连接请求。 - 服务器端调用
socket()
函数创建一个套接字,并调用bind()
函数绑定IP地址和端口号,然后调用listen()
函数监听连接请求。 - 客户端发送一个SYN(同步数据包)包给服务器,表示请求建立连接。
- 服务器收到SYN包后,发送一个SYN-ACK(同步-确认)数据包)包给客户端,表示同意建立连接。
- 客户端收到SYN-ACK包后,发送一个ACK(确认数据包)包给服务器,表示连接建立成功。
- 客户端调用
-
四次挥手:关闭连接过程
- 客户端调用
close()
函数关闭连接。 - 客户端发送一个FIN包(结束数据包)给服务器,表示要关闭连接。
- 服务器收到FIN包后,发送一个ACK包给客户端,表示收到了关闭请求。
- 服务器调用
close()
函数关闭连接。 - 服务器发送一个FIN包给客户端,表示服务器也要关闭连接。
- 客户端收到FIN包后,发送一个ACK包给服务器,表示收到了关闭请求。
- 客户端调用
socket实现通信在应用层面(代码层面)大致需要完成以下几个步骤:
服务器端:
第一步:建立一个用于通信的Socket对象
第二步:使用bind绑定IP地址和端口号
第三步:使用listen监听客户端
第四步:使用accept中断程序直到连接上客户端
第五步:接收来自客户端的请求
第六步:返回客户端需要的数据
第七步:如果接收到客户端已关闭连接信息就关闭服务器端
客户端:
第一步:建立一个用于通信的Socket对象
第二步:根据指定的IP和端口connet服务器
第三步:连接成功后向服务器端发送数据请求
第四步:接收服务器返回的请求数据
第五步:如果还需要请求数据继续发送请求
第六步:如果不需要请求数据就关闭客户端并给服务器发送关闭连接信息
1.Socket通信案例:
配置启动项目
服务器程序
客户端程序
案例2:socket控制拍照功能