TCP协议,UDP协议
帅爆太阳的男人
1,TCP协议
- 回环地址:127.0.0.1(所有电脑都这一个默认回环地址)每个计算机都有这么一个本机地址只能被本机识别,不会被其他机器识别(因为你用这个地址传内容他就传不出去)
- TCP三次握手:一定是client先发起请求
- a:客户端发起请求连接服务器
- b:服务器返回:接收到请求,并要求连接客户端
- c:客户端回复:可以连接
- 四次握手:client和server谁发起断开请求都可以
- a:客户端发起断开连接的请求
- 意思是:我想和你断开连接,我没有数据要继续发送了,但是如果你有数据要继续发送,我可以继续接受
- b:服务器回复:我接收到你的请求了
- c:服务器发送:我已经准备好断开连接了
- d:客户端回复:收到你的信息,断开连接
- a:客户端发起断开连接的请求
2,UDP协议及编码
- sk = socket.socket(type = SOCK_DGRAM)
- UDP协议通信的优势:
- 允许一个服务器同时和多个客户端通信而TCP协议不行
- 2.1>普通UDP协议代码
import socket # 服务器 sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(("127.0.0.1",8008)) while 1: mas_s,addr = sk.resvfrom(1024) print(mas_s.decode("utf-8"),addr) message = sk.sendto(input(">>>").encode("utf-8"),addr) sk.close() # 当然程序执行不到这
import socket # 客户端 sk = socket.socket(type=socket.SOCK_DGRAM) while 1: mas_c = sk.sendto(input(">>>").encode("utf-8"),("127.0.0.1",8008)) mass = sk.resvfrom(1024) print(mass.decode("utf-8")) sk.close()
- 2.2>带署名的UDP协议(接收到的不在是IP地址,而是名字)
- 服务端:
import socket sk = socket.socket(type=SOCK_STREAM) sk.bind(("127.0.0.1",8008)) conn, addr = sk.accept() while 1: mas_s = sk.resvfrom(1024) print(mas_s.decode("utf-8"),addr) message = sk.sendto(input(">>>").encode("utf-8"))
-
- 客户端:
import socket sk = socket.socket(type=SOCK_DGRAM) name = input("name:") while 1: msg_c = input(">>>") info = name + ":" + msg_c sk.sendto(info.encode("utf-8"),("127.0.0.1",8008)) msg_r = sk.resvfrom(1024) print(msg_r.decode("utf-8"))
3,pycharm输出带颜色的操作
- 格式:\033[字体颜色:背景颜色m 数据 \033[0m
- 服务端
import socket sk = socket.socket(typr=socket.SOCK_DGRAM) sk.bind(("127.0.0.1",8008)) dic = {"alex":"\033[32m","金老板":"\033[33m","小雪":"\033[35m"} while 1: msg_r,addr = sk.recvfrom(1024) msg_r = msg_r.decode("utf-8") name = msg_r[0].strip() color = dic.get(name) print("%s %s\033[0m" % (color,msg_r)) msg_s = input(">>>") sk.sendto(msg_s.encode("utf-8")) sk.close()
- 客户端
import socket sk = socket.socket(type=socket.SOCK_DGRAM) name = input("请输入您的芳名:") while 1: msg_c = input(">>>") info = name + ":"+ msg_c sk.sendto(info.encode("utf-8"),("127.0.0.1")) msg_d,addr = sk.recvfrom(1024) print(msg_d.decode("utf-8")) sk.close()