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。
阅读全文