永发信息网

关于vb的winsock控件的状态问题

答案:2  悬赏:70  手机版
解决时间 2021-11-29 21:03
关于vb的winsock控件的状态问题
最佳答案
看明白了,碰见过。
这是因为Winsock的Connect方法不是同步的,(我的猜测是)connect语句的执行和实质上的连接过程是在不同线程中完成的。因此往往

winsock1.connect虽然执行完毕但还没有真正连接上,winsock仍然停留在6状态,此时接下来的
winsock1.senddata "ttt"就自然会失败。



给出两个解决方案。
第一种是把连接和发数据分开到两个按钮的事件里,这样就有足够的时间让winsock真正连接上。代码就不写了,很容易实现。


第二种,如果不愿意用两个按钮,一定要连接好之后立刻发数据的话,可以在一个回圈里轮询winsock1的状态,直到变成7,注意回圈里最好有sleep和DoEvents来释放cpu,否则有造成假死的风险。以下是代码
'首先要声明Sleep的Win32 API
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


sub command1_click()
winsock1.remoteip=xxx.xxx.xxx.xxx
winsock1.remoteport=xxxxx
winsock1.connect
do until winsock1.state=7
    sleep 1
    DoEvents
    '避免假死
loop
winsock1.senddata "ttt"
end sub不懂请追问满意请采纳


参考资料http://bbs.csdn.net/topics/320261964
追问对不起,我都打算放弃了,就没有来看;我试过循环等待,30秒以上仍然是6,然后我就中断了等待,工具是在局域网内部使用,30秒都无法连上,这已经不可能了。
虽然没能解决问题,还是感谢你的回复!
全部回答

偶然看到了这个问题,添加两个方案

  1. timer里面执行链接操作和发送数据

    全局变量tm1i=0

tm1i=tm1i+1

select case tm1i

case 1    

connect

case2

if state=7 then senddata

doevents

timer.enable=false

end select

2.服务器在连接成功后发送一条信息,在你的程序员dataarrive里面收到这条信息后发送数据        

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
小区丢失价值五六千财物 派出所为什么最后都
星辰变动漫什么时候上映
朋友送了我一盒羽沢益生菌果蔬酵素,说能排毒
有哪些数学著作
EVA塑胶的生产厂家有哪些?
今天大校长刚微信群批评了单位的一些人,我紧
起诉宜昌富艺制衣有限责任公司需要准备哪些东
join sb in 和join sb for的区别
如图所示是有关浮力的小实验:(1)在薄塑料
51升学网的专升本怎样,正规吗
韩国十九禁电影在哪看
在道家学说中 现实中红色闪电意味着什么意思
红警2共和国之辉,怎样让刚出来的坦克是三级
0°经线位于东西半球的________半球上,180°
如何进行新时期大学生个性及创新能力的培养
推荐资讯
梦幻西游大唐转什么门派好?
经济特区比如:深圳市公安边防副支队长相当于
单选题下列叙述,正确的是A.中心商务区为了追
求个白酒广告策划主题
古言小说女主叫云卿,男主姓风,有两个身份,
考研问题 听说考研专业课都是自己选考1-2门
特种公野猪怎么分辨优质
今年刚拿到的河北大学函授播音与主持艺术的毕
陕A牌照车能在渭南审车吗,都要带什么
广州2pm go crazy演唱会的歌单是什么?
列式计算.(1)80与45的和乘25与4的积,结果
大富豪KTV地址在哪,我要去那里办事,
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?