通讯是异步的,要分步执行。 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
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 错误
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
用doevents可以,不过到时候程序退出可能会有影响