love5173 发表于 2013-1-4 20:13:21

回复 15# cfs43210
加QQ说吧

cfs43210 发表于 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

cfs43210 发表于 2013-1-4 20:23:13

你QQ在哪看

cfs43210 发表于 2013-1-4 20:23:41

回复 16# love5173
你QQ在哪看

love5173 发表于 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我私聊你了

cfs43210 发表于 2013-1-4 20:29:19

本帖最后由 cfs43210 于 2013-1-4 20:31 编辑

回复 16# love5173
你加我吧

ceoguang 发表于 2013-1-6 12:06:22

提醒一下两位大牛要注意的几个问题
1 循环connect 连接无需进行sleep,因为au3的内置tcp函数是阻塞的,连不上服务器你想退出来都困难.
2 send一定要判断返回值.TCPRecv不能仅仅判断返回的内容是否为空
3 不要尝试在adlib之类的函数里面操作socket
....

cfs43210 发表于 2013-1-7 10:34:21

谢谢你回复!怎么取返回值,麻烦你给我回复。问题己查到不是这代码问题,是我上级拨号问题,当重启电脑时因为启动项启动程序多,拨号程序运行了2秒没出现拨号窗口1,跳到拔号窗口2,因为窗口没设置时问等待,造成一直等待,设置等待时间就定了。

cfs43210 发表于 2013-1-7 10:43:48

回复 22# ceoguang 谢谢你回复,请问怎么取返回值,我之前还没用adlib,现在用了不知到会出现什么问题,谢谢!

annybaby 发表于 2013-1-7 10:51:21

回复 24# cfs43210


    估计ceoguang会郁闷到不行~~呵呵

cfs43210 发表于 2013-1-7 11:07:27

回复 25# annybaby
ceoguang怎么讲会郁闷到不成。

love5173 发表于 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有聊天,他对你说的三点压根没看懂,他基础差有一定关系,大神惜字如金也有关系啊
总之感谢超级版主的指点{:face (301):}

ceoguang 发表于 2013-1-8 02:18:58

回复 27# love5173
问题1 tcpconnetc在连接不上服务器的情况下默认超时时间为21S,如果连得上,有必要Sleep么?如果连不上,21S还不足够?
问题2 请搜索论坛,关键词keeplive
问题3.adlib实际是一个回调,而且是居于当前线程的回调,无论什么语言,都不推荐在回调函数中进行阻塞操作,除非是居于另一线程或线程池的回调.

love5173 发表于 2013-1-8 14:20:40

回复 28# ceoguang


    keeplive我什么都没搜到

ceoguang 发表于 2013-1-8 16:54:10

回复 29# love5173

http://www.autoitx.com/thread-28446-1-1.html
页: 1 [2] 3
查看完整版本: 还是TCP通信问题,求助高手解释,谢谢!(己解决)