C# 建立Ftp服务器

    class FtpDevRealsenseCtl
    {
        static string RunningPath = AppDomain.CurrentDomain.BaseDirectory;
        string image_file_path = RunningPath + @"\..\..\Images\";  //正常图片所在路径 
        private frmExposureProcessing _mainForm = null;
        private Thread ftpthread = null;
        public FtpDevRealsenseCtl(frmExposureProcessing main_form)
        {
            _mainForm = main_form;
        }
        public void startFtpServer()
        {
            ftpthread = new Thread(new ThreadStart(ftpinit));
            ftpthread.Start();
        }
        public void stopFtpServer()
        {
            ftpthread.Abort();
        }
        public class TestMembershipProvider : IMembershipProvider
        {

            public Task<MemberValidationResult> ValidateUserAsync(string username, string password)
            {
                if (username == "admin" && password == "admin")
                {
                    var identity = new ClaimsIdentity();
                    identity.AddClaim(new Claim(ClaimTypes.Name, username));
                    identity.AddClaim(new Claim(ClaimTypes.Role, "admin"));
                    return Task.FromResult(new MemberValidationResult(MemberValidationStatus.AuthenticatedUser, new ClaimsPrincipal(identity)));

                }

                return Task.FromResult(new MemberValidationResult(MemberValidationStatus.InvalidLogin));
            }
        }

        public void ftpinit()
        {

            // 设置依赖项注入
            //  var services = new ServiceCollection();
            //var mockMembershipProvider = new MockMembershipProvider();
            var services = new ServiceCollection();
            // 使用%TEMP%/TestFtpServer作为根文件夹
            services.Configure<FubarDev.FtpServer.FileSystem.DotNet.DotNetFileSystemOptions>(opt => opt
                .RootPath = image_file_path);

           // IServiceProvider serviceProvider = services.BuildServiceProvider();
            // 添加FTP服务器服务
            // DotNetFileSystemProvider = 使用.NET文件系统功能
            // AnonymousMembershipProvider = 仅允许匿名登录
          services.AddFtpServer(builder =>
            {
                builder.UseDotNetFileSystem(); // 使用.NET文件系统功能
                builder.EnableAnonymousAuthentication();// 允许匿名登录
                builder.Services.AddSingleton<IMembershipProvider, TestMembershipProvider>();//用户登录
            });
            /* services.AddFtpServer(builder => builder
              .UseDotNetFileSystem() // Use the .NET file system functionality
                  .EnableAnonymousAuthentication()
                  ); // allow anonymous logins*/

            // 配置FTP服务器
            string FtpServerIp = Convert.ToString(ConfigurationManager.AppSettings["FtpServerIp"]); 
            services.Configure<FtpServerOptions>(opt => opt.ServerAddress = FtpServerIp);

            // 构建服务提供商
            using (var serviceProvider = services.BuildServiceProvider())
            {
                // 初始化FTP服务器
                var ftpServerHost = serviceProvider.GetRequiredService<IFtpServerHost>();

                // 启动FTP服务器
                ftpServerHost.StartAsync(CancellationToken.None).Wait();

                Console.WriteLine("Press ENTER/RETURN to close the test application.");
                Console.ReadLine();

                // 停止FTP服务器
              //  ftpServerHost.StopAsync(CancellationToken.None).Wait();
            }

            return ;
        }

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在 C# 中创建一个 FTP 服务器,你需要使用 .NET Framework 提供的 FTP 类库。以下是一个简单的示例代码: ```csharp using System; using System.IO; using System.Net; using System.Net.Sockets; using System.Threading; class FTPServer { static void Main(string[] args) { TcpListener listener = new TcpListener(IPAddress.Any, 21); listener.Start(); Console.WriteLine("FTP server started."); while (true) { TcpClient client = listener.AcceptTcpClient(); Console.WriteLine("Client connected."); Thread thread = new Thread(() => HandleClient(client)); thread.Start(); } } static void HandleClient(TcpClient client) { NetworkStream stream = client.GetStream(); StreamReader reader = new StreamReader(stream); StreamWriter writer = new StreamWriter(stream); writer.WriteLine("220 FTP Server Ready."); writer.Flush(); while (true) { string command = reader.ReadLine(); Console.WriteLine("Command: " + command); if (command.StartsWith("USER")) { writer.WriteLine("331 Password required for user."); writer.Flush(); } else if (command.StartsWith("PASS")) { writer.WriteLine("230 User logged in, proceed."); writer.Flush(); } else if (command.StartsWith("QUIT")) { writer.WriteLine("221 Goodbye."); writer.Flush(); break; } else { writer.WriteLine("502 Command not implemented."); writer.Flush(); } } client.Close(); Console.WriteLine("Client disconnected."); } } ``` 这个示例代码创建了一个简单的 FTP 服务器,监听在本地 IP 地址上的 21 端口。当客户端连接到服务器时,服务器会向客户端发送 "220 FTP Server Ready." 消息。然后,服务器会等待客户端发送命令。如果客户端发送 "USER" 命令,服务器会回复 "331 Password required for user." 消息。如果客户端发送 "PASS" 命令,服务器会回复 "230 User logged in, proceed." 消息。如果客户端发送 "QUIT" 命令,服务器会回复 "221 Goodbye." 消息并关闭连接。如果客户端发送其他命令,服务器会回复 "502 Command not implemented." 消息。 当然,这个示例代码还很简单,你需要根据你的实际需求来修改和完善它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值