1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- using System;
- using System.IO;
- using System.Net;
- using System.Net.Sockets;
- using System.Threading;
- using TftpServer.Utils;
- namespace TftpServer
- {
- internal class TftpProgram
- {
- private static bool _isRunning;
- private static string Root;
- private static void Main(string[] args)
- {
- Console.WriteLine("Starting...");
- Root = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Properties.Settings.Default.Root);
- var tWorker = new Thread(Working);
- _isRunning = true;
- tWorker.Start();
- Console.WriteLine("Press ENTER to Stop.");
- Console.ReadLine();
- Console.Write("Shutting down...");
- _isRunning = false;
- tWorker.Join();
- Console.Write("Stopped.");
- Console.WriteLine();
- Console.Write("Press ENTER to Exit.");
- Console.ReadLine();
- }
- private static void Working()
- {
- var listenEndPoint = new IPEndPoint(IPAddress.Parse(Properties.Settings.Default.ListenOn), 69);
- var socket = new Socket(listenEndPoint.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
- {
- SendBufferSize = 65536,
- ReceiveBufferSize = 65536
- };
- socket.Bind(listenEndPoint);
- var upTime = DateTime.Now;
- Console.WriteLine($"TFTP Server started, listing on: {listenEndPoint}");
- var buffer = new byte[65536];
- EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 68);
- var polling = DateTime.Now;
- while (_isRunning)
- {
- Console.CursorLeft = 0;
- if (false == socket.Poll(500 * 1000, SelectMode.SelectRead))
- {
- var timeSpan = DateTime.Now - polling;
- var up = DateTime.Now - upTime;
- Console.Write($"Polling..." +
- $" {timeSpan.Days:00}D {timeSpan.Hours:00}H {timeSpan.Minutes:00}M {timeSpan.Seconds:00}S {timeSpan.Milliseconds:000}" +
- $" / UP {up.Days:00}D {up.Hours:00}H {up.Minutes:00}M {up.Seconds:00}S {up.Milliseconds:000}");
- }
- else
- {
- polling = DateTime.Now;
- Console.WriteLine();
- var bytes = socket.ReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref remoteEndPoint);
- Console.Write($"Receive {bytes} byte From {remoteEndPoint}");
- try
- {
- var packet = new TftpPacket(buffer, bytes);
- switch (packet.OpCode)
- {
- default:
- break;
- }
- }
- catch (Exception e)
- {
- Console.WriteLine(e);
- }
- Console.WriteLine();
- }
- }
- }
- }
- }
|