30 UDP 、带颜色输出、重写socket类实现无需传入编码
一、UDP编码
1、
import socket sk = socket.socket(type=socket.SOCK_DGRAM) while 1: msg_s = input('>>>') sk.sendto(msg_s.encode('utf-8'),('127.0.0.1',8090)) msg_r,addr = sk.recvfrom(1024) print(msg_r.decode('utf-8')) sk.close()
import socket sk = socket.socket(type=socket.SOCK_DGRAM)# udp协议 sk.bind(('127.0.0.1',8090)) # 收发 while 1: msg_r, addr = sk.recvfrom(1024)# 接收来自于哪里的消息 print(msg_r.decode('utf-8'),addr) msg_s = input(('>>>')) sk.sendto(msg_s.encode('utf-8'),addr)# 发给谁的消息 sk.close()
2、署名的udp
import socket sk = socket.socket(type=socket.SOCK_DGRAM)# udp协议 name = input('请输入您的名字:') # 收发 while 1: msg_s = input(('>>>')) info = name + ' : ' + msg_s sk.sendto(info.encode('utf-8'), ('127.0.0.1',8090)) # 发给谁的消息 msg_r,addr = sk.recvfrom(1024)# 接收来自于哪里的消息 print(msg_r.decode('utf-8')) sk.close()
import socket sk = socket.socket(type=socket.SOCK_DGRAM)# udp协议 sk.bind(('127.0.0.1',8090)) # 收发 while 1: msg_r,addr = sk.recvfrom(1024)# 接收来自于哪里的消息 print(msg_r.decode('utf-8')) msg_s = input(('>>>')) sk.sendto(msg_s.encode('utf-8'),addr)# 发给谁的消息 sk.close()
二、print() 颜色输出
import socket sk = socket.socket(type=socket.SOCK_DGRAM)# udp协议 name = input('请输入您的名字:') # 收发 while 1: msg_s = input(('>>>')) info = name + ' : ' + msg_s sk.sendto(info.encode('utf-8'), ('127.0.0.1',8090)) # 发给谁的消息 msg_r,addr = sk.recvfrom(1024)# 接收来自于哪里的消息 print(msg_r.decode('utf-8')) sk.close()
import socket sk = socket.socket(type=socket.SOCK_DGRAM)# udp协议 sk.bind(('127.0.0.1',8090)) # 需求: 根据每个客户端的名字,去加上颜色 dic = {'alex':'\033[32m','金老板':'\033[33m','晓雪':'\033[35m'} # 收发 while 1: msg_r,addr = sk.recvfrom(1024)# 接收来自于哪里的消息 # 消息 alex : 我是SB msg_r = msg_r.decode('utf-8') name = msg_r.split(':')[0].strip() color = dic.get(name,'')# get(key,default) 获取字典中key对应的value,如果没有key则返回default print('%s %s \033[0m'%(color,msg_r)) msg_s = input(('>>>')) sk.sendto(msg_s.encode('utf-8'),addr)# 发给谁的消息 sk.close()
一些参数(颜色参数),尽量放服务端/
#格式: 设置颜色开始 :\033[显示方式;前景色;背景色m #说明: 前景色 背景色 颜色 --------------------------------------- 40 黑色 41 红色 42 绿色 43 黃色 44 蓝色 45 紫红色 46 青蓝色 47 白色 显示方式 意义 ------------------------- 终端默认设置 高亮显示 使用下划线 闪烁 反白显示 不可见 #例子: \033[1;31;40m <!--1-高亮显示 31-前景色红色 40-背景色黑色--> \033[0m <!--采用终端默认设置,即取消颜色设置-->
三、解决编码解码的问题
当我们用socket模块时,总要写入encoding='utf-8',贼麻烦,我不想老是写
from My_UDP import MySocket sk = MySocket() sk.my_sendto('abcabc中国',('127.0.0.1',8080)) sk.close()
from My_UDP import MySocket sk = MySocket() sk.bind(('127.0.0.1',8080)) msg,addr = sk.my_recvfrom(1024) print(msg) sk.close()
import socket class MySocket(socket.socket):# 继承自 socket文件中的socket类,此时socket就是父类 def __init__(self,encoding='utf-8'): self.encoding = encoding super(MySocket, self).__init__(type=socket.SOCK_DGRAM)# 执行父类socket中的__init__方法 def my_sendto(self,msg,addr): return self.sendto(msg.encode(self.encoding),addr)# 调用父类中的sendto方法 def my_recvfrom(self,num): msg_r,addr = self.recvfrom(num)# 调用父类的recvfrom方法 return msg_r.decode(self.encoding),addr