帅爆太阳的男人
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()