【发布时间】:2016-05-30 23:48:05
【问题描述】:
我为我的游戏服务器开发了一个应用程序。现在,在这个应用程序中,当我按下“连接”时,它会将数据发送到我的游戏服务器。确实如此,但是问题是,当它发送连接时它会自动关闭它,我不想关闭它,因为我有一个套接字插件,它会在玩家离开游戏后终止 TCP 连接。现在在我的本地主机上它可以工作,TCP 不会“死”但在我的 vps 上它会断开连接,有人可以检查我的代码,看看我是否做错了什么?
Dim p() As Process
Dim gta() As Process
p = Process.GetProcessesByName("samp")
gta = Process.GetProcessesByName("gta_sa")
If p.Count > 0 Then
MsgBox("Vec imate pokrenut SAMP - ugasite ga.")
ElseIf gta.Count > 0 Then
MsgBox("Vec imate pokrenut GTA San Andreas - ugasite ga.")
Else
Try
Dim prozess As Process = Process.GetProcessesByName("samp")(0)
prozess.Kill()
Catch ex As Exception
End Try
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\SAMP", "PlayerName", TextBox1.Text)
Process.Start("samp://164.132.229.172:7777")
Dim client As New TcpClient()
client.Connect("164.132.229.172", 7775)
Dim sendBytes As [Byte]() = System.Text.Encoding.ASCII.GetBytes(TextBox1.Text)
Dim stream As NetworkStream = client.GetStream()
stream.Write(sendBytes, 0, sendBytes.Length)
Timer1.Start()
End If
End If
计时器:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim pd() As Process
pd = Process.GetProcessesByName("Aimbot By The2Gamers")
If pd.Count > 0 Then
Dim InternetExplorer() As Process = Process.GetProcessesByName("Aimbot By The2Gamers")
For Each Process As Process In InternetExplorer
Process.Kill()
Next
End If
End Sub
现在这部分只是来自我的 vps 的服务器日志:
[01:12:15] [LAUNCHER] 连接到 Socket 服务器。 |客户 ID:[0] | ClientIP: [92.241.153.29] [01:12:15] 远程客户端 [0] 已发送: Joan_Mackey [01:12:16] [LAUNCHER] 播放器套接字已断开| 客户 ID:[0] |玩家ID:[0]
【问题讨论】:
-
计时器导致问题,我该从哪里开始计时器?
-
当我这样写代码时,TCP 会自行停止,但是当我删除计时器时它会起作用:
-
再次测试,每当我尝试检查某个进程是否在此计时器中运行时,它都会终止 TCP
-
这缺少让我们能够判断问题所在的代码...您在哪些地方关闭了 TcpClient?你知道 TcpClient 是被普通代码关闭还是因为其他原因被显式终止?
-
尝试使用断点单步执行您的代码。他们可能会帮助您了解正在发生的事情。