关于winsock的状态

adwnjt 2014-10-19 03:55:35
最近在做一个工具的时候,发现一个问题
如果想让winsock.state=7的话,必须要等执行winsock.connect命令的事件结束才可以
例如:
sub command1_click()
winsock1.remoteip=xxx.xxx.xxx.xxx
winsock1.remoteport=xxxxx
winsock1.connect
end sub

点击command1之后的话,winsock1.state是为7的
如果添加一条发送命令的话,"ttt"这个字符串是无法发送成功的,因为这时候的winsock1.stat为6
代码如下
sub command1_click()
winsock1.remoteip=xxx.xxx.xxx.xxx
winsock1.remoteport=xxxxx
winsock1.connect
'新添加命令
winsock1.senddata "ttt"
end sub

如果把winsock1.connect命令写进function或者sub的再由别的事件调用的话,那就要等调用该function或者sub的事件结束winsock1.stat才为7
问题就是这样,大家有没有碰到过?
或者是我的用法不对吗?
...全文
1066 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
864记忆 2017-02-25
  • 打赏
  • 举报
回复
最近在做一个利用winsock控件接收数据的小程序,总是存在丢包现象(就是数据不全),全部定位信息是84位,有时接收到78,有时80,有时82,很少时候84位,这种现象不知道到底什么原因,开始标志和结束标志都能收到,就是数据包中间的经纬度有时不全,请高手们帮忙啊!
笨狗先飞 2014-12-10
  • 打赏
  • 举报
回复
引用 5 楼 startbin 的回复:
如果加了doevents呢
用doevents可以,不过到时候程序退出可能会有影响
Tiger_Zhao 2014-12-10
  • 打赏
  • 举报
回复
通讯是异步的,要分步执行。
Option Explicit

Private Sub Command1_Click() '连接'
Winsock1.remoteip = xxx.xxx.xxx.xxx
Winsock1.RemotePort = xxxxx
Winsock1.Connect
End Sub

Private Sub Command2_Click() '发送'
If Winsock1.State = sckConnected Then
Winsock1.SendData "ttt"
Else
MsgBox "状态 " & Winsock1.State & vbCrLf & "不能发送。", vbExclamation
End If
End Sub

Private 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
startbin 2014-12-10
  • 打赏
  • 举报
回复
如果加了doevents呢
adwnjt 2014-12-07
  • 打赏
  • 举报
回复
引用 2 楼 spt_petrolor 的回复:
状态不是7,就是没有连接好。 网络嘛,怎么不会有个延迟什么的。你连了,并不是说马上就连好了,就可以发了。 connect之后,地层的程序才在干活,你马上就发生,当然出错。 每次发送之前判断状态是不是7,这样可以了吧。
你完全没明白我的意思,我上面的例子,就算是延迟1天,它的状态也还是6,不会变到7,根本不是延迟的原因;请仔细看一下。
qxw_csdn 2014-11-04
  • 打赏
  • 举报
回复
谢谢,也来学习。
王二.麻子 2014-11-02
  • 打赏
  • 举报
回复
状态不是7,就是没有连接好。 网络嘛,怎么不会有个延迟什么的。你连了,并不是说马上就连好了,就可以发了。 connect之后,地层的程序才在干活,你马上就发生,当然出错。 每次发送之前判断状态是不是7,这样可以了吧。
赵4老师 2014-10-20
  • 打赏
  • 举报
回复
State 属性(Winsock 控件) 返回控件的状态,用枚举类型来表示。在设计时是只读的,而且是不可用的。 语法 object.State object 所在处代表一个对象表达式,其值是“应用于”列表中的对象。 数据类型 Integer 设置值 State 属性的设置值是: 常数 值 描述 sckClosed 0 缺省的。关闭 sckOpen 1 打开 sckListening 2 侦听 sckConnectionPending 3 连接挂起 sckResolvingHost 4 识别主机 sckHostResolved 5 已识别主机 sckConnecting 6 正在连接 sckConnected 7 已连接 sckClosing 8 同级人员正在关闭连接 sckError 9 错误

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧