网络编程UDP
UDP协议的通信优势:
允许一个服务器同时和多个客户端通信,TCP不行
服务器
import socket
sk=socket.socket(type=socket.SOCK_DGRAM)
sk.bind(("127.0.0.1",9999))
conn,addr=sk.recvfrom(1024)
print(conn.decode("utf-8"))
print(addr)
sk.close()
客户端
import socket
sk=socket.socket(type=socket.SOCK_DGRAM)
content=input(">>>")
sk.sendto(content.encode("utf-8"),("127.0.0.1",9999))
sk.close()
一个服务器同时与多个客户聊天
服务器 import socket sk=socket.socket(type=socket.SOCK_DGRAM) sk.bind(("127.0.0.1",9999)) while 1: conn,addr=sk.recvfrom(1024) print(conn.decode("utf-8"),addr) content=input(">>>") sk.sendto(content.encode("utf-8"),addr) sk.close() 客户端 import socket sk=socket.socket(type=socket.SOCK_DGRAM) while 1: content=input(">>>") sk.sendto(content.encode("utf-8"),("192.168.12.63",8090)) conn,addr=sk.recvfrom(1024) print(conn.decode("utf-8"),addr) sk.close()
署名聊天
服务器 import socket sk=socket.socket(type=socket.SOCK_DGRAM) sk.bind(("127.0.0.1",8888)) while 1: conn,addr=sk.recvfrom(1024) print(conn.decode("utf-8"),addr) content=input(">>>") sk.sendto(content.encode("utf-8"),addr) sk.close() 客户端 import socket sk=socket.socket(type=socket.SOCK_DGRAM) name=input("请输入你的名字:") while 1: content=input(">>>") use_name=name+":"+content sk.sendto(use_name.encode("utf-8"),("127.0.0.1",8888)) conn,addr=sk.recvfrom(1024) print(conn.decode("utf-8"),addr) sk.close()
pycharm输出带颜色:
\033[字体颜色;背景颜色m 数据 \033[0m
字体加颜色和背景色
print("abc")
print("\033[32m abc \033[0m")
print("\033[32;40m abc \033[0m")
#格式: 设置颜色开始 :\033[显示方式;前景色;背景色m #说明: 前景色 背景色 颜色 --------------------------------------- 40 黑色 41 红色 42 绿色 43 黃色 44 蓝色 45 紫红色 46 青蓝色 47 白色 显示方式 意义 ------------------------- 终端默认设置 高亮显示 使用下划线 闪烁 反白显示 不可见 #例子: \033[1;31;40m <!--1-高亮显示 31-前景色红色 40-背景色黑色--> \033[0m <!--采用终端默认设置,即取消颜色设置-->
print('\033[0;32;40m欢迎使用学生选课系统\033[0m') try: num = int(input('请输入数字选择功能 :')) except Exception as e: print('\033[31m对不起!您输入的内容有误~\033[0m')
print('\033[0;36m爆竹声中一岁除,') print('春风送暖入屠苏。') print('千门万户曈曈日,') print('总把新桃换旧符。\033[0m')
结果:
字体加颜色通信
服务器 import socket sk=socket.socket(type=socket.SOCK_DGRAM) sk.bind(("127.0.0.1",6666)) dic={"小明":"\033[32m","小红":"\033[33m","小李":"\033[35m"} while 1: conn,addr=sk.recvfrom(1024) conn=conn.decode("utf-8") name=conn.split(":")[0].strip() color=dic.get(name,'') print('%s %s \33[0m' % (color,conn)) content=input(">>>") sk.sendto(content.encode("utf-8"),addr) sk.close() 客户端 import socket sk=socket.socket(type=socket.SOCK_DGRAM) name=input("请输入你的名字:") while 1: content=input(">>>") use_name=name+":"+content sk.sendto(use_name.encode("utf-8"),("127.0.0.1",6666)) conn,addr=sk.recvfrom(1024) print(conn.decode("utf-8"),addr) sk.close()
字体带颜色加退出逻辑
服务器 import socket sk=socket.socket(type=socket.SOCK_DGRAM) sk.bind(("127.0.0.1",6666)) dic={"小明":"\033[32m","小红":"\033[33m","小李":"\033[35m"} while 1: conn,addr = sk.recvfrom(1024) conn = conn.decode("utf-8") name = conn.split(":")[0].strip() color = dic.get(name,'') print('%s %s \33[0m' % (color,conn)) if conn.split(":")[1] == "q": break content = input(">>>") sk.sendto(content.encode("utf-8"),addr) if content == "q": break sk.close() 客户端 import socket sk=socket.socket(type=socket.SOCK_DGRAM) name=input("请输入你的名字:") while 1: content=input(">>>") use_name=name+":"+content sk.sendto(use_name.encode("utf-8"),("127.0.0.1",6666)) if content == "q": break conn,addr=sk.recvfrom(1024) print(conn.decode("utf-8"),addr) if conn.decode("utf-8") == "q": break sk.close()