首页 > 解决方案 > vb6 winsock 连接而不是每个设备的无限客户端减少到 2

问题描述

您好,我ve got a client/server 2d mmorgp game plaing by us frinds and due to to many copies of the client i已尝试将客户端减少到每个设备打开 2 个客户端,但不是每个设备在网络上 2 个客户端。也许我在某个地方做错了。

Sub ConnectionRequestCon(ByVal requestID As Long)
On Error Resume Next
Dim check As Integer
Dim LoggedOn As Integer
Dim NewIndex As Integer
Dim RandomCheck As Integer
NewIndex = GetFreeIndex
LogOutProcedure NewIndex
RandomizeConLandLaunch NewIndex
Load Main.Server(NewIndex)
Load Main.EngageTimer(NewIndex)
Main.Server(NewIndex).Accept requestID
AddServerLogText NewIndex & ": Connected [" & Main.Server(NewIndex).RemoteHostIP & "]"
RandomCheck = RandomNumber(1000, 30000)
SetConAuthNumber NewIndex, RandomCheck
Main.Server(NewIndex).SendData "1,Welcome To Xiaspora - " & TotalLogedInUsers & " Users Online" &             Chr(13) & "34," & RandomCheck & Chr(13)
DoEvents
Do
check = check + 1
If Main.Server(check).State = 7 And Main.Server(check).RemoteHostIP =     Main.Server(NewIndex).RemoteHostIP Then LoggedOn = LoggedOn + 1
Loop Until check = Main.Server.Count
If LoggedOn >= 4 Then CloseCon NewIndex 'with the number 4 reduce the clients per device . when is 7     is unlimited
End Sub

标签: vb62dwinsock

解决方案


您正在check从 1 循环到Main.Server.Count并检查每个 Main.Server(check).State,但您可能已经卸载了套接字控件。

On Error Resume Next在代码的顶部,但考虑类似这样的代码

Dim lCount As Long
On Error Resume Next
If 1 / 0 > 0 Then lCount = lCount + 1
Debug.Print lCount

. . . 从 If 表达式中打印1ie OERN 在 If 中获取“下一个”语句无论它与 If 表达式在同一行。

Main.Server(check).State现在考虑在卸载控件上检查时会发生什么。由于 OERN,这一项被计入LoggedOn这显然不是您想要做的。

在这种情况下使用 OERN,您可能希望像这样反转 If 表达式

If Main.Server(check).State <> 7 Then
    '--- do nothing
ElseIf Main.Server(check).RemoteHostIP = Main.Server(NewIndex).RemoteHostIP Then
    LoggedOn = LoggedOn + 1
End If

. . . 这样当访问Main.Server(check).State炸弹时,它“进入” If 块并且在那里无事可做。


推荐阅读