好久没有发博客了,但是也没闲着,最近疫情原因一直在家远程办公,分享一下今天的干货
先说需求:某个文件压缩之后可以供用户点击下载
没想到特别好的办法,在网上搜索大多都是通过socket实现的,然后我这个好久没写服务端和客户端的家伙开始了奋笔疾书,使劲粘贴,源码附上:
注意!!!启动时:先服务端,后客户端。 关闭时:先客户端后服务端
ps: 说明一下,服务端客户端端口应一致,因为我搞的时候有不正常释放端口的异常,所以频繁切换端口,最后往博客粘的时候出现了不一致端口,想要修改一下的,可是压缩起来的代码编辑时候是点不开的,就很愁哈哈不改了
服务端code:
import socket import os def serverSide(): # 在这里我将os.path的默认路径进行了更改,改到了/mnt/,从/mnt/路径下找文件下载 os.chdir("/mnt/") print(os.getcwd()) # 创建tcp服务端套接字 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定端口号,ip地址不绑定 tcp_server_socket.bind(("127.0.0.1", 3344)) # 程序结束,释放端口号,端口号复用 tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 设置监听,把主动套接字变成被动套接字,服务端套接字只负责接收客户端的连接请求 tcp_server_socket.listen(128) while True: # 创建信的套接字,等待接收客户端的连接请求 # clientSide() service_client_socket, ip_port = tcp_server_socket.accept() print("客户端连接成功了:", ip_port) # 接收客户端的请求信息 file_name_data = service_client_socket.recv(1024) print(file_name_data) # 对二进制数据进行解码 file_name = file_name_data.decode("utf-8") print(file_name) # 判断文件是否存在 if os.path.exists(file_name): # 文件存在 with open(file_name, "rb") as file: # 读取文件数据 while True: # 循环读取文件数据 file_data = file.read(1024) # 表示读到数据 if file_data: # 然后把数据发送给客户端 service_client_socket.send(file_data) else: print("请求的文件数据发送完成") break else: print("您请求下载的文件不存在") # 终止和这个客户端服务 service_client_socket.close() # 终止客户端连接请求服务, 服务端的套接字可以不用关闭 tcp_server_socket.close() if __name__ == '__main__': serverSide()