elif json_data['chat_type'] == "private": recv_user = json_data['recv_user'] send_user = json_data['send_user'] if json_data['message_type'] != "file-data": s.sendto(data, user[recv_user]) # 发送data和address到客户端 else: filename = json_data['file_name'] data_size = int(json_data['file_length']) print('文件大小为' + str(data_size)) recvd_size = 0 data_total = b'' j = 0 while not recvd_size == data_size: j = j + 1 if data_size - recvd_size > 1024: data, addr = s.recvfrom(1024) recvd_size += len(data) print('第' + str(j) + '次收到文件数据') else: # 最后一片 data, addr = s.recvfrom(1024) recvd_size = data_size print('第' + str(j) + '次收到文件数据') data_total += data
时间: 2024-02-10 07:20:55 浏览: 66
yy.rar_4 3 2 1_按键音乐
这段代码是在UDP协议的服务器程序中,处理私聊消息的逻辑。
如果接收到的消息类型是"private",表示有客户端发送私聊消息。服务器会根据消息中的接收者和发送者信息,将该私聊消息发送给对应的客户端。如果该私聊消息类型不是"file-data",则直接将消息发送给接收者。如果是"file-data"类型,表示发送的是文件数据,服务器会根据消息中的文件大小和文件名等信息,逐片接收并拼接文件数据,直到接收完整个文件。
需要注意的是,代码中使用了Python内置的socket库实现了UDP协议的通信,通过字典类型的数据结构存储了聊天室中的在线用户列表。同时,为了支持文件传输,代码还实现了逐片接收文件数据的功能。
阅读全文