VB sockt控件数组问题 求大牛指教

xiaomizh 2012-07-16 10:56:25
写了一个简单的聊天软件。用的是tcp,一对一的已经搞定。做一对多的时候,老是提示控件数组不存在,我已经按照百度的方法改好几次了 还是不行。希望大牛给我看看、先谢谢啦。
先把代码贴下。
客户端:
Private Sub Command1_Click()

sckconnect.SendData Text1.Text
Text1.Text = ""
End Sub

Private Sub Command2_Click()
Text4.Text = ""
End Sub

Private Sub Command3_Click()

sckconnect.RemoteHost = Text2.Text
sckconnect.RemotePort = CInt(Text3.Text)

sckconnect.Connect

Form1.Command3.Enabled = False
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim StrData As String
sckconnect.GetData StrData
Text4.Text = Text4.Text + vbCrLf + StrData

End Sub

服务器:

Private isWinCount(100) As Boolean '定义有100个client

Private Sub Form_Load()

For I = 1 To 100 '用一个for循环创建控件数组
Load Winsock1(I)
isWinCount(100) = True '设为空闲状态
Next


Winsock1(0).LocalPort = "6000" '绑定端口
Winsock1(0).Listen '聆听状态

End Sub



Private Sub Winsock1_Close(Index As Integer)

If Index <> 0 Then '通过双目判断是否使用
isWinCount(Index) = True '而置为空闲
End If

End Sub

Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)

Dim rip As String
Dim I As Integer
sip = Winsock1(0).RemoteHostIP '获得登录者的IP地址
I = 1
Do While I <= Winsock1.ubound '检查是否已经有该地址的记录
If Winsock1(I).RemoteHostIP = rip Then '如有,不必加载新的控件
Winsock1(I).Accept requestID
Exit Sub
End If
I = I + 1
Loop
Load Winsock1(I) '否则,加载新的控件
Winsock1(I).Accept requestID


End Sub


Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)

Dim sdata As String
Winsock1(1).GetData sdata
For I = 1 To Winsock1.Count
If Winsock1(I).State <> sckClosed Then
Winsock1(I).SendData sdata
End If
Next I

End Sub

当开启两个客户端后提示控件数组不存在错误。 求指教。谢谢啦、
...全文
142 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
leotanyang 2012-07-18
  • 打赏
  • 举报
回复
100后是错的
赵4老师 2012-07-18
  • 打赏
  • 举报
回复
Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)

Dim rip As String
Dim I As Integer
rip = Winsock1(0).RemoteHostIP '获得登录者的IP地址
I = 1
Do While I <= Winsock1.ubound '检查是否已经有该地址的记录
If Winsock1(I).RemoteHostIP = rip Then '如有,不必加载新的控件
Winsock1(I).Accept requestID
Exit Sub
End If
I = I + 1
Loop
'Load Winsock1(I) '否则,加载新的控件
Winsock1(I).Accept requestID


End Sub


xiaomizh 2012-07-17
  • 打赏
  • 举报
回复
zyg0 可是我只开了两个客户端就出错了。 还没开100个呢
zyg0 2012-07-17
  • 打赏
  • 举报
回复
如果连接超过100 就出错
xiaomizh 2012-07-17
  • 打赏
  • 举报
回复
是啊? 到底是那出错了啊? 求指教。。。
赵4老师 2012-07-16
  • 打赏
  • 举报
回复
检查下标I的范围是否在1..100之间。

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧