VB winsock的index问题 答得对的我加50分,凭良心说话!!!

来源:百度知道 编辑:UC知道 时间:2024/05/25 14:07:17
看这段代码:
Private Sub winsock1_DataArrival(ByVal Index As Integer, bytesTotal As Long)
Dim strData As String, de$, pingip$

strData = Space(bytesTotal)
Winsock1.GetData strData '获得所有的发送来的数据

If Left(strData, 16) = "load a new users" Then '如果是有载如新拥护的请求
pingip = Mid(strData, 17) '从第17个字符开始,因为 load a new users 只有16个字符,读要从下一个开始
i = Winsock1.UBound + 1

Load Winsock1(i)
'载入一个新的winsock控件
strData = Empty
Lisport = port + 2 '连接端口
Senport = myport + 2 '设定本地监听端口
Num = i
With Winsock1(i)
.RemotePort = Lisport
.LocalPort = Senport
.RemoteHost = pingip
'设置了当有申请连接的时候将记录对方的IP,并新建一个winsock控件,
'连接方式什么的也进行设置
.Bind
End With
Winsock1(i).SendData "load a new users" &

看你的标题,似乎受过什么打击?....
这句是不是有问题?
Winsock1.GetData strData

这句是什么意思?pingip只有一个字节?
pingip = Mid(strData, 17)

if没有end if

'设置了当有申请连接的时候将记录对方的IP,并新建一个winsock控件,
'连接方式什么的也进行设置
然后发送的信息是什么意思?死循环?
Winsock1(i).SendData "load a new users" & Lisport & Senport

你分不够用么?我送些给你怎样?反正我用不了这么多.
好,入正题:
Winsock1.GetData strData
既然你定义了winsock1是数组,那么这里是不是应该在控件名后加索引呢?Winsock1(0).GetData strData

当运行的时候就提示:过程申明与通明事件或过程的描述不匹配

这样的话,最简单的方法就是让系统给你重新生成一个事件声明:把winsock1_DataArrival改掉,譬如改成abc,然后到窗体视图双击一下winsock1就可以了.
也可能是你的代码的其它地方错了.
'/////////////////////////////3
我上面说一大堆双击什么的,不过是让你想办法让系统重新生成一个标准的声明代码,因为出错提示就是说你的声明错的.
不过现在我看出来了...你的声明中,参数传递的方式搞错了:
ByVal Index As Integer, bytesTotal As Long
要改为
Index As Integer, ByVal bytesTotal As Long
你是自己改的参数吧?

"不吧。要是用Winsock1(0).GetData strData 的话那winsock1(n)发送的能收到吗?"
所有winsock1(n)收到数据