1.tcp
tcp协议是在传输层中
三次握手:
1.客户端向服务端发送连接服务端的请求
2.服务端回应请求,并发送连接客户端的请求(客户端向服务端通道建立)
3.客户端回应(服务端向客户端的通道建立)
SYN_SENT(状态):向服务端发送连接请求
SYNseq=x:SYN表示发送连接请求,x表示请求的标记
LISTEN(状态):等待接收请求
SYN_RCVD(状态):接收到请求以后,状态由LISTEN变为SYN_RCVD,
ACK=x+1:回复SYNseq=x的请求
SYNseq=y:发送请求连接,y作为标记
ESTABLISHED:服务端向客户端连接成功
ACK=y+1:回复y请求
ESTABLISHED:客户端向服务端连接成功
四次挥手:
1.客户端先传完数据,向服务端发送关闭连接请求
2.服务端回应请求(客户端向服务端通道关闭)
3.服务端传完数据以后向客户端发送关闭连接请求
4.客户端回应请求(服务端向客户端的通道关闭)
2.soket
2.1
import soket #导入包
#1.创建服务器scoket对象
phone=socket.socket(soccket.AF_INET,socket.SOCK_STREAM)
#2.设置服务器地址
phone.bind(('127.0.0.1',8080))
#设置连接管理列队(半连接池)
phone.listen(5)
#建立客户端服务连接
conn,client_addr=phone.accept()
#conn:双向连接对象,可以收发消息
#client:存放IP和端口的小元组
#5.收发数据
data=conn.recv(1024)#设置接收的最大字节数bytes为1024 ,data用来装收到的消息
conn.send(data.upper())#将收到的字符转为大写发出去
#6.断开客户端
conn.close()
#7.关闭服务器(这一步一般永远都不会执行)
phone.close()
import soket #导入包
#1.创建客户端socket对象
phone=socket.socket(soccket.AF_INET,socket.SOCK_STREAM)
#2.连接服务器地址
phone.connect(('127.0.0.1',8080))
#3.发\收数据
phone.send('hello'.encode('utf-8')) # 只能发bytes类型
data=phone.recv(1024)
print('收到服务端的消息: ',data.decode('utf-8'))
#4.关闭客户端
phone.close()