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()
c
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()
S

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()
C
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()
s

二、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()
C
import socket

sk = socket.socket(type=socket.SOCK_DGRAM)# udp协议
sk.bind(('127.0.0.1',8090))
# 需求: 根据每个客户端的名字,去加上颜色
dic = {'alex':'33[32m','金老板':'33[33m','晓雪':'33[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 33[0m'%(color,msg_r))
    msg_s = input(('>>>'))
    sk.sendto(msg_s.encode('utf-8'),addr)# 发给谁的消息

sk.close()
s

一些参数(颜色参数),尽量放服务端/

#格式:
  设置颜色开始 :33[显示方式;前景色;背景色m
#说明:
前景色            背景色           颜色
---------------------------------------
               40              黑色
               41              红色
               42              绿色
               43              黃色
               44              蓝色
               45              紫红色
               46              青蓝色
               47              白色
显示方式           意义
-------------------------
               终端默认设置
               高亮显示
               使用下划线
               闪烁
               反白显示
               不可见
 
#例子:
33[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()
UDP_C
from My_UDP import MySocket

sk = MySocket()

sk.bind(('127.0.0.1',8080))

msg,addr = sk.my_recvfrom(1024)


print(msg)

sk.close()
udp-s
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
MY_UDP
原文地址:https://www.cnblogs.com/zhuangdd/p/12688153.html