gatewayServer.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package gatewayServer
  2. import (
  3. "fmt"
  4. "io"
  5. "log"
  6. "net"
  7. "sync/atomic"
  8. )
  9. var ipAddress = "192.168.110.69:9001"
  10. var ConnMap = make(map[string]net.Conn, 50)
  11. var openDebug bool = false
  12. func GatewayServe() {
  13. listen, err := net.Listen("tcp", ipAddress)
  14. if err != nil {
  15. log.Fatalln("服务启动失败 ", err)
  16. }
  17. for {
  18. accept, err := listen.Accept()
  19. if err != nil {
  20. log.Fatalln("获取连接失败 ", err)
  21. }
  22. go handleConn(accept)
  23. }
  24. }
  25. var n int32
  26. func handleConn(c net.Conn) {
  27. defer func() {
  28. atomic.AddInt32(&n, -1)
  29. }()
  30. atomic.AddInt32(&n, 1)
  31. fmt.Printf("连接数 %d\n", atomic.LoadInt32(&n))
  32. fmt.Printf("当前连接 %s\n", c.RemoteAddr())
  33. //var filterChan = make(chan []byte, 32)
  34. var dataChan = make(chan []byte, 32)
  35. readData := func() {
  36. for {
  37. var buf = make([]byte, 1024)
  38. n, err := c.Read(buf)
  39. if err != nil {
  40. if err == io.EOF {
  41. log.Println("已到达文件结束")
  42. break
  43. }
  44. log.Println("读数据失败", err)
  45. break
  46. }
  47. if n == 0 {
  48. log.Println("未读取到数据")
  49. break
  50. }
  51. fmt.Println("阅读", n, "字节")
  52. dataChan <- buf[:n]
  53. }
  54. }
  55. //filterData := func() {
  56. //
  57. //}
  58. handleData := func() {
  59. for {
  60. v, ok := <-dataChan
  61. if !ok {
  62. return
  63. }
  64. adu := UnPack(v)
  65. c.RemoteAddr()
  66. ParseAndResponse(adu, c)
  67. }
  68. }
  69. go readData()
  70. go handleData()
  71. }