c#C/S实现文件的上传下载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#C/S实现文件的上传下载相关的知识,希望对你有一定的参考价值。

需要哪些方面的知识 有特定的组件么?谁有例子或者需要学习哪方面的知识啊?237676098@qq.com

用Socket, 服务端创建一个SocketServer,监听指定的端口,客户端连接到SocketServer,读取文件,进行数据通讯。 参考技术A OpenFileDialog
SaveFileDialog
通过System.IO.File保存数据或读取数据,通过byte[]传递数据
参考技术B 用vs.net自带的msdn查一下FTP,设计到FTP的构架和调用,很简单的

4.21---C/S架构,下载服务端文件练习

编写cs架构的软件,实现客户端可以下载服务端的文件,如图片、视频、文本等

服务端:

import socketserver
import os
import json
import struct

class MyRequestHandle(socketserver.BaseRequestHandler):
    def handle(self):
        # 如果tcp协议,self.request=>conn
        print(self.client_address)
        while True:
            try:
                file_name = self.request.recv(1024)
                # 拼接文件路径
                dir_name = os.path.dirname(__file__)
                file_path = os.path.join(dir_name,file_name)
                # 读取文件,若为空则返回空给客户端
                with open(file_path,mode="rb") as f:
                    res = f.read()
                    total_size = len(res)
                if total_size == 0:
                    res = "None".encode("utf-8")
                    total_size = len(res)
                    file_name = "Error:file has no content!"

                # 1、制作头
                header_dic = {
                    "filename": file_name,
                    "total_size": total_size,
                    "md5": "123123xi12ix12"
                }

                json_str = json.dumps(header_dic)
                json_str_bytes = json_str.encode(utf-8)

                # 2、先把头的长度发过去
                x = struct.pack(i, len(json_str_bytes))
                self.request.send(x)

                # 3、发头信息
                self.request.send(json_str_bytes)
                # 4、再发真实的数据
                self.request.send(res)

            except Exception:
                break
        self.request.close()

#  服务端应该做两件事
# 第一件事:循环地从半连接池中取出链接请求与其建立双向链接,拿到链接对象
s=socketserver.ThreadingTCPServer((0.0.0.0,8888),MyRequestHandle)
s.serve_forever()

客户端:

from socket import *

client=socket(AF_INET,SOCK_STREAM)
client.connect((39.97.179.91,8888))

while True:
    msg=input(请输入需要下载的文件名:).strip()
    if len(msg) == 0:continue
    client.send(msg.encode(utf-8))

    res=client.recv(1024)
    print(res.decode(utf-8))

 

以上是关于c#C/S实现文件的上传下载的主要内容,如果未能解决你的问题,请参考以下文章

c# c/s结构Socket上传文件的代码

asp.net网站如何实现 下载多个文件 或者下载某个文件夹,像bt那样的下载后文件夹里包含所需的多个文件

C# Winform 多线程 SOCKET 文件上传,下载

4.21---C/S架构,下载服务端文件练习

C#winform远程下载/读取文件夹里面的图片

html怎么实现网页中文件下载功能