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