echo_server.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package mock
  2. import (
  3. "fmt"
  4. "io"
  5. "net"
  6. "os"
  7. "syscall"
  8. frpNet "github.com/fatedier/frp/utils/net"
  9. )
  10. func StartTcpEchoServer(port int) {
  11. l, err := frpNet.ListenTcp("127.0.0.1", port)
  12. if err != nil {
  13. fmt.Printf("echo server listen error: %v\n", err)
  14. return
  15. }
  16. for {
  17. c, err := l.Accept()
  18. if err != nil {
  19. fmt.Printf("echo server accept error: %v\n", err)
  20. return
  21. }
  22. go echoWorker(c)
  23. }
  24. }
  25. func StartTcpEchoServer2(port int) {
  26. l, err := frpNet.ListenTcp("127.0.0.1", port)
  27. if err != nil {
  28. fmt.Printf("echo server2 listen error: %v\n", err)
  29. return
  30. }
  31. for {
  32. c, err := l.Accept()
  33. if err != nil {
  34. fmt.Printf("echo server2 accept error: %v\n", err)
  35. return
  36. }
  37. go echoWorker2(c)
  38. }
  39. }
  40. func StartUdpEchoServer(port int) {
  41. l, err := frpNet.ListenUDP("127.0.0.1", port)
  42. if err != nil {
  43. fmt.Printf("udp echo server listen error: %v\n", err)
  44. return
  45. }
  46. for {
  47. c, err := l.Accept()
  48. if err != nil {
  49. fmt.Printf("udp echo server accept error: %v\n", err)
  50. return
  51. }
  52. go echoWorker(c)
  53. }
  54. }
  55. func StartUnixDomainServer(unixPath string) {
  56. os.Remove(unixPath)
  57. syscall.Umask(0)
  58. l, err := net.Listen("unix", unixPath)
  59. if err != nil {
  60. fmt.Printf("unix domain server listen error: %v\n", err)
  61. return
  62. }
  63. for {
  64. c, err := l.Accept()
  65. if err != nil {
  66. fmt.Printf("unix domain server accept error: %v\n", err)
  67. return
  68. }
  69. go echoWorker(c)
  70. }
  71. }
  72. func echoWorker(c net.Conn) {
  73. buf := make([]byte, 2048)
  74. for {
  75. n, err := c.Read(buf)
  76. if err != nil {
  77. if err == io.EOF {
  78. c.Close()
  79. break
  80. } else {
  81. fmt.Printf("echo server read error: %v\n", err)
  82. return
  83. }
  84. }
  85. c.Write(buf[:n])
  86. }
  87. }
  88. func echoWorker2(c net.Conn) {
  89. buf := make([]byte, 2048)
  90. for {
  91. n, err := c.Read(buf)
  92. if err != nil {
  93. if err == io.EOF {
  94. c.Close()
  95. break
  96. } else {
  97. fmt.Printf("echo server read error: %v\n", err)
  98. return
  99. }
  100. }
  101. var w []byte
  102. w = append(w, buf[:n]...)
  103. w = append(w, buf[:n]...)
  104. c.Write(w)
  105. }
  106. }