找回密码
 加入
搜索
查看: 1429|回复: 8

(解决不了算了~~哎~!)

[复制链接]
发表于 2009-6-20 16:09:20 | 显示全部楼层 |阅读模式
本帖最后由 lm959680 于 2009-6-24 14:36 编辑

实在是想不通了`~  请大家帮帮忙啊!`

本来以为自己找到问题所在`(提前把全部代码删除只剩下自认为错误代码)~~可是很失望

自己改成进程方式的了,可以解决时间问题,

但新问题 来了一大堆`~~不写异常进Edit里  数字不成比例,老问题 _TcpSocket() 函数还是卡~

如果还能指点优化,就更好`!!
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <CoProc.au3>
;#NoTrayIcon
Global $TSocket
Opt("GUIOnEventMode", 1)
opt("TrayIconDebug", 1)
if Not FileExists("srvmonitoring.ini") Then
        MsgBox(0, "警告", "未发现配置文件,程序将自动退出!", 6)
        Exit
EndIf
#Region ### START Koda GUI section ###
$Form1 = GUICreate("网络状态监控器 V1.0", 430, 160)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Label1 = GUICtrlCreateLabel("正在进行项目检测!", 1, 12, 430, 32, $SS_CENTER)
GUICtrlSetFont(-1, 18, 800, 0)
GUICtrlSetColor(-1, 0x0000FF)
$Edit1 = GUICtrlCreateEdit("", 0, 60, 430, 80, BitOr($WS_VSCROLL, $ES_READONLY))
GUICtrlSetBkColor(-1, 0xffffff)
$StatusBar1 = _GUICtrlStatusBar_Create($Form1)
Dim $aParts[3] = [110, 260, -1]
_GUICtrlStatusBar_SetParts($StatusBar1, $aParts)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$TcpSocket = _CoProc("_TcpSocket");使用子进程运行_TcpSocket()函数,并返回子进程PID
_CoProcReciver("_Reciver");注册_Reciver()函数来接收子进程传递过来的消息
While 1
                $begin =""
        $begin = TimerInit()
        While TimerDiff($begin) <10000
                _GUICtrlStatusBar_SetText($StatusBar1, @TAB & @YEAR & "/" & @MON & "/" & @MDAY & "  " & @HOUR & ":" & @MIN & ":" & @SEC, 2)
                        If $TSocket = 1 Then;此判断开关是判断_TcpSocket()函数是否运行完,否则忽略
                                _CloseHandle($TcpSocket);关闭上一个子进程,由于我本人不知道 _TcpSocket()函数运行完 会不会结束~~
                                $TcpSocket = _CoProc("_TcpSocket");使用子进程运行_TcpSocket()函数,并返回子进程PID
                                $TSocket = 0;判断开关改为0
                        EndIf
                        Sleep(1000)
        WEnd
        Sleep(100)
WEnd

Func _TcpSocket()
        Local $exp = "^([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){2}([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])[:](\d{1,5})[/]$"
        Local $a[100], $d[100], $r[100][4]
        Local $i = 1, $dz = 1, $z = 0, $x
        While 1 ;读配置文件的字段名 如果不连续(地址1..地址2..地址3..地址N) 则跳出循环
                $a[$i] = IniRead("srvmonitoring.ini", "监控", "地址" & $dz, "NoNew")
                If $a[$i] = "NoNew" Then ExitLoop
                $dz += 1
                $i += 1
                Sleep(100)
        WEnd
        TCPStartUp()
        For $i = $i - 1 To 1 Step -1
                if StringRegExp(StringTrimRight($a[$i], StringLen($a[$i]) - StringInStr($a[$i], "/")), $exp) Then ;用正则表达式判断格式 192.168.1.2:11/  包含对IP的检测  端口 判断简写 最多5位数 可超过 65535
                        $d = StringSplit(StringReplace($a[$i], "/", ":"), ":");将格式 192.168.1.1:11/路由器 中的 / 符号 改成 : 再放进数组里
                        For $s = 3 to 1 Step -1
                                $r[$i][$s] = $d[$s]
                        Next
                        $Socket = TCPConnect($r[$i][1], $r[$i][2])
                        If $Socket = -1 Then
                                _CoProcSend($gi_CoProcParent, "Edit1|" & $r[$i][3])
                                FileWriteLine("LogTcpSocket" & @MON & @MDAY & ".txt", @MON & "/" & @MDAY & "  " & @HOUR & ":" & @MIN & ":" & @SEC & "    " & "[" & $r[$i][3] & "]" & " 出现网络异常!")
                                $z += 1
                        EndIf
                        $x += 1
                        TCPCloseSocket($Socket)
                EndIf
                _CoProcSend($gi_CoProcParent, "StatusBar1|" & $x)
                _CoProcSend($gi_CoProcParent, "StatusBar11|" & $x - $z & "/" & $z)
        Next
        TCPShutdown()
        _CoProcSend($gi_CoProcParent, "Label1|" & $z)
        _CoProcSend($gi_CoProcParent, "process|ends")
EndFunc   ;==>_TcpSocket

Func _Reciver($vParameter)
        $aParam = StringSplit($vParameter, "|")
        Select
                Case $aParam[1] = "Label1"
                        If $aParam[2] <> 0 Then
                                GUICtrlSetData($Label1, "警告:检测到 " & $aParam[2] & " 个异常!")
                                GUICtrlSetColor($Label1, 0xff0000)
                        Else
                                GUICtrlSetData($Label1, "全部项目检测正常!")
                                GUICtrlSetColor($Label1, 0x008000)
                        EndIf
                Case $aParam[1] = "Edit1"
                        GUICtrlSetData($Edit1, @MON & "/" & @MDAY & "  " & @HOUR & ":" & @MIN & ":" & @SEC & "    " & "[" & $aParam[2] & "]" & " 出现网络异常!" & @CRLF, "Edit")
                Case $aParam[1] = "StatusBar1"
                        _GUICtrlStatusBar_SetText($StatusBar1, @TAB & "总项目:" & $aParam[2] & "个", 0)
                Case $aParam[1] = "StatusBar11"
                        $data = StringSplit($aParam[2], "/")
                        _GUICtrlStatusBar_SetText($StatusBar1, @TAB & "正常:" & $data[1] & "个 异常:" & $data[2] & "个", 1)
                Case $aParam[1] = "process"
                        $TSocket = 1
        EndSelect
EndFunc   ;==>_Reciver

Func Form1Close()
        exit
EndFunc   ;==>Form1Close

保存 srvmonitoring.ini
[监控]
地址1=192.168.1.2:11/路由器
地址2=192.168.1.2:22/监控服务器
地址3=192.168.1.2:33/电影服务器
地址4=192.168.1.2:44/网络服务
地址5=192.168.1.2:55/服务器

CoProc.au3
下载地址:
http://www.brsbox.com/filebox/down/fc/ad14580ae34d142ec2c444b1f2777e31
 楼主| 发表于 2009-6-20 16:12:39 | 显示全部楼层
本帖最后由 lm959680 于 2009-6-20 22:30 编辑

谢谢 3楼 4 楼的朋友帮助~~

原始版本
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
;#NoTrayIcon
Opt("GUIOnEventMode", 1)
opt("TrayIconDebug", 1)
Global $time = 1
if Not FileExists("srvmonitoring.ini") Then
        MsgBox(0, "警告", "未发现配置文件,程序将自动退出!", 6)
        Exit
EndIf
#Region ### START Koda GUI section ###
$Form1 = GUICreate("网络状态监控器 V1.0", 430, 160)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Label1 = GUICtrlCreateLabel("正在进行项目检测!", 1, 12, 430, 32, $SS_CENTER)
GUICtrlSetFont(-1, 18, 800, 0)
GUICtrlSetColor(-1, 0x0000FF)
$Edit1 = GUICtrlCreateEdit("", 0, 60, 430, 80, BitOr($WS_VSCROLL, $ES_READONLY))
GUICtrlSetBkColor(-1, 0xffffff)
Global $StatusBar1 = _GUICtrlStatusBar_Create($Form1)
Global $aParts[3] = [110, 260, -1]
_GUICtrlStatusBar_SetParts($StatusBar1, $aParts)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $begin =""
        $begin = TimerInit()
        While TimerDiff($begin) < 10000
                _GUICtrlStatusBar_SetText($StatusBar1, @TAB & @YEAR & "/" & @MON & "/" & @MDAY & "  " & @HOUR & ":" & @MIN & ":" & @SEC, 2)
                if $time = 1 Then
                        $time = 0
                        _TcpSocket()
                EndIf
                Sleep(1000)
        WEnd
        Sleep(100)
WEnd

Func _TcpSocket()
        Dim $a[100], $d[100], $r[100][4]
        Dim $i = 1, $dz = 1, $z = 0, $x
        While 1
                $a[$i] = IniRead("srvmonitoring.ini", "监控", "地址" & $dz, "NoNew")
                If $a[$i] = "NoNew" Then ExitLoop
                $dz += 1
                $i += 1
                Sleep(100)
        WEnd
        TCPStartUp()
        For $i = $i - 1 To 1 Step -1
                if StringRegExp(StringTrimRight($a[$i], StringLen($a[$i]) - StringInStr($a[$i], "/")), "^([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){2}([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])[:](\d{1,5})[/]$") Then
                        $d = StringSplit(StringReplace($a[$i], "/", ":"), ":")
                        For $s = 3 to 1 Step -1
                                $r[$i][$s] = $d[$s]
                        Next
                        $socket = TCPConnect($r[$i][1], $r[$i][2])
                        If $socket = -1 Then
                                GUICtrlSetData($Edit1, @MON & "/" & @MDAY & "  " & @HOUR & ":" & @MIN & ":" & @SEC & "    " & "[" & $r[$i][3] & "]" & " 出现网络异常!" & @CRLF, "Edit")
                                FileWriteLine("LogTcpSocket" & @MON & @MDAY & ".txt", @MON & "/" & @MDAY & "  " & @HOUR & ":" & @MIN & ":" & @SEC & "    " & "[" & $r[$i][3] & "]" & " 出现网络异常!")
                                $z += 1
                        EndIf
                        $x += 1
                        TCPCloseSocket($socket)
                EndIf
                _GUICtrlStatusBar_SetText($StatusBar1, @TAB & "总项目:" & $x & "个", 0)
                _GUICtrlStatusBar_SetText($StatusBar1, @TAB & "正常:" & $x - $z & "个 异常:" & $z & "个", 1)
        Next
        TCPShutdown()
        If $z <> 0 Then
                GUICtrlSetData($Label1, "警告:检测到 " & $z & " 个异常!")
                GUICtrlSetColor($Label1, 0xff0000)
        Else
                GUICtrlSetData($Label1, "全部项目检测正常!")
                GUICtrlSetColor($Label1, 0x008000)
        EndIf
        $time = 1
EndFunc   ;==>_TcpSocket

Func Form1Close()
        exit
EndFunc   ;==>Form1Close
发表于 2009-6-20 17:51:12 | 显示全部楼层
请吧$BIGIN放在WHILE外
发表于 2009-6-20 17:55:28 | 显示全部楼层
楼主,可是要这种效果?
$begin = TimerInit()
While TimerDiff($begin) < 10000
        If $time = 1 Then
                $time = 0
                _TcpSocket()
        EndIf
        Sleep(100)
WEnd
 楼主| 发表于 2009-6-20 22:27:22 | 显示全部楼层
楼主,可是要这种效果?
$begin = TimerInit()
While TimerDiff($begin) < 10000
        If $time = 1 Then
                $time = 0
                _TcpSocket()
        EndIf
        Sleep(100)
WEnd

tianji028 发表于 2009-6-20 17:55


正确 但对我的不对`~
发表于 2009-6-20 23:41:48 | 显示全部楼层
不知道是搞什么东东的,不懂,路过。。
 楼主| 发表于 2009-6-21 20:16:42 | 显示全部楼层
那为高手帮帮忙啊`~~
发表于 2009-6-22 09:16:15 | 显示全部楼层
没有细看代码是什么回事

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
;#NoTrayIcon
Opt("GUIOnEventMode", 1)
Opt("TrayIconDebug", 1)
Global $time = 1
If Not FileExists("srvmonitoring.ini") Then
        MsgBox(0, "警告", "未发现配置文件,程序将自动退出!", 6)
        Exit
EndIf
#Region ### START Koda GUI section ###
$Form1 = GUICreate("网络状态监控器 V1.0", 430, 160)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Label1 = GUICtrlCreateLabel("正在进行项目检测!", 1, 12, 430, 32, $SS_CENTER)
GUICtrlSetFont(-1, 18, 800, 0)
GUICtrlSetColor(-1, 0x0000FF)
$Edit1 = GUICtrlCreateEdit("", 0, 60, 430, 80, BitOR($WS_VSCROLL, $ES_READONLY))
GUICtrlSetBkColor(-1, 0xffffff)
Global $StatusBar1 = _GUICtrlStatusBar_Create($Form1)
Global $aParts[3] = [110, 260, -1]
_GUICtrlStatusBar_SetParts($StatusBar1, $aParts)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

AdlibEnable('SetStatusBar', 1000)
While 1
        If $time = 1 Then
                $time = 0
                _TcpSocket()
        EndIf
        Sleep(1000)
WEnd

Func SetStatusBar()
        _GUICtrlStatusBar_SetText($StatusBar1, @TAB & @YEAR & "/" & @MON & "/" & @MDAY & "  " & @HOUR & ":" & @MIN & ":" & @SEC, 2)
EndFunc

Func _TcpSocket()
        Dim $a[100], $d[100], $r[100][4]
        Dim $i = 1, $dz = 1, $z = 0, $x
        While 1
                $a[$i] = IniRead("srvmonitoring.ini", "监控", "地址" & $dz, "NoNew")
                If $a[$i] = "NoNew" Then ExitLoop
                $dz += 1
                $i += 1
                Sleep(100)
        WEnd
        TCPStartup()
        For $i = $i - 1 To 1 Step -1
                If StringRegExp(StringTrimRight($a[$i], StringLen($a[$i]) - StringInStr($a[$i], "/")), "^([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){2}([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])[:](\d{1,5})[/]$") Then
                        $d = StringSplit(StringReplace($a[$i], "/", ":"), ":")
                        For $s = 3 To 1 Step -1
                                $r[$i][$s] = $d[$s]
                        Next
                        $socket = TCPConnect($r[$i][1], $r[$i][2])
                        If $socket = -1 Then
                                GUICtrlSetData($Edit1, @MON & "/" & @MDAY & "  " & @HOUR & ":" & @MIN & ":" & @SEC & "    " & "[" & $r[$i][3] & "]" & " 出现网络异常!" & @CRLF, "Edit")
                                FileWriteLine("LogTcpSocket" & @MON & @MDAY & ".txt", @MON & "/" & @MDAY & "  " & @HOUR & ":" & @MIN & ":" & @SEC & "    " & "[" & $r[$i][3] & "]" & " 出现网络异常!")
                                $z += 1
                        EndIf
                        $x += 1
                        TCPCloseSocket($socket)
                EndIf
                _GUICtrlStatusBar_SetText($StatusBar1, @TAB & "总项目:" & $x & "个", 0)
                _GUICtrlStatusBar_SetText($StatusBar1, @TAB & "正常:" & $x - $z & "个 异常:" & $z & "个", 1)
        Next
        TCPShutdown()
        If $z <> 0 Then
                GUICtrlSetData($Label1, "警告:检测到 " & $z & " 个异常!")
                GUICtrlSetColor($Label1, 0xff0000)
        Else
                GUICtrlSetData($Label1, "全部项目检测正常!")
                GUICtrlSetColor($Label1, 0x008000)
        EndIf
        $time = 1
EndFunc   ;==>_TcpSocket

Func Form1Close()
        Exit
EndFunc   ;==>Form1Close
 楼主| 发表于 2009-6-24 14:34:01 | 显示全部楼层
8# liongodmien


谢了朋友~~~

嘿嘿 看来_TcpSocket() 的问题 是解决不了了```算了 不研究!~


不知道是不是TCPConnect的问题`~~还是代码计算问题!~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-11 03:22 , Processed in 0.079526 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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