解决方案 »

  1.   

     
    State 属性(Winsock 控件)
          返回控件的状态,用枚举类型来表示。在设计时是只读的,而且是不可用的。语法object.Stateobject 所在处代表一个对象表达式,其值是“应用于”列表中的对象。数据类型Integer设置值State 属性的设置值是:常数 值 描述 
    sckClosed 0 缺省的。关闭 
    sckOpen 1 打开 
    sckListening 2 侦听 
    sckConnectionPending  3 连接挂起 
    sckResolvingHost  4 识别主机 
    sckHostResolved  5 已识别主机 
    sckConnecting  6 正在连接 
    sckConnected  7 已连接 
    sckClosing  8 同级人员正在关闭连接 
    sckError  9 错误 
      

  2.   

    状态不是7,就是没有连接好。网络嘛,怎么不会有个延迟什么的。你连了,并不是说马上就连好了,就可以发了。connect之后,地层的程序才在干活,你马上就发生,当然出错。每次发送之前判断状态是不是7,这样可以了吧。
      

  3.   

    通讯是异步的,要分步执行。
    Option ExplicitPrivate Sub Command1_Click() '连接'
        Winsock1.remoteip = xxx.xxx.xxx.xxx
        Winsock1.RemotePort = xxxxx
        Winsock1.Connect
    End SubPrivate Sub Command2_Click() '发送'
        If Winsock1.State = sckConnected Then
            Winsock1.SendData "ttt"
        Else
            MsgBox "状态 " & Winsock1.State & vbCrLf & "不能发送。", vbExclamation
        End If
    End SubPrivate Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
        MsgBox "错误代码 " & Number & vbCrLf & Description, vbExclamation
    End Sub
      

  4.   


    用doevents可以,不过到时候程序退出可能会有影响