找回密码
 加入
搜索
查看: 4276|回复: 5

[网络通信] 此代码会造成网络堵塞!求高手优化!

[复制链接]
发表于 2011-6-22 17:37:36 | 显示全部楼层 |阅读模式
本帖最后由 love5173 于 2011-6-22 17:39 编辑

这个是帮人写的一个小工具就是有GM 问话的时候给报警一下,但是经常会出现堵塞网络造成别的程序不能通信,我也不敢说一定这个代码的问题,我先发下代码,大家看看!
因为里面牵扯到跟服务器通信,但是多连接我不会,所以照抄了别人的部分代码,见笑了!
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_icon=C:\WINDOWS\system32\SHELL32.dll|-19
#AutoIt3Wrapper_outfile=..\程序\rift报警\监控RIFT.exe
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
;~ by yeqing880
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
;Opt('MustDeclareVars', 1)
TCPStartUp()

;AdlibRegister ("Mem",3000)
Global $Socket
 
conn()

While 1
        $sRecv=TCPRecv($Socket,7788,1)
                        If @error Then 
                        AdlibUnRegister ("sendx")
            AdlibUnRegister ("GMCALL")
                        
                        conn()
                        EndIf

WEnd
 
;While 1
;Sleep(1000)       
;WEnd
 
Func Sendx() ;报告服务器在线
        $ssend=TCPSend ($Socket,StringToBinary("online",4))
EndFunc
 
Func conn() ;开始连接
Do
Sleep (1000)
$Socket = TCPConnect(FileRead("\\192.168.0.88\wanghongbo\报警IP.txt"),7788) 
Until $Socket <> -1
AdlibRegister ("GMCALL",6000)
AdlibRegister ("sendx",5000)
EndFunc
 
Func Mem();释放内存
        Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, _
        'int', False, 'int', @AutoItPID)
        Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0])
        DllCall("kernel32.dll" , 'int', 'CloseHandle', 'int', $ai_Handle[0])
EndFunc
Func GMCALL() ;GM报警
        ;MsgBox(0,"","time",1)
        If  look() Then
        ;$szData ="GMcall....."
            ;If @error Or $szData = "" Then ExitLoop
        TCPSend ($Socket,StringToBinary("GMcall",4))
        GUICreate("报警",@DesktopWidth,@DesktopHeight,0,0,-1)
        GUICtrlCreateLabel("GM报警", -1, -1, @DesktopWidth, @DesktopHeight)
        GUICtrlSetFont(-1, 300, 800, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFF0000)
    GUISetState(@SW_SHOW)
                          
While 1
WinSetOnTop("报警","",1)
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then 
AdlibUnRegister ("sendx")
AdlibUnRegister ("GMCALL")
TCPShutdown()

Exit
EndIf
WEnd
EndIf
EndFunc
Func look() ;查找像素
        AutoItSetOption ("WinTitleMatchMode",2)
        
        If ProcessExists("RIFT.exe")<>0 Then
        $array=WinList("RIFT","")
        ;MsgBox(0,"",$array[0][0])
                ;While IsArray($array)
                ;        Sleep(5000)
                For $i=1 To $array[0][0]
                $pos= WinGetPos($array[$i][1]) 
                PixelSearch ($pos[0]+10,$pos[3]+$pos[1]-40,$pos[3]+$pos[1]-160,$pos[0]+100,0xF059A3,3,2,$array[$i][1])
                If Not @error Then
                PixelSearch ($pos[0]+10,$pos[3]+$pos[1]-40,$pos[3]+$pos[1]-160,$pos[0]+100,0xB7477D,3,2,$array[$i][1])
                If Not @error Then 
                        ;MsgBox(0,"","find")
                Return 1
                EndIf
            Else
                ;MsgBox(0,"","no")
        Return 0
EndIf
                Next
;        WEnd
Else
        Return 0
        EndIf
EndFunc

                           
发表于 2011-6-22 18:16:06 | 显示全部楼层
第39行
$Socket = TCPConnect(FileRead("\\192.168.0.88\wanghongbo\报警IP.txt"),7788)
FileRead("\\192.168.0.88\wanghongbo\报警IP.txt")返回是不是完整的IP呢?
发表于 2011-6-22 18:18:07 | 显示全部楼层
回复 2# daiyu116
还是觉得应该把这块改一下:
Do
Sleep (1000)
$Socket = TCPConnect(FileRead("\\192.168.0.88\wanghongbo\报警IP.txt"),7788)
Until $Socket <> -1
况且TCPConnect不成功,@error值也不只是-1,还有0的情况呢
 楼主| 发表于 2011-6-22 22:56:04 | 显示全部楼层
回复 3# daiyu116

是完整的IP,你觉得造成网络堵塞的是这个地方吗?
发表于 2011-6-23 13:59:01 | 显示全部楼层
回复 4# love5173

      这个地方应该不会造成拥堵,请看41,42句。意思分别是每6秒调用一次GMCALL函数,再每5秒调用一次sendx函数,是不是有可能是这里的问题呢?这时套接字肯定是没释放的。
      而且逻辑上有点不通畅。请LZ再整理下代码吧。
 楼主| 发表于 2011-6-23 15:13:04 | 显示全部楼层
本帖最后由 love5173 于 2011-6-23 15:19 编辑

回复 5# daiyu116
谢谢,我再改改
在23行 我增加了TCPCloseSocket ($Socket)代码,程序继续测试中, 希望有发现其他错误的给予指正,不胜感激
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 01:40 , Processed in 0.072558 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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