zoukankan      html  css  js  c++  java
  • 聊天程序

    两个用户通过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'))
  • 相关阅读:
    [译]《Sphinx权威指南》
    sphinx 配置文件全解析
    利用 crontab 來做 Linux 固定排程
    http协议中用于上传多个文件的 multipart 字段
    Python 代码覆盖率统计工具 coverage.py
    Disruptor 基础篇
    NPM:常用命令的生命周期脚本
    十大经典排序算法(动图演示)【转】
    TypeScript Jest 调试
    NPM: 日常开发环境配置
  • 原文地址:https://www.cnblogs.com/pythonz/p/10067556.html
Copyright © 2011-2022 走看看