TPC 网络通信基础(二)

文件下载利用 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   

将客户端中的代码写入其中

扫描二维码关注公众号,回复: 15257402 查看本文章

vim 服务器.py

将服务器端的代码写入其中

vim 文件.py

 将“  啊哈哈哈哈” 填入其中即可

当客户端向服务器发送下载文件.py的请求时,服务器会打开文件.py  这个文件 会读取里面的内容,将数据发送给客户端,客户端会创建一个 下载文件+ file_name文件 将传入的数据  '啊哈哈哈哈'写入到其中,保存起来

在结束完成交互后 通过命令执行  vim  下载文件文件.py  会发现刚才在服务器中打开的文件内容。 

交互操作模拟了下载流程

猜你喜欢

转载自blog.csdn.net/weixin_59131972/article/details/130664476
今日推荐