Python学习笔记(七)socket如何应用?
摘要:1.网络七层模型及主要协议 2.TCP的“三次握手”和四次挥手 三次握手 Step1:首先客户端向服务器端发送一段TCP报文; Step 2:服务器端接收到来自客户端的TCP报文之后,结束LISTEN阶段,并返回一段TCP报文; Step
1.网络七层模型及主要协议
2.TCP的“三次握手”和四次挥手
三次握手
Step1:首先客户端向服务器端发送一段TCP报文;
Step 2:服务器端接收到来自客户端的TCP报文之后,结束LISTEN阶段,并返回一段TCP报文;
Step 3:客户端接收到来自服务器端的确认收到数据的TCP报文之后,明确了从客户端到服务器的数据传输是正常的,结束SYN-SENT阶段,并返回最后一段TCP报文。
此后客户端和服务器端进行正常的数据传输。
四次挥手
Step 1:首先客户端想要释放连接,向服务器端发送一段TCP报文;
Step 2:服务器端接收到从客户端发出的TCP报文之后,确认了客户端想要释放连接,随后服务器端结束ESTABLISHED阶段,进入CLOSE-WAIT阶段(半关闭状态)并返回一段TCP报文;
Step 3:服务器端自从发出ACK确认报文之后,经过CLOSED-WAIT阶段,做好了释放服务器端到客户端方向上的连接准备,再次向客户端发出一段TCP报文;
Step 4:客户端收到从服务器端发出的TCP报文,确认了服务器端已做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT阶段,并向服务器端发送一段报文。
服务器端收到从客户端发出的TCP报文之后结束LAST-ACK阶段,进入CLOSED阶段。由此正式确认关闭服务器端到客户端方向上的连接。
3.socket
socket(简称 套接字)是进程间通信的一种方式,它与其它进程间通信的一个主要不同是:socket 可以实现不同机器间的进程通信。
下面是简单的Case,帮助理解。
客户端
from socket import socket, AF_INET, SOCK_STREAM
##表示创建一个客户端的socket
client = socket(AF_INET, SOCK_STREAM) ##SOCK_STREAM --表示TCP; SOCK_DGRAM--表示UDP;
##定义一个连接的目标
con_address = ('IP地址',端口号)
##告诉客户端要连接的服务器的地址和端口号
client.connect(con_address)
##发送data
client.send('python学习笔记'.encode('utf-8'))
##关闭
socket.close()
服务端,创建socket服务器
from socket import socket, AF_INET, SOCK_STREAM
##创建一个socket对象
server = socket(AF_INET, SOCK_STREAM)
##绑定端口号
server.bind('',端口号) ##第一个参数为空字符串时,表示本机的IP
##开启监听状态
server.listen(5) ###参数为整型,表示消息可堆积的数量。
while true:
socket, addr_info = server.accept() ##阻塞的,表示没有连接的时候,一直等待。返回值为socket 和 addr_info。wait for an incoming connection. Return a new socket representing the connection, and the address of the client. For IP sockets ,the address info is a pair (hostaddr,port).
##打印下
print(socket, addr_info)
##读取接受到的信息
recv_data = socket.recv(512).decode('utf-8') ##512是我们定义的bufsize.这个方法返回的是bytes。
