• 聊天程序


    两个用户通过server进行消息传输

    server

    import socket
    import json
    sk = socket.socket(type=socket.SOCK_DGRAM)
    addr = ('127.0.0.1',9000)
    sk.bind(addr)
    dic={}
    cache_dic = {}
    while True:
        content,addr = sk.recvfrom(1024)
        msg = content.decode('utf-8')
        msg_dic = json.loads(msg)
        if msg_dic['operate':'online','qq':1]=='online':
            qq = msg_dic['qq']
            dic[qq]=addr
            if qq in cache_dic:
                for msg in cache_dic[qq]:
                    sk.sendto(msg, addr)#将缓存cache_dic中的消息发送给该qq
        elif msg_dic['operate'] == 'send_msg':
            to_qq = msg_dic['to_qq']
            if dic.get(to_qq):#说明接收消息的qq上线了
                sk.sendto(msg_dic['msg'].encode('utf-8'), dic[to_qq])
            elif to_qq in cache_dic:#除第一次以外的消息存在cache_dic[to_qq]中
                cache_dic[to_qq].append(msg_dic['msg'].encode('utf-8'))
            else:#第一次将消息存在cache_dic[to_qq]中
                cache_dic[to_qq] = [msg_dic['msg'].encode('utf-8')]

    client1

    import json
    import socket
    
    sk = socket.socket(type = socket.SOCK_DGRAM)
    addr = ('127.0.0.1',9000)
    # 发送上线通知
    info = {'operate':'online','qq':1}
    json_info = json.dumps(info)
    sk.sendto(json_info.encode('utf-8'),addr)  # 上线之后通知server
    
    # 给好友发送消息
    info = {'operate':'send_msg','to_qq':2,'msg':'你好'}
    json_info = json.dumps(info)
    sk.sendto(json_info.encode('utf-8'),addr)

    client2

    import json
    import socket
    
    sk = socket.socket(type = socket.SOCK_DGRAM)
    addr = ('127.0.0.1',9000)
    
    # 发送上线通知
    info = {'operate':'online','qq':2}
    json_info = json.dumps(info)
    sk.sendto(json_info.encode('utf-8'),addr)  # 上线之后通知server
    
    # 接收消息
    msg,addr = sk.recvfrom(1024)
    print(msg.decode('utf-8'))
  • 相关阅读:
    scala中 object 和 class的区别
    scala中的apply方法与unapply方法
    Scala中的样例类详解
    Scala 中下划线的一些魔法
    Hadoop搭建配置参数调优
    设置ESX/ESXi中(Linux)虚拟机从U盘引导启动
    CentOS下编译安装Busybox
    LRU算法简单实现
    Spark 3.0 动态分区裁剪(Dynamic Partition Pruning)
    Hive中的数据分桶以及使用场景
  • 原文地址:https://www.cnblogs.com/pythonz/p/10067556.html
Copyright © 2020-2023  润新知