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

Posted

技术标签:

【中文标题】VB6 中的 Winsock 控件只向数组中的最后一个索引发送文本消息【英文标题】:Winsock Control in VB6 Only send text messages to the last index in an array 【发布时间】:2014-07-06 05:47:53 【问题描述】:

这可能是一个多年的话题,但我真的不知道如何解决这个问题。

所以我在 vb6 中开始了一个项目,使用 winsock 控件从连接在 LAN 上的计算机发送和接收消息。

在我的项目中,我包含了两个 Winsock 控件,即 con 和 conn。 con 将监听连接请求并让 conn 接受请求,因此 conn 在一个数组中接受来自客户端的多个请求

Private Sub con_ConnectionRequest(ByVal requestID As Long)
    If conn(0).State = sckClosed Then
        conn(0).Accept requestID
    Else
        Load conn(socknum)
        conn(socknum).Accept requestID
    End If
    socknum = socknum + 1
End Sub

现在有多个客户端连接,客户端可以向主机发送消息,但主机只能向 conn 的最后一个索引发送文本消息,或者最后连接的客户端将是唯一可以接收来自的消息的客户端主人。

Private Sub txtSend_KeyPress(KeyAscii As Integer)
    Dim n As Integer
        If KeyAscii = 13 Then
            If ishost = True Then
                For n = 0 To conn.UBound
                   If conn(n).State = sckConnected Then
                       conn(n).SendData txtSend
                   End If
                Next n
            Else
                con.SendData txtSend
            End If
            txtMessages.Text = txtMessages.Text & vbCrLf & txtSend.Text
        End If
End Sub

我无法弄清楚我的代码有什么问题,因此非常感谢您提供一些帮助或提示。

【问题讨论】:

【参考方案1】:

变量ishost在哪里定义? 能否请您发布该代码?

另外,请发布为 ishost 赋值的代码。

变量socknum在哪里定义? 你能把那个代码贴出来吗? socknum 是否在其他任何地方使用?

调试:在 For n = 0 的行上放置一个断点到 conn.UBound 并使用 F8 逐步执行。 执行是否到达这条线? conn.UBound的值是多少?

【讨论】:

以上是关于VB6 中的 Winsock 控件只向数组中的最后一个索引发送文本消息的主要内容,如果未能解决你的问题,请参考以下文章

VB6 中的默认 WinSock 协议

VB6.0的winsock控件用UDP局域网广播数据,当数据很大时接收方报10040--数据包太大,请问怎么处理。

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

我在 vb6(winsock) 中创建的客户端/服务器程序不能在 WAN 上运行,但可以在 LAN 上完美运行 为啥?

vb6.0系统,如何在DataBrid控件中直接修改数据?

vb6 - 将消息发送到winsock服务器聊天