实在搞不明白,有谁说说?

解决方案 »

  1.   

    我看了一下,winsock的status是4
      

  2.   

    Winsock1.RemoteHost = "127.0.0.1"
    Winsock1.RemotePort = "80"
    Winsock1.Connect不太明白为什么连不上
      

  3.   

    Winsock1.Connect
    需要時間的,不能馬上就執行,也不能馬上就顯示它的狀態
      

  4.   

    我把断点设在winsock1.connect处就会出现前面这个现象,但不设断点程序就会向前执行,但问题又来了,到了winsock1.senddata执行后,断点监视显示"溢出上下文"
      

  5.   

    Winsock1.Connect不能马上sendate
    这样肯定出错
    要不在把senddate放在winsock1_connect事件里面,要不就放在另外一个按钮事件里面
      

  6.   

    我当然是放在connect事件里面了,现在的现象是我设置断点单步它就走不下去,但不这样的话,还是可以执行,但只能执行一次,第二次就会报错。有人说是WINSOCK的BUG,我下了SP5但装不上去,于是我在SP5里面把WINSCK.OCX找到提取出来并注册在系统里,但问题还是没解决。
      

  7.   

    Private Sub cmdSign_Click()
    Winsock1.RemoteHost = "192.168.0.5"
    Winsock1.RemotePort = "80"
    Winsock1.Connect
    End Sub和第一次是一样的,而且上次的代码执行结束后,有close,跟踪的状态显示也是close,但一赋值就报错40020
      

  8.   

    Private Sub cmdSign_Click()
    if winsock1.state<>0 then
    winsock1.closet
    endif
    Winsock1.RemoteHost = "192.168.0.5"
    Winsock1.RemotePort = "80"
    Winsock1.Connect
    End Sub
    这样看看,有可能关闭不干净
      

  9.   

    看看服务器端的断口号是否一样,而且是否执行了listen.
      

  10.   

    不懂VB,不过socket如果设置为阻塞的话,是没有事件产生的,当然VB内部处理产生事件例外。你可以尝试使用GetLastError看看?(不知道在VB中是否有效,^_^)
      

  11.   

    我现在明白一点问题的所在了,是winsock的状态在影响结果,如果state不是sckConnected的话,执行senddata或getdata都会报错,但每一次连接不能保证一定会连接上,所以我加了一些代码去监测state,我发现,在winsock.connect执行后,正常的状态好象只能是sckConnecting,于是新问题是:在哪个阶段检测sckConnected状态,是winsock_connect事件里吗?检测出来不是sckConnected,又该跳转到哪儿去重连?我在cmd_click事件里重试,会发生堆栈溢出的情况.
      

  12.   

    可以有一个占用资源的方法
    Winsock1.RemoteHost = "127.0.0.1"
    Winsock1.RemotePort = "80"
    Winsock1.Connect
    DO UNTIL WINSOCK1.STATE=7 
    WINSOCK1.SENDDATE
    LOOP
    在用一个TIMMER控件检测到一定时间就显示连接超时
      

  13.   

    影子哥能不能给个详细的代码,我现在在dataarrival事件里加了状态判断,但执行起来就和撞大运一样,不知道哪一次能连上,我希望能做成自动关闭并重连直到连上。
      

  14.   

    这样说吧,客户端连接服务器成功的话会触发winsocket_connect事件。
      

  15.   

    我跟踪的结果,state状态在connect事件里都是7,但到了dataarrival事件里有可能变成8(closed),这时该回到哪一步去重连?
      

  16.   

    你的服务器是不是就用1个socket阿,要用数组
      

  17.   

    服务器是IIS,我没有用.close,重连的时候状态在6和7之间怎么调试,connect以后只能是6,而senddata需要的状态是7
      

  18.   

    晕,你贴全部代码吧,我看看或者给我的csdn邮箱发代码
      

  19.   

    DO UNTIL WINSOCK1.STATE=7 
    if winsock1.state=7 then
         WINSOCK1.SENDDATE
    end if
    doevents
    LOOP
    6-7之间用1个死循环
      

  20.   

    Private Sub cmdSign_Click()
    Winsock1.Close
    'If Winsock1.State = 0 Then
    Winsock1.RemoteHost = "192.168.0.5"
    Winsock1.RemotePort = "80"
    Winsock1.Connect
    End SubPrivate Sub Winsock1_Connect()
    Dim strCommand As String
    Dim strWebPage As String
    strWebPage = "http://192.168.0.5/wn/sign.jpg"
    strCommand = "GET " + strWebPage + " HTTP/1.0" + vbCrLf
    strCommand = strCommand + " Accept: */*" + vbCrLf
    strCommand = strCommand + " Accept: text/html" + vbCrLf
    strCommand = strCommand + vbCrLf
    Do Until Winsock1.State = 7 '这是你刚才所说的代码,在这里不会执行,因为State到这里就是7
    If Winsock1.State = 7 Then
         Winsock1.SendData strCommand
    End If
    DoEvents
    Loop
    End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim bytData() As Byte
       
        If Winsock1.State = 7 Then
        Winsock1.GetData bytData, vbByte, bytesTotal  
        Else                    '如果winsock连接不成功,重连
        Call cmdSign_Click
        Call Winsock1_Connect
        Winsock1.GetData bytData, vbByte, bytesTotal  
        End If
    End Sub
      

  21.   

    发现问题在哪儿了,改了一下
    Do
    If Winsock1.State = 7 Then
         Winsock1.SendData strCommand
    End If
    DoEvents
    Loop Until Winsock1.State = 7