You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GSF.NET库搭建C# TFTP服务器:程序退出及事件处理示例求助

GSF.NET TFTP服务器完整示例(解决启动后立即退出问题)

你的程序启动后立即退出,核心原因有两个:

  1. 控制台程序主线程执行完Start()后没有阻塞逻辑,直接结束进程
  2. 未绑定TFTP服务的核心事件处理程序,即使不退出也无法处理客户端请求

以下是完整的可运行示例代码,包含事件绑定和主线程阻塞逻辑:

using GSF.Net.TFtp;
using System.Net;
using System;

class Program
{
    static void Main(string[] args)
    {
        // 指定服务器监听的IP地址
        IPAddress ip = IPAddress.Parse("192.168.1.102");
        TFtpServer tftpServer = new TFtpServer(ip);

        // 绑定TFTP核心事件处理程序
        // 当客户端发起文件请求时触发
        tftpServer.FileRequestReceived += OnFileRequestReceived;
        // 当文件传输完成时触发
        tftpServer.TransferCompleted += OnTransferCompleted;
        // 当传输出现错误时触发
        tftpServer.TransferError += OnTransferError;

        // 启动TFTP服务器
        tftpServer.Start();
        Console.WriteLine("TFTP服务器已启动,监听地址:{0}", ip);
        Console.WriteLine("按任意键停止服务器...");

        // 阻塞主线程,防止程序退出
        Console.ReadLine();

        // 停止服务器
        tftpServer.Stop();
        Console.WriteLine("TFTP服务器已停止");
    }

    // 文件请求接收事件处理方法(符合TFtpServerEventHandler委托签名)
    static void OnFileRequestReceived(ITFtpTransfer transfer, EndPoint client)
    {
        IPEndPoint clientIp = (IPEndPoint)client;
        Console.WriteLine($"客户端 {clientIp.Address}:{clientIp.Port} 请求文件:{transfer.FileName}");
        
        // 这里可以添加自定义逻辑,比如验证客户端权限、检查文件是否存在等
        // 如果允许传输,无需额外操作;如果拒绝,可以调用 transfer.Cancel()
    }

    // 传输完成事件处理方法
    static void OnTransferCompleted(ITFtpTransfer transfer, EndPoint client)
    {
        IPEndPoint clientIp = (IPEndPoint)client;
        Console.WriteLine($"客户端 {clientIp.Address}:{clientIp.Port} 传输完成:{transfer.FileName},传输字节数:{transfer.BytesTransferred}");
    }

    // 传输错误事件处理方法
    static void OnTransferError(ITFtpTransfer transfer, EndPoint client, Exception ex)
    {
        IPEndPoint clientIp = (IPEndPoint)client;
        Console.WriteLine($"客户端 {clientIp.Address}:{clientIp.Port} 传输出错:{transfer.FileName},错误信息:{ex.Message}");
    }
}

关键说明:

  • 事件绑定:所有事件处理方法的签名必须匹配TFtpServerEventHandler委托(接收ITFtpTransfer和EndPoint参数)
  • 主线程阻塞:使用Console.ReadLine()让主线程保持运行,直到用户输入任意键
  • 事件逻辑:你可以根据业务需求在事件处理方法中添加自定义逻辑,比如权限校验、日志记录、文件存在性检查等
  • 服务器停止:通过Stop()方法优雅关闭TFTP服务

内容的提问来源于stack exchange,提问作者Carlitos_30

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:54:18