winsock控件数组的问题

xiaofeng54 2010-02-14 10:16:55
在vb中通过winsock控件数组通讯,希望在wisock控件超过3个后就从头开始使用第一个,可是每次超过3再建立连接时都提示我对象已加载,我每次都已经unload了啊,应该怎样才对啊!?求指点!

服务器程序:
Dim intmax As Integer

Private Sub cmdC1_Click()
frmC1.Show
End Sub

Private Sub cmdC2_Click()
frmC2.Show
End Sub

Private Sub Form_Load()
intmax = 0
Winsock(0).LocalPort = 1001
Winsock(0).Listen
End Sub

Private Sub Timer1_Timer()
Text1.Text = intmax
Text2.Text = Winsock.Count
End Sub

Private Sub Winsock_Close(index As Integer)
Unload Winsock(index)
End Sub

Private Sub Winsock_ConnectionRequest(index As Integer, ByVal requestID As Long)
If intmax = 0 Then
intmax = 1
End If
If intmax >= 3 Then
intmax = 1
End If
intmax = intmax + 1
Load Winsock(intmax)
Winsock(intmax).Accept requestID
MsgBox ("Link is made")
End Sub

Private Sub Winsock_DataArrival(index As Integer, ByVal bytesTotal As Long)
Dim s As String
Winsock(index).GetData s
If s = "!C" Then
Winsock(index).Close
End If
End Sub


客户端程序:
Private Sub Command1_Click()
Winsock.Connect
End Sub

Private Sub Command3_Click()
Winsock.SendData "!C"
End Sub

Private Sub Form_Load()
Label1.Caption = "等待建立连接"
Winsock.RemoteHost = "127.0.0.1"
Winsock.RemotePort = 1001
End Sub


Private Sub Winsock_Close()
Winsock.Close
Label1.Caption = "连接已断开"
End Sub

Private Sub Winsock_Connect()
Label1.Caption = "已经建立连接"
End Sub


...全文
83 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaofeng54 2010-02-17
  • 打赏
  • 举报
回复
引用 3 楼 chinaboyzyq 的回复:
抱歉我说的有点问题
Private Sub Winsock_Close(index As Integer)
此事件是当远程计算机关闭连接时出现。应用程序应正确使用 Close 方法关闭 TCP 连接。

也就上说客户端里关闭连接服务器里才会触发此事件或者说服务器里关闭连接客户端里才会触发此事件。


你要确定的是以下事件已经触发,也就是说你的控件已经卸载:
Private Sub Winsock_Close(index As Integer)
  Unload Winsock(index)
End Sub

已经触发close事件,就是说每次用过的winsock已经unload了,可是当我再load它的时候就会提示对象已经加载。
请问有没有实现过此功能的代码以供参考?急救啊!多谢了!分不够可以加啊!
chinaboyzyq 2010-02-16
  • 打赏
  • 举报
回复
抱歉我说的有点问题
Private Sub Winsock_Close(index As Integer)
此事件是当远程计算机关闭连接时出现。应用程序应正确使用 Close 方法关闭 TCP 连接。

也就上说客户端里关闭连接服务器里才会触发此事件或者说服务器里关闭连接客户端里才会触发此事件。


你要确定的是以下事件已经触发,也就是说你的控件已经卸载:
Private Sub Winsock_Close(index As Integer)
Unload Winsock(index)
End Sub

xiaofeng54 2010-02-16
  • 打赏
  • 举报
回复
每次我都在客户端发送了关闭命令即“!C”,然后服务器端执行了close后才再次建立连接的哦,还是会报错
引用 1 楼 chinaboyzyq 的回复:
建立连接Winsock_ConnectionRequest与收到数据Winsock_DataArrival是两个概念,在没有收到数据前就可以建立连接。也就说你的Winsock(index).Close在没有收到数据前是不会起作用的,那么Winsock_Close(index As Integer)事件也就不会发生,也就不会卸载控件,再load当然就会出现错误。
chinaboyzyq 2010-02-14
  • 打赏
  • 举报
回复
建立连接Winsock_ConnectionRequest与收到数据Winsock_DataArrival是两个概念,在没有收到数据前就可以建立连接。也就说你的Winsock(index).Close在没有收到数据前是不会起作用的,那么Winsock_Close(index As Integer)事件也就不会发生,也就不会卸载控件,再load当然就会出现错误。


1,502

社区成员

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

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