winsock发消息出错
lhxtx 2003-04-09 12:59:25 我在写c/s的程序
c端要显示在线用户的功能
s端用timer来每2秒钟发一次消息给c端
c端从s端发来的消息中读出在线用户
然后用combo显示出来
但在Combo1.RemoveItem i中出错。
我在s端用timer每隔1秒发一次onlineuse给c
c端把onlineuse这个变量里的用户分离出来显示到c端combo1上
==============
s端代码
Private Sub Timer1_Timer()
Dim i As Integer
On Error GoTo CloseErr
Label1.Caption = "活动连接数" & Ccount
'发消息给客户端。让C端显示在线人数
For i = 1 To IntwinSock1
If Winsock1(i).State <> sckClosed Then
If Winsock1(i).State = sckConnected Then Winsock1(i).SendData "#FlagUse#" & OnlineUse
DoEvents
End If
Next i
CloseErr:
End Sub
=============
c端部分代码
Dim GetStr As String, MyId As String
Winsock1.GetData GetStr
strFlag = Left(GetStr, 9)
StrRight = Right(GetStr, Len(GetStr) - 9)
Select Case strFlag
Case "#FlagUse#" '显示当然在线用户
iNum = Len(StrRight) / 20
For i = 0 To iNum - 1
AllUse = Mid(StrRight, 1 + i * 20, 20)
If Iuse = AllUse Then
Else
Form3.Combo1.AddItem AllUse '显示所有用户
End If
Next i
If iNum <> 0 And Form3.Combo1.List(0) <> "" Then
For i = 0 To Form3.Combo1.ListCount - 1
Form3.Combo1.RemoveItem i
Next i
End if
end select
断点调试时
strFlag = "#FlagUse#"
StrRight= "a "'有20个字节
我在测试中发现好像是因为s消息过快
还没得c分离用户名然后显示在combo上时
第二次消息又发过来。所以 GetStr 就会得到两个一样的用户名了///
如果时间等得再久些。那么会得到3个4个或更多的同样的用户名
有高手说是winsock缓存的问题。请问怎么解决