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'))
  • 相关阅读:
    团队的展示以及规划
    基于上次数独基础优化,并添加GUI界面
    利用程序随机构造N个已解答的数独棋盘
    本学期高级软件工程课程的实践项目的自我目标
    本学期高级软件工程课程的实践项目的自我目标
    案列分析
    编程作业
    构建之法
    软工一
    小黄衫获奖感言
  • 原文地址:https://www.cnblogs.com/pythonz/p/10067556.html
Copyright © 2011-2022 走看看