问题如下:
       一个利用winsock控件数组的服务器与客户端通讯,现在出现一个问题就是服务器突然死机或拔掉电源了再重启,注意不是按电源按钮重启,软件重新进入后就不能与客户端通讯了。
      我分析原因如下,因为服务器死机或拔掉电源,服务器端软件不是正常退出,软件重启后,客户端的winsock的连接状态还是连接的,所以不会再向服务器发连请求
我在软件正常退出是这样做的:
    Server(Index).Close   ‘Server为Winsock控件数组。                         
    Unload Server(Index)
客户端用一个定时器检查连接:
Private Sub checkNet_Timer()
On Error Resume Next
If Winsock.State <> 7 Then
  Winsock.close
  Winsock.Connect
End If
客户端在服务器端没有发关闭连接过来, winsock的状态就是保持连接的,造成无法与服务器连接。winsock控件为什么自动在与服务器不能连接后更新其状态。请问高手,有什么解办法?

解决方案 »

  1.   

    这个是tcp协议中不带的,你只有自己处理
    去掉 on error resume next
    发现错误,客户端自动从连
      

  2.   

    //这个是tcp协议中不带的,你只有自己处理
    //去掉 on error resume next
    //发现错误,客户端自动从连
    如果只去掉on error resume next 还是一样吧,因为winsock状态还是连接的,不会重连。
    如果去掉 If Winsock.State <> 7 Then
    那变成时刻发送连接请求。服务端时时要处理接受,并且连接下标变化,对服务器操作有影响。
      

  3.   

    定时sendate senddate就会有错误发生
      

  4.   

    //在客户端重新连接嘛,
    //就像QQ断线后都会定时重新连接
    //你说600个客户端重新更新那有什么问题?
    1、客户端重连问题在于客户端的状态是连接的。
    //你说600个客户端重新更新那有什么问题?
    2、以前使用正常,最近服务器电脑经常死机才发现这个BUG,如果修改客户端程序,有600多台电脑要更新,要是在服务器端修改一下就好了。
      

  5.   

    只有改客户端,服务器修改没用
     因为是互联网 客户端不连接你,你怎么知道他在哪
    tcp 连接是一个有连接的连接 如果一方断了必须从新连接才能通讯  你总不至于叫服务器连接客户端,那也不可能 客户端的控件是连接状态,根本没有监听的,没法建立连接
      

  6.   

    影子兄:Private Sub checkNet_Timer()
    On Error Resume Next
    Winsock.SendData "TestOnline"  ’是在这加一句后,如果有错误,winsock会更新自已的状态吗??
    If Winsock.State <> 7 Then
      Winsock.close
      Winsock.Connect
    End If还是这样做:
    Private Sub checkNet_Timer()
    On Error Goto Err
    Winsock.SendData "TestOnline"
    Exit Sub
    Err:
       Winsock.close
      Winsock.Connect
    Exit Sub
    服务器端要做接受的吗?
    这样做会不会有时候不一定是没有连接出现错误,而造成重连
      

  7.   

    服务器会接受 不做处理就行乐
    只要是错误,你客户端就有问题,你判断是winsock的错误就行乐,具体查msdn
      

  8.   

    问题解决,Private Sub checkNet_Timer()
    On Error Resume Next
    Winsock.SendData "TestOnline"  ’是在这加一句后,如果有错误,winsock会更新自已的状态吗??
    If Winsock.State <> 7 Then
      Winsock.close
      Winsock.Connect
    End If
    这样解决最好。
    原来的其实只要客户有相关数据发送操作就重连了