文件下载器客户端
import socket def main():
# 1.创建一个tcp socket
tcp_client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #2. 连接服务端
tcp_client_socket.connect(('127.0.0.1',9999)) #3. 获取用户输入的文件名
file_name=input("请输入要下载的文件名:") # 4. 把要下载的文件名发给服务端
tcp_client_socket.send(file_name.encode()) #5. 等待接收服务端回传的文件内容
recv_data=tcp_client_socket.recv(1024*1024) # 一次最多接收1M字节
print(recv_data) #6. 假如内容不为空,则写入到文件中
if recv_data:
with open("/home/python/Desktop/"+file_name,"wb") as f:
f.write(recv_data) #7. 关闭tcp socket
tcp_client_socket.close() if __name__ == '__main__':
main()
文件下载器服务端
import socket def get_file_content(file_name):
"""通过文件名取得文件内容"""
try:
# 打开文件,读取数据 www.png
file=open(file_name,"rb")
content=file.read()
file.close()
return content
except:
print("%s下载的文件找不到"%file_name) def main():
# 1. 创建服务端的socket,用来做监听的
server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 复用端口
server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True) # 2. 绑定端口
server_socket.bind(('',9999)) # 3. 开启监听 listen
server_socket.listen(5) # 4. 循环接收客户端的下载请求
while True:
new_sock,client_addr=server_socket.accept()
print("有新的下载请求,来自-->",client_addr) #5. 获取客户端发送过来的要下载的文件名
recv_data=new_sock.recv(1024) # 取得要下载的文件名
# 把字节串转为字符串
file_name=recv_data.decode() # 6.通过函数取得要下载的文件的内容
file_content=get_file_content(file_name) # 7. 把内容回传给客户端
if file_content:
new_sock.send(file_content) # 8. 关闭与客户端对接的socket
new_sock.close()
#9. 关闭服务端server_socket,不再接收新的下载文件的请求
server_socket.close() if __name__ == '__main__':
main()