• 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
  • 相关阅读:
    MFC对话框编程四:输入焦点的传递
    lua笔记 一个C++调用lua函数的类的实现
    [置顶] 设计模式之享元模式
    扩展实现PHP Benchmark
    TLD如何运行OpenTLD(TLD_HY20121127)
    [Oracle] Kill Session 经验总结
    php 该如何获取从百度搜索进入网站的关键词
    php+js实现百度地图多点标注的方法
    laraveladmin 报错 Disk [admin] not configured, please add a disk config in `config/filesystems.php`....
    PHP获取当前页面的url
  • 原文地址:https://www.cnblogs.com/zhuangdd/p/12688153.html
Copyright © 2020-2023  润新知