首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

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

2012-08-15 
VB sockt控件数组问题 求大牛指教写了一个简单的聊天软件。用的是tcp,一对一的已经搞定。做一对多的时候,老

VB sockt控件数组问题 求大牛指教
写了一个简单的聊天软件。用的是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

当开启两个客户端后提示控件数组不存在错误。 求指教。谢谢啦、

[解决办法]
检查下标I的范围是否在1..100之间。
[解决办法]
如果连接超过100 就出错
[解决办法]
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



[解决办法]
100后是错的

热点排行