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 ive 试图减少每个设备打开 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的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Winsock 从外部设备检索数据到 Microsoft Visual Basic (VB6)

VB6 winsock服务器和多个arduino客户端问题

尝试使用 VB6 Winsock 连接到票务打印机

VB6:如何获取通过 winsock 发送的字节数?

VB6 中的默认 WinSock 协议

VB6 中的 Winsock 控件只向数组中的最后一个索引发送文本消息