main.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "net"
  6. )
  7. var flagHelp bool
  8. var flagEcho bool
  9. func main() {
  10. flag.BoolVar(&flagHelp, "h", false, "print help")
  11. flag.BoolVar(&flagEcho, "e", false, "echo (send back what received)")
  12. flag.Parse()
  13. if flagHelp {
  14. flag.PrintDefaults()
  15. return
  16. }
  17. ln, err := net.Listen("tcp", ":12450")
  18. if err != nil {
  19. fmt.Println("Error listening:", err.Error())
  20. return
  21. }
  22. defer ln.Close()
  23. fmt.Println("Listening on :12450")
  24. for {
  25. // 接受连接
  26. conn, err := ln.Accept()
  27. if err != nil {
  28. fmt.Println("Error accepting connection:", err.Error())
  29. return
  30. }
  31. fmt.Println("Client connected:", conn.RemoteAddr())
  32. // 在新的goroutine中处理连接
  33. go handleConnection(conn)
  34. }
  35. }
  36. func handleConnection(conn net.Conn) {
  37. defer conn.Close()
  38. // 循环读取数据并回显
  39. for {
  40. buf := make([]byte, 1024)
  41. // 读取数据
  42. n, err := conn.Read(buf)
  43. if err != nil {
  44. fmt.Println("Error reading:", err.Error())
  45. return
  46. }
  47. // 打印接收到的数据
  48. fmt.Println("Received:\n", string(buf[:n]))
  49. // 发送回去
  50. if flagEcho {
  51. _, err = conn.Write(buf[:n])
  52. if err != nil {
  53. fmt.Println("Error writing:", err.Error())
  54. return
  55. }
  56. }
  57. }
  58. }