python基于tcp协议实现客户端从服务器进行文件下载

    用python实现一个机遇tcp协议的服务器和客户端,服务器存储文件,客户端从服务器请求文件下载,互相通信。

1.tcp协议的服务器实现

from socket import  *
import sys

def get_filecontent(file_name):

     '''方法的作用是读取文件内容给客户端'''
     try:
        with open(file_name,'rb') as f:
            content = f.read()
            return content
     except  FileNotFoundError :
         print("没有找到文件%s"%file_name)

def main():

    # 1.创建socket
    tcp_socket = socket(AF_INET,SOCK_STREAM)

    # 2.绑定服务器端口
    address = ("",7788)
    tcp_socket.bind(address)

    #3.将主动套接字改成被动模式
    tcp_socket.listen(128)

    while True:
        # 4.等待对方客户端连接
        client_socket ,client_addr = tcp_socket.accept()

        # 5.接受对方客户端的数据
        recv_data = client_socket.recv(1000000) #这个表示单次连接传输文件大小,用户根据实际自定
        file_name = recv_data.decode("utf-8")
        print("对方请求下载的文件名为:%s"%file_name)

        #调用上面的函数,实现读取文件内容
        file_content = get_filecontent(file_name)
        print(file_content)
        if file_content :
            client_socket.send(file_content)
            #  因为获取打开文件时是以rb方式打开,所以file_content中的数据已经是二进制的格式,因此不需要encode编码

        #关闭这个客户端套接字
        client_socket.close()

    #关闭监听套接字
    tcp_socket.close()

if __name__ == '__main__':
    main()

2.TCP实现客户端

from socket import *

def main():
    #1.创建客户端套接字
    tcp_client_socket =socket(AF_INET,SOCK_STREAM)

    #2.与服务器建立连接
    dest_server = ("127.0.0.1",7788)
    tcp_client_socket.connect(dest_server)

    # 3.数据发送,请求下载
    send_Msg = input("请输入需要下载的文件名称:")

    tcp_client_socket.send(send_Msg.encode("utf-8"))

    #4.数据接收 ,写入本地
    recv_Msg =  tcp_client_socket.recv(10000000000)  #因为这里是接收文件,所以将单此传输文件大小要设置的大一些。
   # print('接收到的数据为:', recv_Msg.decode('utf-8'))
    if recv_Msg:
        with open('aaa_copy.txt',"wb") as f : #注意,这里必须要是wb写入模式,否则乱码,因为打开是rb模式。
            f.write(recv_Msg)
        print("下载成功,请查看!")
    else :
        print("没有下载成功")
    #5.关闭套接字
    tcp_client_socket.close()

if __name__ == '__main__':
    main()

3.通信实现客户端从服务器端请求下载文件

1.先启动服务器程序,

2.再启动客户端程序,输入需要下载的文件名称 

D:\software\python3\python.exe D:/pythoyworkspace/d_demo.py
请输入需要下载的文件名称:aaa.txt
下载成功,请查看!

Process finished with exit code 0
对方请求下载的文件名为:aaa.txt

 3.最后在服务器当前目录下查看文件,注意存放在服务器上的文件,必须要在程序的当前目录下,不然找不到哈。

发布了248 篇原创文章 · 获赞 1600 · 访问量 267万+

猜你喜欢

转载自blog.csdn.net/qq_26442553/article/details/94477622