python实现TCP远程服务器文件上传,下载系统

TCP服务器代码如下:

from socket import *


def client_upload(client_socket):
    """上传数据"""
    file_name = client_socket.recv(1024).decode('utf-8')
    print("客户端要上传的文件名为: %s" % file_name)
    file_content = client_socket.recv(1024)
    if file_content:
        try:
            with open(file_name, 'wb')as f:
                f.write(file_content)
            print("文件上传完成!")
        except Exception:
            print("文件已经存在!")
    else:
        print("客户端上传失败!")


def client_download(client_socket):
    """客户端下载数据"""
    file_name = client_socket.recv(1024).decode('utf-8')
    print("客户端要下载的文件名为: %s" % file_name)
    try:
        f = open(file_name, 'rb')
    except Exception:
        print("服务器没有此文件")
    else:
        file_content = f.read(1024)
        client_socket.send(file_content)
        print("文件已经发送个客户端")

def main():
    """tcp服务器主程序"""
    tcp_socket = socket(AF_INET, SOCK_STREAM)
    tcp_socket.bind(('', 8080))
    tcp_socket.listen(128)
    while True:
        print("等待新客户端连接")
        client_socket, client_addr = tcp_socket.accept()
        print("%s 已连接" % str(client_addr))
        while True:
            client_chioce = client_socket.recv(1024).decode('utf-8')
            print(client_chioce)
            if client_chioce == "1":
                # 客户端将向服务器上传数据
                print("客户端准备上传数据...")
                client_upload(client_socket)

            elif client_chioce == "2":
                # 客户端将从服务下载数据
                print("客户端准备下载数据...")
                client_download(client_socket)
            elif client_chioce == '3':
                # 客户端断开连接
                print("客户端准备断开连接...")
                client_socket.close()
                break
            else:
                # print("客户端发送了其他...")
                pass


if __name__ == '__main__':
    main()

TCP客户端代码:

from socket import *
import time

def client_sub(client_socket):
    """用户选择操作函数"""
    print("**" * 20)
    print("1:上传数据")
    print("2:下载数据")
    print("3:断开连接")
    client_pro = input("请选择你要的操作:")
    if client_pro == "1":
        client_socket.send(client_pro.encode('utf-8'))
        # 向服务器上传数据功能
        print("准备向服务器上传数据")
        send_file(client_socket)
    elif client_pro == "2":
        client_socket.send(client_pro.encode('utf-8'))
        # 从服务器下载数据
        print("准备从服务器下载数据")
        download_file(client_socket)
    elif client_pro == "3":
        client_socket.send(client_pro.encode('utf-8'))
        # 断开链接
        print("准备断开链接")
        client_socket.send("3".encode('utf-8'))
        client_socket.close()
        return "1"
    else:
        print("您输入的选项有误,请从新输入")
        client_sub(client_socket)

def send_file(client_socket):
    """客户端上传文件"""
    file_name = input("请输入您要上传的文件名")
    client_socket.send(file_name.encode("utf-8"))
    try:
        f = open(file_name,'rb')
    except Exception:
        print('没有此文件!')
    else:
        file_content = f.read(1024)
        f.close()
        client_socket.send(file_content)
        time.sleep(1)
        print("文件上传成功!")
        time.sleep(1)

def download_file(client_socket):
    """文件下载"""
    file_name = input("请输入您要下载的文件名")
    client_socket.send(file_name.encode("utf-8"))
    file_content = client_socket.recv(1024)
    if file_content:
        try:
            with open(file_name,'wb')as f:
                f.write(file_content)
            time.sleep(1)
            print("文件下载完成")
            time.sleep(1)
        except Exception:
            print("文件下载失败")
    else:
        print("服务器没有此文件")

def main():
    """tcp客户端主程序"""
    client_socket = socket(AF_INET,SOCK_STREAM)
    server_ip = input("请输入服务器IP:")
    server_port = int(input("请输入服务器的port:"))
    client_socket.connect((server_ip,server_port))
    print("连接服务器成功!")
    while True:
        pro = client_sub(client_socket)
        if pro == "1":
            break


if __name__ == '__main__':
    main()

猜你喜欢

转载自blog.csdn.net/weixin_44786231/article/details/89084337