我是靠谱客的博主 大意香氛,最近开发中收集的这篇文章主要介绍TCP下载文件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.从服务器上下载文件原理:当我们在浏览器/迅雷从服务器上下载文件时,它会在本地先建立一个文件,这个文件的名字跟想要下载的文件名字是一样的,然后从服务器读取到一点数据,就会write()到本地,一直这样循环,直至写完为止。
2.客户端发送下载文件请求:
1.创建套接字
2.链接服务器
3.发送下载文件请求
4.在本地创建一个文件名跟所要下载的文件名一样的文件
5.如果有数据,就创建新文件接收数据,否则,什么也不做
6.关闭

from socket import *


def main():

    # 创建socket
    tcp_client_socket = socket(AF_INET, SOCK_STREAM)

    # 目的信息
    server_ip = input("请输入服务器ip:")
    server_port = int(input("请输入服务器port:"))

    # 链接服务器
    tcp_client_socket.connect((server_ip, server_port))

    # 输入需要下载的文件名
    file_name = input("请输入要下载的文件名:")

    # 发送文件下载请求
    tcp_client_socket.send(file_name.encode("utf-8"))

    # 接收对方发送过来的数据,最大接收1024个字节(1K)
    recv_data = tcp_client_socket.recv(1024)
    # print('接收到的数据为:', recv_data.decode('utf-8'))
    # 如果接收到数据再创建文件,否则不创建
    if recv_data:
        with open("[接收]"+file_name, "wb") as f:
            f.write(recv_data)

    # 关闭套接字
    tcp_client_socket.close()


if __name__ == "__main__":
    main()

用vi编辑的客户端代码:

 1 from socket import *                                                       
  2 
  3 def main():
  4     txf=socket(AF_INET,SOCK_STREAM)
  5 
  6     ti=input("请输入服务器ip地址:")
  7     tport=int(input("请输入服务器端口地址:"))
  8     tadr=(ti,tport)
  9     txf.connect(tadr)
 10 
 11     filename=input("请输入要下载的文件名:")
 12     txf.send(filename.encode("gbk"))
 13 
 14     rec_data=txf.recv(1024*1024)
 15    
 16     if rec_data:
 		#为什么是“wb”,因为rec_data就是二进制格式,用了“wb”,所以就不需要在前面为rec_data进行解码了。
 17  		with open(filename,"wb") as f:
 18             f.write(rec_data)
 19     txf.close()
 20 
 21 
 22 if __name__=="__main__":
 23     main()

3.服务器传数据
1.socket创建一个套接字
2.bind绑定自己的ip和port
3.listen使套接字变为可以被动链接
4.accept等待客户端的链接
5.recv接收客户端发来的下载文件请求
6.读取数据
7.发送数据
8.关闭两个套接字。

vi编辑器程序:

  1 from socket import *                                   
  2 
  3 def send_file_2_client(new_client_socket,client_adr):
  4     file_name=new_client_socket.recv(1024).decode("utf-    8")
  5     print("客户端(%s)所要下载的文件是%s:"%(client_adr,f    ile_name))
  6 
  7     content=None
  8     #这里不能用with打开一个文件,因为你不知道服务器有没有该文件,with是在已有文件前提下,不会报错。
  9     try:
 10         f=open(file_name,"rb")
 11         content=f.read()
 12         f.close()
 13     except Exception as ret:
 14         print("打不开此文件%s:"%file_name)
 15 
 16     if content:
 17         new_client_socket.send(content)
 18     
 19 def main():
 20 
 21     srr=socket(AF_INET,SOCK_STREAM)
 22 
 23     srr.bind(("",8795))
 24 
 25     srr.listen(128)
 26     
 27     while True: 
 28         print("等待一个新的客户端程序:")
 29         new_client_socket,client_adr=srr.accept()
 30         send_file_2_client(new_client_socket,client_adr    )    
 31         new_client_socket.close()
 32     srr.close()
 33 
 34 
 35 if __name__=="__main__":
 36     main()  

最后

以上就是大意香氛为你收集整理的TCP下载文件的全部内容,希望文章能够帮你解决TCP下载文件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部