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