聊天程序

两个用户通过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'))

 

posted @ 2018-12-04 21:48  Python张梦书  阅读(106)  评论(0编辑  收藏  举报