vb6 winsock 连接而不是每个设备的无限客户端减少到 2
Posted
技术标签:
【中文标题】vb6 winsock 连接而不是每个设备的无限客户端减少到 2【英文标题】:vb6 winsock connection instead unlimited clients per devide to be reduced to 2 【发布时间】:2019-12-29 18:51:02 【问题描述】:你好 ive got a client/server 2d mmorgp game plaing by us frinds and due to to many copies of the client i
ve 试图减少每个设备打开 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
【问题讨论】:
【参考方案1】:您正在将 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
。 . .打印1
,即从 If 表达式 OERN 获取“下一个”语句inside 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 块并且在那里无事可做。
【讨论】:
以上是关于vb6 winsock 连接而不是每个设备的无限客户端减少到 2的主要内容,如果未能解决你的问题,请参考以下文章