1.看一下status属性,如果=7则正常连接
2.同样,=8则server断开连接
3.好象是=6
你仔细看一下MSDN里winsock的status属性吧

解决方案 »

  1.   

    1.开始时client.connect怎样检测已经连上server?
    检测wsClient.State = sckConnectedclient下线:触发winsockServer_Close事件
    server下线:触发winsockClient_Close事件
      

  2.   

    我想,可以在client,server之间每个一段时间不断的发送数据包,检测。
      

  3.   

    在msdn里查一下winsock的state属性,他表示的是连接状态,另外再看看winsock
    的事件都在什么条件下发生,应该能找到你想要的。
      

  4.   

    Close 事件
          当远程计算机关闭连接时出现。应用程序应正确使用 Close 方法关闭 TCP 连接。语法object_Close( )object 所在处代表一个对象表达式,其值是“应用于”列表中的对象。参数NoneError 事件 (Winsock 控件)
          无论何时,只要后台处理中出现错误(例如,连接失败,或者在后台收发数据失败)事件就会出现。语法object_Error(number As Integer, Description As String, Scode As Long, Source As String, HelpFile as String, HelpContext As Long, CancelDisplay As Boolean)Error 事件的语法包含下面部分:部分 描述 
    object 对象表达式,其值是“应用于”列表中的对象。 
    number 定义错误代码的整数。请参阅下述有关常数的“设置值”。 
    description 包含错误信息的字符串。 
    Scode 长 SCODE 
    Source 描述错误来源的字符串。 
    HelpFile 包含帮助文件名的字符串。 
    HelpContext Help 文件上下文。 
    CancelDisplay 指示是否取消显示。缺省值为 False,以此显示缺省的错误信息框。如果不想使用缺省的信息框,则将 CancelDisplay 设置成 True。 
    设置值number 的设置值是:常数 值 描述 
    sckOutOfMemory 7 内存不足 
    sckInvalidPropertyValue 380 属性值无效。 
    sckGetNotSupported 394 属性不可读。 
    sckSetNotSupported 383 属性是只读的。 
    sckBadState 40006 所请求的事务或请求本身的错误协议或者错误连接状态。 
    sckInvalidArg 40014 传递给函数的参数格式不确定,或者不在指定范围内。 
    sckSuccess 40017 成功。 
    sckUnsupported 40018 不受支持的变量类型。 
    sckInvalidOp 40020 在当前状态下的无效操作 
    sckOutOfRange 40021 参数越界。 
    sckWrongProtocol 40026 所请求的事务或请求本身的错误协议 
    sckOpCanceled 1004 取消操作。 
    sckInvalidArgument 10014 所请求的地址是广播地址,但未设置标记。 
    sckWouldBlock 10035 套接字不成块,而指定操作将使之成块。 
    sckInProgress 10036 制造块的 Winsock 操作在进行之中。 
    sckAlreadyComplete 10037 完成操作。未进行制造块的操作。 
    sckNotSocket 10038 描述符不是套接字。 
    sckMsgTooBig 10040 数据报太大,不适于缓冲区的要求,因而被截断。 
    sckPortNotSupported 10043 不支持指定的端口。 
    sckAddressInUse 10048 地址在使用中。 
    sckAddressNotAvailable 10049 来自本地机器的不可用地址。 
    sckNetworkSubsystemFailed 10050 网络子系统失败。 
    sckNetworkUnreachable 10051 此时不能从主机到达网络。 
    sckNetReset 10052 在设置 SO_KEEPALIVE 时连接超时。 
    sckConnectAborted 11053 由于超时或者其它失败而中止连接。 
    sckConnectionReset 10054 通过远端重新设置连接。 
    sckNoBufferSpace 10055 没有可用的缓冲空间。 
    sckAlreadyConnected 10056 已连接套接字。 
    sckNotConnected 10057 未连接套接字。 
    sckSocketShutdown 10058 已关闭套接字。 
    sckTimedout 10060 已关闭套接字。 
    sckConnectionRefused 10061 强行拒绝连接。 
    sckNotInitialized 10093 应首先调用 WinsockInit。 
    sckHostNotFound 11001 授权应答:未找到主机。 
    sckHostNotFoundTryAgain 11002 非授权应答:未找到主机。 
    sckNonRecoverableError 11003 不可恢复的错误。 
    sckNoData 11004 无效名,对所请求的类型无数据记录。 
      

  5.   

    ConnectionRequest 事件
          当远程计算机请求连接时出现。 仅适用于 TCP 服务器应用程序。在请求一个新连接时激活该事件。激活事件之后,RemoteHostIP 和 RemotePort 属性存储有关客户的信息。 
    语法object_ConnectionRequest (requestID As Long)ConnectionRequest 的语法有包含下面部分:部分 描述 
    object 对象表达式,其值是“应用于”列表中的对象。 
    requestID 新连接请求标识。应把此参数传递给第二个控件示例上的 Accept 方法。 
    说明服务器可决定是否接受连接。如果不接受新连接,则同级人员(客户)将得到 Close 事件。(在一个新控件示例上)用 Accept 方法接受新连接。
      

  6.   

    DataArrival 事件
          当新数据到达时出现。语法object_DataArrival (bytesTotal As Long)DataArrival 事件的语法包含下面部分:部分 描述 
    object 对象表达式,其值是“应用于”列表中的对象。 
    bytesTotal Long。可获取的数据总数量。 
    说明如果没有获取一个 GetData 调用中的全部数据,则事件不会出现。只有存在新数据时才激活事件。可随时用 BytesReceived 属性检查可用的数据量。