1
0

echo_server.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package tests
  2. import (
  3. "bufio"
  4. "fmt"
  5. "io"
  6. "net"
  7. "os"
  8. "syscall"
  9. frpNet "github.com/fatedier/frp/utils/net"
  10. )
  11. func StartEchoServer() {
  12. l, err := frpNet.ListenTcp("127.0.0.1", 10701)
  13. if err != nil {
  14. fmt.Printf("echo server listen error: %v\n", err)
  15. return
  16. }
  17. for {
  18. c, err := l.Accept()
  19. if err != nil {
  20. fmt.Printf("echo server accept error: %v\n", err)
  21. return
  22. }
  23. go echoWorker(c)
  24. }
  25. }
  26. func StartUdpEchoServer() {
  27. l, err := frpNet.ListenUDP("127.0.0.1", 10703)
  28. if err != nil {
  29. fmt.Printf("udp echo server listen error: %v\n", err)
  30. return
  31. }
  32. for {
  33. c, err := l.Accept()
  34. if err != nil {
  35. fmt.Printf("udp echo server accept error: %v\n", err)
  36. return
  37. }
  38. go echoWorker(c)
  39. }
  40. }
  41. func StartUnixDomainServer() {
  42. unixPath := "/tmp/frp_echo_server.sock"
  43. os.Remove(unixPath)
  44. syscall.Umask(0)
  45. l, err := net.Listen("unix", unixPath)
  46. if err != nil {
  47. fmt.Printf("unix domain server listen error: %v\n", err)
  48. return
  49. }
  50. for {
  51. c, err := l.Accept()
  52. if err != nil {
  53. fmt.Printf("unix domain server accept error: %v\n", err)
  54. return
  55. }
  56. go echoWorker(c)
  57. }
  58. }
  59. func echoWorker(c net.Conn) {
  60. br := bufio.NewReader(c)
  61. for {
  62. buf, err := br.ReadString('\n')
  63. if err == io.EOF {
  64. break
  65. }
  66. if err != nil {
  67. fmt.Printf("echo server read error: %v\n", err)
  68. return
  69. }
  70. c.Write([]byte(buf + "\n"))
  71. }
  72. }