MCPcopy Create free account
hub / github.com/BlackBEDevelopment/MCBE-Server-Motd / MotdJava

Function MotdJava

MotdBEAPI/MotdJavaAPI.go:56–173  ·  view source on GitHub ↗

@description: 通过TCP请求获取Java服务器信息 @param {string} Host 服务器地址,nyan.xyz:19132 @return {MotdJavaInfo} @return {error}

(Host string)

Source from the content-addressed store, hash-verified

54//@return {MotdJavaInfo}
55//@return {error}
56func MotdJava(Host string) (MotdJavaInfo, error) {
57 //原代码来自 https://github.com/Cryptkeeper/go-minecraftping
58 var MotdInfo MotdJavaInfo
59
60 //Host为空直接退出
61 if Host == "" {
62 MotdInfo.Status = "offline"
63 return MotdInfo, nil
64 }
65
66 timeout := time.Second * 5 //设置五秒超时
67 deadline := time.Now().Add(timeout)
68
69 time1 := time.Now().UnixNano() / 1e6 //记录发送时间
70 conn, err := net.DialTimeout("tcp", Host, timeout)
71 if err != nil {
72 MotdInfo.Status = "offline"
73 return MotdInfo, err
74 }
75 defer conn.Close()
76
77 if err := conn.SetDeadline(deadline); err != nil {
78 MotdInfo.Status = "offline"
79 return MotdInfo, err
80 }
81
82 // 构造并写入握手包,打开连接,然后写入请求包。
83 // More information: https://wiki.vg/Server_List_Ping
84 var buf bytes.Buffer
85 buf.Write([]byte("\x00"))
86 //这个版本号似乎无所谓?
87 //575表示1.15.1
88 putVarInt(&buf, int32(575))
89
90 //分割服务器地址
91 HostAddress := strings.Split(Host, ":")
92 Address := HostAddress[0]
93 Port, _ := strconv.Atoi(HostAddress[1])
94
95 putVarInt(&buf, int32(len(Address)))
96 buf.WriteString(Address)
97 binary.Write(&buf, binary.BigEndian, uint16(Port))
98 putVarInt(&buf, 1)
99 //将缓冲区的长度作为uvarint预加
100 var out bytes.Buffer
101 putVarInt(&out, int32(buf.Len()))
102 out.Write(buf.Bytes())
103 handshake := out.Bytes()
104 conn.Write(handshake)
105
106 var requestPacket = []byte{1, 0}
107 conn.Write(requestPacket)
108
109 reader := bufio.NewReader(conn)
110 time2 := time.Now().UnixNano() / 1e6 //记录接收时间
111
112 // 读取并计算传入数据包的长度
113 _, err = binary.ReadUvarint(reader)

Callers 3

SetupRouterFunction · 0.92
ServerStatusImgJavaFunction · 0.92
TestJavaFunction · 0.85

Calls 1

putVarIntFunction · 0.85

Tested by 1

TestJavaFunction · 0.68