使用GSF.NET库搭建C# TFTP服务器:程序退出及事件处理示例求助
GSF.NET TFTP服务器完整示例(解决启动后立即退出问题)
你的程序启动后立即退出,核心原因有两个:
- 控制台程序主线程执行完
Start()后没有阻塞逻辑,直接结束进程 - 未绑定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
相关产品推荐
相关产品推荐

