gpt4 book ai didi

.net - CS 全局攻势的 RCON 客户端

转载 作者:可可西里 更新时间:2023-11-01 02:54:30 24 4
gpt4 key购买 nike

<我>大家好,

我正在尝试使用 VisualStudio.NET 在 Basic 中编写我自己的小型 RCON 工具。该程序正确发送数据,因此我假设“发送”和“连接”部分工作正常。游戏服务器正确执行命令,但我没有收到任何返回消息。

我的函数 buildTcpPacket 只是根据 source-rcon-protocol 构建一个字节数组。 .

参数是实际命令(或第一次连接时的密码),请求类型(2个命令,3个身份验证)和数据包的ID,根据我的研究,这并不重要,除非多个连接已打开。

到目前为止,我已经尝试了两种非常相似的方法:

方法一:

Public Function connect() As String
Try
' First, build the authentictation request.
Dim authPacket As Byte() = buildTcpPacket(rcon_password, 3, 1)
' Create a TCP-client.*
client = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
' Connect the client to the server.
client.Connect(ip, rcon_port)
' Try to autheticate.
client.Send(authPacket)
' Create the buffer to read to. Max. package size is 4096 byte.
Dim buffer(4095) As Byte
' Listen for the answer.
client.Receive(buffer)
Return System.Text.ASCII.Encoding.getString(buffer)
Catch ex As Exception
MessageBox.Show(ex.Message)
Return "-1"
End Try
End Function

Public Function sendCommand(ByVal rconCommand As String) As String
Try
' Build the package with Type = 2 (= Input to server).
Dim cmdPacket As Byte() = buildTcpPacket(rconCommand, 2, 1)
' Send the command.
client.Send(cmdPacket, SocketFlags.None)
' Create the buffer to read to. Max. package size is 4096 byte.
Dim buffer(4095) As Byte
' Listen for the answer.
client.Receive(buffer)
Return Encoding.ASCII.GetString(buffer)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Function

和方法2:

Private Sub connect()
Try
Dim client As New TcpClient(server, port)
Dim data As Byte() = buildTcpPacket(rcon_password, 3, id)
Dim stream As NetworkStream = client.GetStream()
stream.Write(data, 0, data.Length)

data = New Byte(4095) {}
Dim bytes As Int32 = stream.Read(data, 0, data.Length)
Dim response As String = Encoding.ASCII.GetString(data, 0, bytes)
MsgBox("received: " & response)

data = buildTcpPacket(rcon_command, 2, id)
stream.Write(data, 0, data.Length)

data = New Byte(4095) {}
bytes = stream.Read(data, 0, data.Length
response = Encoding.ASCII.GetString(data, 0, bytes)
MsgBox("received: " & response)

stream.Close()
client.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

我只创建方法 2 以确保方法 1 除了 RCON 部分没有其他问题,因为它嵌入到更大、更复杂的程序中。

如果我的英语很糟糕,我很抱歉,感谢大家的帮助。

最佳答案

找到解决方案:Encoding.ASCII.GetString() 在找到终止符号后结束对流/数组的编码。由于某些奇怪的原因,RCON 服务器似乎在实际应答之前发送了乱码数据。

抱歉,我无法提供任何代码,在迁移到新机器时丢失了我的项目。不过,如果有人遇到同样的问题,我仍然想提供一个答案。

关于.net - CS 全局攻势的 RCON 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25505808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com