找回密码
 加入
搜索
楼主: cfs43210

[网络通信] 还是TCP通信问题,求助高手解释,谢谢!(己解决)

 火.. [复制链接]
发表于 2013-1-4 20:13:21 | 显示全部楼层
回复 15# cfs43210
加QQ说吧
 楼主| 发表于 2013-1-4 20:14:53 | 显示全部楼层
Func conn()
        ;ToolTip("888888888888888888", 400, 1)
        Do
                Sleep(1000)
                Global $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
        Until $ConnectedSocket <> -1
$sMsg = StringToBinary($reg & "|" & $ad1 & "|" & $ad2 & "|" & $zcxby & "|" & $scxby, 4)
                TCPSend($ConnectedSocket, $sMsg)

        ;AdlibRegister("Sendx", 5000)
        ;AdlibRegister("GMCALL", 5000)
EndFunc   ;==>conn

Func Sendx()
        ;$ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
        If @error Then
                ;If $ConnectedSocket <> -1 Then
                $sMsg = StringToBinary($reg & "|" & $ad1 & "|" & $ad2 & "|" & $zcxby & "|" & $scxby, 4)
                TCPSend($ConnectedSocket, $sMsg)
                ;Return 0
                ToolTip("01", 40, 1)
                Sleep(400)
                ;EndIf
        EndIf
EndFunc   ;==>Sendx

Func G
这样可以发出消息回复 13# love5173
 楼主| 发表于 2013-1-4 20:23:13 | 显示全部楼层
你QQ在哪看
 楼主| 发表于 2013-1-4 20:23:41 | 显示全部楼层
回复 16# love5173
你QQ在哪看
发表于 2013-1-4 20:26:48 | 显示全部楼层
回复 19# cfs43210
AdlibRegister ("done")
While 1
        Do
                Sleep(1000)
                $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
        Until $ConnectedSocket <> -1
        $sMsg = StringToBinary($reg & "|" & $ad1 & "|" & $ad2 & "|" & $zcxby & "|" & $scxby, 4)
        TCPSend($ConnectedSocket, $sMsg)

WEnd
Func done()
        Switch @HOUR & @MIN & @SEC
                Case 080000 ;早上8点执行以下

                Case 200000 ;然后晚上8点又执行以下
        EndSwitch
EndFunc   ;==>done
我私聊你了
 楼主| 发表于 2013-1-4 20:29:19 | 显示全部楼层
本帖最后由 cfs43210 于 2013-1-4 20:31 编辑

回复 16# love5173
你加我吧
发表于 2013-1-6 12:06:22 | 显示全部楼层
提醒一下两位大牛要注意的几个问题
1 循环connect 连接无需进行sleep,因为au3的内置tcp函数是阻塞的,连不上服务器你想退出来都困难.
2 send一定要判断返回值.TCPRecv不能仅仅判断返回的内容是否为空
3 不要尝试在adlib之类的函数里面操作socket
....
 楼主| 发表于 2013-1-7 10:34:21 | 显示全部楼层
谢谢你回复!怎么取返回值,麻烦你给我回复。问题己查到不是这代码问题,是我上级拨号问题,当重启电脑时因为启动项启动程序多,拨号程序运行了2秒没出现拨号窗口1,跳到拔号窗口2,因为窗口没设置时问等待,造成一直等待,设置等待时间就定了。
 楼主| 发表于 2013-1-7 10:43:48 | 显示全部楼层
回复 22# ceoguang 谢谢你回复,请问怎么取返回值,我之前还没用adlib,现在用了不知到会出现什么问题,谢谢!
发表于 2013-1-7 10:51:21 | 显示全部楼层
回复 24# cfs43210


    估计ceoguang会郁闷到不行~~呵呵
 楼主| 发表于 2013-1-7 11:07:27 | 显示全部楼层
回复 25# annybaby
ceoguang怎么讲会郁闷到不成。
发表于 2013-1-7 22:24:54 | 显示全部楼层
本帖最后由 love5173 于 2013-1-7 22:26 编辑

回复 22# ceoguang

谢谢大神的指点
1、connect函数是有超时时间的超时就退出,加不加sleep 还是要根据实际情况来定,有些是需要立即尝试连接的,有的是因为其他原因正常的关闭了服务器几个小时,虽然说做个connect命令对电脑没什么压力,但是减少一些总归是好的
2、tcprecv命令不好用,服务器那边路由器重启了,tcprecv并不会返回@error,原因不明,但是send肯定是返回@error的
3、这个不要尝试在adlib之类的函数里面操作socket的问题,我再解释一下,不做延时类命令的原因是,害怕实际运行完自定义函数的时间超出预计时间,造成一些对时间、次数比较敏感的操作造成误差。毕竟单线程的东西,卡那里不动,什么都进行不下去
4、我跟楼主在Q有聊天,他对你说的三点压根没看懂,他基础差有一定关系,大神惜字如金也有关系啊
总之感谢超级版主的指点
发表于 2013-1-8 02:18:58 | 显示全部楼层
回复 27# love5173
问题1 tcpconnetc在连接不上服务器的情况下默认超时时间为21S,如果连得上,有必要Sleep么?如果连不上,21S还不足够?
问题2 请搜索论坛,关键词keeplive
问题3.adlib实际是一个回调,而且是居于当前线程的回调,无论什么语言,都不推荐在回调函数中进行阻塞操作,除非是居于另一线程或线程池的回调.
发表于 2013-1-8 14:20:40 | 显示全部楼层
回复 28# ceoguang


    keeplive我什么都没搜到
发表于 2013-1-8 16:54:10 | 显示全部楼层
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-16 17:05 , Processed in 0.070339 second(s), 13 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表