- 网络 udp
- 多任务 线程
- 多任务 线程、进程
- 网络 tcp
- 飞鸽传书 完善
- 多任务 协程
- 正则表达式
- 网络通信过程、http 协议
- Web 服务器 并发服务器
- WSGI、mini Web 框架
- 装饰器、mini Web 框架 路由
- MySQL 基本使用
- MySQL 查询
- MySQL 与 Python 交互
- mini Web 框架 添加 MySQL 功能
- 其它知识
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
飞鸽传书 下载文件
飞鸽传书-下载文件
FeiQTcp.py(部分修改)
# -------添加---------
def download_file(file_info):
"""下载文件"""
# 创建tcp套接字
client_tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 构建需要发送的请求数据
option = "%x:%x:%x" % (file_info['packet_id'], file_info['file_id'], 0)
request_info = FeiQSend.build_msg(FeiQCoreData.IPMSG_GETFILEDATA, option)
# 链接tcp服务器
client_tcp_socket.connect((file_info['dest_ip'], FeiQCoreData.feiq_port))
# 发送请求
client_tcp_socket.send(request_info.encode("gbk"))
# 新建文件,等待数据到来后,写入到文件中
f = open(file_info['file_name'] ,"wb") # 因为接收到的数据是二进制,需要使用wb
recv_data_length = 0
while True:
recv_data = client_tcp_socket.recv(1024)
if recv_data:
f.write(recv_data)
else:
break
# 如果接收到的数据超过了文件大小,那么也结束
recv_data_length += len(recv_data)
if recv_data_length >= file_info['file_size']:
break
f.close()
print("下载(%s)ok" % file_info['file_name'])
# -------修改---------
def get_file_msg_from_queue(file_queue):
"""从Queue 获取需要下载或者发送的文件信息"""
while True:
data_info = file_queue.get()
if data_info['type'] == "download_file":
# 下载文件请求
print("需要下载。。。。", data_info['data'])
# 使用tcp下载文件
download_file(data_info['data'])
elif data_info['type'] == "send_file":
# 发送文件请求
print("发送文件......", data_info['data'])
FeiQCoreData.send_file_list.append(data_info['data'])
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论