tcp.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package controller
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "log"
  5. "net"
  6. )
  7. var clientTcpList = make(map[string]net.Conn)
  8. func NewTcpServer(tcpBaseServer string) {
  9. listener, err := net.Listen("tcp", tcpBaseServer)
  10. if err != nil {
  11. log.Println("Error listening", err.Error())
  12. return //终止程序
  13. }
  14. // 监听并接受来自客户端的连接
  15. for {
  16. conn, err := listener.Accept()
  17. if err != nil {
  18. log.Println("Error accepting", err.Error())
  19. return // 终止程序
  20. }
  21. var remoteIpAddress = conn.RemoteAddr()
  22. clientTcpList[remoteIpAddress.String()] = conn
  23. log.Println(remoteIpAddress, clientTcpList)
  24. //clientTcpList=append(clientTcpList,conn)
  25. }
  26. }
  27. func PushServerTcp(str []byte) {
  28. for ip, conn := range clientTcpList {
  29. line := append(str, []byte("\r\n")...)
  30. _, err := conn.Write(line)
  31. log.Println(ip, err)
  32. if err != nil {
  33. conn.Close()
  34. delete(clientTcpList, ip)
  35. //clientTcpList=append(clientTcpList[:index],clientTcpList[index+1:]...)
  36. }
  37. }
  38. }
  39. func DeleteOnlineTcp(c *gin.Context) {
  40. ip := c.Query("ip")
  41. for ipkey, conn := range clientTcpList {
  42. if ip == ipkey {
  43. conn.Close()
  44. delete(clientTcpList, ip)
  45. }
  46. if ip == "all" {
  47. conn.Close()
  48. delete(clientTcpList, ipkey)
  49. }
  50. }
  51. c.JSON(200, gin.H{
  52. "code": 200,
  53. "msg": "ok",
  54. })
  55. }