def recv(con, name): """ 功能: 接收用户发来的数据,并对其进行相应的处理 说明: info 为用户发送过来的字符串处理后生成的tuple,第一个参数name是用户名,第二个参数是一个dict对象,不同键值对应不同操作 info 的第二个参数中key-value对中对应关系为 'mess'-- 用户向好友发送消息,value为一个tuple,它的第一个参数为消息内容,第二个参数为信息的目的好友的name 'add' -- 添加一个好友的请求,value为待添加好友的name 'del' -- 删除一个好友的请求,value为待删除好友的name 'find' -- 搜索用户,value为一个用户名的模糊信息 """ global user try: while 1: info = eval( con.recv(1024).decode("utf-8") ) # (name,{'mess':(message,user),'add':'user','del':'user','find':'user'}) try: if "mess" in info[1] and info[1]["mess"][1] in user: toUser = info[1]["mess"][1] user[toUser].send(str((name, info[1]["mess"][0])).encode("utf-8")) elif "find" in info[1]: # 搜索好友 res = str({"ulist": User.findUsers(info[1]["find"])}) con.send(res.encode("utf-8")) elif "add" in info[1]: User.addUser(name, info[1]["add"]) con.send(str({"newUs": User.getUserNameList(name)}).encode("utf-8")) elif "del" in info[1]: res = User.delFriend(name, info[1]["del"]) con.send(str({"del": res}).encode("utf-8")) except: print("解析异常!") except: print("用户 " + name + " 下线 !") con.close() user.pop(name) # 弹出name