文件下载利用 tcp原理
Ubuntu 20.04 python3.7
三个python文件 客户端.py 服务器.py 文件.py
客户端充当用户
服务器充当提供下载的服务端
客户端代码:
import socket
def main():
# 创建套接字
tcp_socket = socket.socket(socket.AF_INET,socket.SOCKET_STEAM)
#获取服务器的ip和地址
dest_ip = input("请输入服务器的ip: ")
dest_port = input("请输入服务器的port:")
#链接服务器
tcp_socket.connect((dest_ip,dest_port))
# 获取下载的文件名称
download_file_name = input("请输入要下载的文件名称")
# 将文件名称发送到服务器
tcp_socket.send(download_file_name.encode('utf-8'))
#接受文件中的数据
recv_data = tcp_socket.recv(1024*1024)
if recv_date:
# 保存接收到的数据到一个文件中
with open('下载内容' + download_file_name,'wb') as f:
f.write( recv_data)
# 关闭套接字
tcp_socket.close()
if __name__ == "main":
main()
# 服务器端:
def send_file_client(new_client_socket,client_addr):
#接收客户端法发来下载文件请求
file_name = new_client_socket.recv(1024).decode('utf-8')
#打印文件名称。
print('客户端%s需要下载的文件名称是%s'%(str(client_addr),file_name))
# 先定义content 为none 因为你不确定 有没有这个文件,假如没有
# try 中包裹的可能发生异常的代码中 file_content 变量 如果没有文件 说明对象f 执行报错,f后面的
#代码就不会被执行所以变量file_content 没有定义成功,那么在测试 if content : 是不是会报错啊
#所以我在最好在前面定义它为空,即便在try 中 它存在数据,但是请你记得python 的执行流程 他会覆盖掉空
#如果有则会判断有,如果没有 if file_content: 就会是noe,则不会向客户端会送数据,报出try 中没有文件的提示 不发送返回数据 关闭套接字
#打开文件读取数据
try:
f = open(file_name,'rb')
file_content = f.read()
except Exception as ret:
print("s%文件打开失败"% file_name)
#发送输入给客户端
# 如果打开 file_name 中存在数据将会给客户端返回收据
if file_content:
new_client_socket.send(file_content)
def main():
# 创建套接字
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_server_socket.bind(('',7788))
#让默认的套接字由主动变为被动listen
tcp_server_socket.listen(256)
while True:
new_client_socket,client_addr = tcp_server_socket.accept()
send_file_client(new_client_socket,client_addr)
new_client_socket.close()
# new_client_socket.close()只是关闭了为本次服务的套接字,等待开起下次服务
tcp_server_socket.close()
if __name__ == "__main__":
main()
文件.python
cd 桌面/opt/
vim 客户端.py
将客户端中的代码写入其中
vim 服务器.py
将服务器端的代码写入其中
vim 文件.py
将“ 啊哈哈哈哈” 填入其中即可
当客户端向服务器发送下载文件.py的请求时,服务器会打开文件.py 这个文件 会读取里面的内容,将数据发送给客户端,客户端会创建一个 下载文件+ file_name文件 将传入的数据 '啊哈哈哈哈'写入到其中,保存起来
在结束完成交互后 通过命令执行 vim 下载文件文件.py 会发现刚才在服务器中打开的文件内容。
交互操作模拟了下载流程