VB 版 (精华区)
发信人: zxfsnow (最近睡眠太少), 信区: VB
标 题: 关于vb5的socket
发信站: 哈工大紫丁香 (2000年06月06日09:04:52 星期二), 转信
标 题: 关于vb5的socket
发信站: 虎踞龙盘东南站 (Tue Jun 22 21:13:39 1999), 转信
下面这篇文章来自与"水母清华"
: 我用VB5.0带的Socket控件写了个很简单的程序,
: 可是非常奇怪的是一但一个Winsock.Accept后,
: 在客户端做Close操作后,就再也联不上了,老说Address in use等。
: 但如果在Server做CLOSE却又没有影响,奇怪。
: 谁对这样比较明白,请不吝赐教。
服务器端要做检查,发现哪个client断掉后应该释放。
检查State属性:
sckClosed 0 Default. Closed
sckOpen 1 Open
sckListening 2 Listening
sckConnectionPending 3 Connection pending
sckResolvingHost 4 Resolving host
sckHostResolved 5 Host resolved
sckConnecting 6 Connecting
sckConnected 7 Connected
sckClosing 8 Peer is closing the connection
sckError 9 Error
--
【 在 walklooktalk (千红一窟) 的大作中提到: 】
: 怎么释放呢?用Close吗?
: 我Close了呀,还是不行,奇怪。
: 你能不能说详细一些,或给个例子 ,谢谢。
比如说检查可以放在一个计时器里:
...(...)
If sckServer(i).State <> sckConnected Then
sckServer(i).Close
End If
End Sub
在WinSock控件的ConnectionRequest事件里可以这样接受客户连接:
Private Sub sckServer_ConnectionRequest(Index As Integer, ByVal requestID
As Long)
If Index = 0 Then
Dim i As Integer
Dim bFoundClosed As Boolean
bFoundClosed = False
For i = 1 To intMax
If sckServer(i).State = sckClosed Then
bFoundClosed = True
Exit For
End If
Next
If bFoundClosed Then
sckServer(i).LocalPort = 0
sckServer(i).Accept requestID
Else
intMax = intMax + 1
Load sckServer(intMax)
sckServer(intMax).LocalPort = 0
sckServer(intMax).Accept requestID
End If
End If
End Sub
--
以科计为本,以产业报国!
超越自我,飞跃无限!
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.235.249]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:5.186毫秒