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毫秒