客户端下载

服务端:

import socket

def read_file_data(file_name):
    """获取指定文件的数据"""
    try:
        file = open(file_name, "rb")
    except Exception as e:
        print("文件不存在")
    else:
        # 如果文件太大 会有隐患
        file_data=file.read()
        file.close()

        return file_data

# 创建一个服务端套接字
server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 绑定端口
server_socket.bind(('',9999))

# 将套接字设置成监听模式(被动)
server_socket.listen(128)

while True:
    client_socket,client_address=server_socket.accept()
    print("接收到来自%s的文件下载请求" %str(client_address))

    # 接收文件名 读取本地文件地址
    file_name=client_socket.recv(4096)
    file_data=read_file_data(file_name)

    # 将读取到的文件发送给客户端
    if file_data:
        client_socket.send(file_data)

    # 关闭客户端关联的套接字
    client_socket.close()

客户端:

import os
import socket

# 1.创建一个本地套接字
tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 2.链接服务器
IP=input("服务端IP地址:")
port=int(input("服务端口号:"))

tcp_socket.connect((IP,port))

# 3.发送文件下载请求的文件名

file_name=input("请选择一个下载的文件名:")
tcp_socket.send(file_name.encode())

file=open("new_"+file_name,"wb")

# 记录已经写入文件的数据大小
had_write_len=0

while True:
    # 4.通过该链接 接收文件数据-->写入本地
    data=tcp_socket.recv(4096)
    if data:
        file.write(data)
        had_write_len+=len(data)
    else:
        # 5.文件传输完成
        # 对方关掉链接
        file.close()
        if had_write_len>0:
            print("文件传输完成")
        else:
            # 移除掉空文件
            print("服务器没有这个文件")
            os.remove("new_"+file_name)
        tcp_socket.close()

 

import os
import socket

# 1.创建一个本地套接字
tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 2.链接服务器
IP=input("服务端IP地址:")
port=int(input("服务端口号:"))

tcp_socket.connect((IP,port))

# 3.发送文件下载请求的文件名

file_name=input("请选择一个下载的文件名:")
tcp_socket.send(file_name.encode())

file=open("new_"+file_name,"wb")

# 记录已经写入文件的数据大小
had_write_len=0

while True:
# 4.通过该链接 接收文件数据-->写入本地
data=tcp_socket.recv(4096)
if data:
file.write(data)
had_write_len+=len(data)
else:
# 5.文件传输完成
# 对方关掉链接
file.close()
if had_write_len>0:
print("文件传输完成")
else:
# 移除掉空文件
print("服务器没有这个文件")
os.remove("new_"+file_name)
tcp_socket.close()
posted @ 2019-03-18 18:31  black娃  阅读(139)  评论(0编辑  收藏  举报