main.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "log"
  6. "os"
  7. "os/signal"
  8. "syscall"
  9. "ftp-server/config"
  10. ftpserver "ftp-server/ftp"
  11. webserver "ftp-server/web"
  12. )
  13. func main() {
  14. configPath := flag.String("config", "config.json", "配置文件路径")
  15. flag.Parse()
  16. // Load configuration
  17. cfg, err := config.Load(*configPath)
  18. if err != nil {
  19. log.Fatalf("Failed to load config: %v", err)
  20. }
  21. fmt.Println("======================================")
  22. fmt.Println(" FTP Server for Windows")
  23. fmt.Println("======================================")
  24. fmt.Printf("FTP Port: %d\n", cfg.FTP.Port)
  25. fmt.Printf("Web Admin: http://127.0.0.1:%d\n", cfg.Web.Port)
  26. fmt.Printf("Admin User: %s\n", cfg.Admin.Username)
  27. fmt.Printf("Root Dir: %s\n", cfg.FTP.RootDir)
  28. fmt.Println("======================================")
  29. // Ensure root directory exists
  30. if err := os.MkdirAll(cfg.FTP.RootDir, 0755); err != nil {
  31. log.Fatalf("Failed to create root directory: %v", err)
  32. }
  33. // Start FTP server
  34. ftpSrv := ftpserver.NewServer(cfg, *configPath)
  35. if err := ftpSrv.Start(); err != nil {
  36. log.Fatalf("Failed to start FTP server: %v", err)
  37. }
  38. // Start Web admin server
  39. webSrv := webserver.NewServer(cfg, *configPath)
  40. go func() {
  41. if err := webSrv.Start(); err != nil {
  42. log.Fatalf("Failed to start web server: %v", err)
  43. }
  44. }()
  45. // Wait for termination signal
  46. sigChan := make(chan os.Signal, 1)
  47. signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
  48. sig := <-sigChan
  49. fmt.Printf("\nReceived signal %v, shutting down...\n", sig)
  50. ftpSrv.Stop()
  51. fmt.Println("FTP Server stopped.")
  52. }