TCPRecv gibt Hexadezimalzahlen zurück

  • Guten Tag,

    ich habe seit einigen Tagen das Problem, dass folgende Scriptzeilen eine Hexadezimalzahl zurückgeben und keine normale Zahl:

    [autoit]


    If TCPSend($asocket,"useram") == 0 Then Return -1
    Do
    $recvData = TCPRecv($asocket,1024,1)
    Until $recvData <> "" Or TimerDiff($atimer) > 5000
    If $recvData == "" Then
    Return -2
    Else
    $useram = $recvData
    If StringInStr($useram,".") > 0 Then $useram = StringTrimRight($useram,StringLen($useram)-StringInStr($useram,".")+1)
    EndIf

    [/autoit]

    Das komische ist jetzt nur, dass TCPRecv nur hier eine Hexadezimalzahl zurückgibt und anderswo nicht. Gut dachte ich micht, liegt dann am Server, aber dort wird keine Hexadezimalzahl abgeschickt?!

    Servercode:

    [autoit]


    $ramarr = ProcessGetStats($process)
    $ramarr = $ramarr[0]/1024/1024
    TCPSend($acceptedSocket,$ramarr)

    [/autoit]


    Wenn ich $ramarr ausgeben lasse, kommt dort zB. 255.2345 raus. Und auch z.B. bei

    [autoit]


    If TCPSend($asocket,"maxram") == 0 Then Return -1
    Do
    $recvData = TCPRecv($asocket,2048,0)
    Until $recvData <> "" Or TimerDiff($atimer) > 5000
    If $recvData == "" Then
    Return -2
    Else
    $maxram = $recvData
    EndIf

    [/autoit]

    kommt eine normale Zahl raus...

    Kennt einer von euch das Problem bzw. eine Lösung? Oder hab ich einen Fehler übersehen?


    Mit freundlichen Grüßen

    Krassus

    Einmal editiert, zuletzt von Krassus1547 (23. Dezember 2013 um 17:45) aus folgendem Grund: Fehler gefunden!

  • Du hast beim 1. Code oben bei TCPRecv als 3. Parameter 1 gesetzt - dieser erzwingt die Rückgabe von Binärdaten ;)

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Diese Problem tritt nur bei diesen Scriptzeilen auf. Andere TCPRecv geben den richtigen bzw. gesendeten Wert aus (z.B. $maxram). Ich hab die Variablennamen geändert, den Anfangswert geändert und die Position im GUI verändert, aber immer kommt eine Hexadezimalzahl raus...
    Wenn ich _HexToString($useram) anwende, kommt ein leerer String zurück. Das Gleiche bei Dec($useram)


    Mit freundlichen Grüßen


    Krassus

  • Einmal Clientscript (Authentifiakation ist noch nicht vollständig. Verschlüsselung kommt noch)

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #Include <GuiButton.au3>
    #include <GuiTab.au3>
    #include <EditConstants.au3>
    #include <WindowsConstants.au3>
    #include <String.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $player = "0"
    Global $maxplayer = "0"
    Global $maxram = "0"
    Global $useram = "0"
    Global $usecpu = "0"
    Global $serveruptime = "0d 00:00:00"
    Global $autoupvar = 0
    Global $responsetime = 5000

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Commodum - Servercontroler",720,480)

    [/autoit] [autoit][/autoit] [autoit]

    $hTab = GUICtrlCreateTab(10, 10, 480, 480)
    GUICtrlCreateTabItem("Login")
    GUICtrlCreateLabel("IP-Adresse:Port",40,82)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $ip = GUICtrlCreateInput("176.57.141.178",120,80,90,18)
    GUICtrlCreateLabel(":",215,82)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $port = GUICtrlCreateInput("1",225,80,30,18,$ES_NUMBER)
    $resptime = GUICtrlCreateInput("Responsetime = 5000ms",270,80,130,18,$ES_NUMBER)
    GUICtrlCreateLabel("Logindaten",40,120)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $username = GUICtrlCreateInput("Tester",120,120,100,18)
    $password = GUICtrlCreateInput("test",230,120,100,18)
    $Login_But = GUICtrlCreateButton("Login",160,160,50)
    $logstat_labl = GUICtrlCreateLabel("Bitte prüfe deine Logindaten!",60,202,350)
    GUICtrlSetColor(-1,0xff0000)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $amp_icon = GUICtrlCreatePic("red.gif",40,200,16,16)
    GUICtrlCreateTabItem("Statistiken")
    GUICtrlCreateLabel("CPU-Auslastung",40,80)
    $cpu_prog = GUICtrlCreateProgress(125,77,200)
    GUICtrlCreateLabel("RAM-Auslastung",40,115)
    $ram_prog = GUICtrlCreateProgress(125,111,200)
    $uram_labl = GUICtrlCreateLabel("0",GetPos4PNum(0),115,200)
    GUICtrlCreateLabel("/",370,115)
    $mram_labl = GUICtrlCreateLabel("0",375,115,200)
    GUICtrlCreateLabel("Online Spieler",40,145)
    $pla_prog = GUICtrlCreateProgress(125,141,200)
    $pla_labl = GUICtrlCreateLabel("0",GetPos4PNum(0),145)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlCreateLabel("/",370,145)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $mpl_labl = GUICtrlCreateLabel("0",375,145,30)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $upt_labl = GUICtrlCreateLabel("Uptime: "&$serveruptime,40,175,200)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $stat_ak_but = GUICtrlCreateButton("Aktualisieren",210,200)
    $check_autoakt = GUICtrlCreateCheckbox("Auto refresh",300,202)
    GUICtrlSetBkColor($check_autoakt, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlCreateTabItem("Server")
    $serv_log = GUICtrlCreateEdit("",40,40,415,420,$ES_READONLY)
    GUICtrlCreateTabItem("Bans und Co.")
    GUICtrlCreateTabItem("Spieler")
    GUICtrlCreateTabItem("Sonstiges")
    GUICtrlCreateTabItem("")

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    TCPStartup()
    $socket = -1

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $curtab = _GUICtrlTab_GetCurFocus($hTab)
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Login_But
    If GUICtrlRead($ip) <> "" And GUICtrlRead($ip) <> "IP-Adresse" And GUICtrlRead($port) <> "" And GUICtrlRead($port) <> "Port" And GUICtrlRead($username) <> "" And GUICtrlRead($username) <> "Benutzername" And GUICtrlRead($password) <> "" And GUICtrlRead($password) <> "Password" Then
    $socket = TCPConnect(GUICtrlRead($ip),GUICtrlRead($port))
    If $socket = -1 Then
    GUICtrlSetImage($amp_icon,"yellow.gif")
    GUICtrlSetData($logstat_labl,"Verbindung zum Server konnte nicht hergestellt werden!")
    GUICtrlSetColor($logstat_labl,0xF8CD00)
    Else
    If GUICtrlRead($resptime) <> "Responsetime = 5000ms" Then $responsetime = GUICtrlRead($resptime)
    $sendedBytes = TCPSend($socket,GUICtrlRead($username)&"|;:|"&GUICtrlRead($password))
    If $sendedBytes = 0 Then
    GUICtrlSetImage($amp_icon,"yellow.gif")
    GUICtrlSetData($logstat_labl,"Logindaten konnten nicht an den Server gesendet werden!")
    GUICtrlSetColor($logstat_labl,0xF8CD00)
    Else
    $timer = TimerInit()
    Do
    $recvData = TCPRecv($socket,1024,0)
    Until $recvData <> "" Or TimerDiff($timer) > $responsetime
    If $recvData == "O.K." Then
    GUICtrlSetImage($amp_icon,"green.gif")
    GUICtrlSetData($logstat_labl,"Deine Logindaten wurden akzeptiert!")
    GUICtrlSetColor($logstat_labl,0x00ff00)
    Sleep(2000)
    If LoadServerInfo($socket) == -1 Then
    GUICtrlSetImage($amp_icon,"yellow.gif")
    GUICtrlSetData($logstat_labl,"Die Serverinformationen konnte nicht geladen werden!")
    GUICtrlSetColor($logstat_labl,0xF8CD00)
    EndIf
    Else
    GUICtrlSetImage($amp_icon,"red.gif")
    GUICtrlSetData($logstat_labl,"Deine Logindaten wurden nicht akzeptiert! Server response: "&$recvData)
    GUICtrlSetColor($logstat_labl,0xff0000)
    EndIf
    EndIf
    EndIf
    Else
    GUICtrlSetImage($amp_icon,"yellow.gif")
    GUICtrlSetData($logstat_labl,"Bitte gib deine Logindaten an!")
    GUICtrlSetColor($logstat_labl,0xF8CD00)
    EndIf
    Case $htab
    Switch $curtab
    Case 0
    Case 1
    GUICtrlSetData($cpu_prog,$usecpu)
    GUICtrlSetData($ram_prog,$useram/$maxram*100)
    GUICtrlSetData($pla_prog,$player/$maxplayer*100)
    GUICtrlSetData($mpl_labl,$maxplayer)
    GUICtrlSetData($pla_labl,$player)
    GUICtrlSetData($mram_labl,$maxram)
    GUICtrlSetData($uram_labl,$useram)
    GUICtrlSetPos($uram_labl,GetPos4PNum($useram),115)
    GUICtrlSetPos($pla_labl,GetPos4PNum($player),145)
    GUICtrlSetData($upt_labl,"Uptime: "&$serveruptime)
    EndSwitch
    Case $stat_ak_but
    $resp = Autoupdate()
    If $resp == -1 Then
    GUICtrlSetImage($amp_icon,"yellow.gif")
    GUICtrlSetData($logstat_labl,"Logindaten konnten nicht an den Server gesendet werden!")
    GUICtrlSetColor($logstat_labl,0xF8CD00)
    ElseIf $resp == -2 Then
    GUICtrlSetImage($amp_icon,"yellow.gif")
    GUICtrlSetData($logstat_labl,"Die Serverinformationen konnte nicht geladen werden: Paket konnte nicht gesendet werden!")
    GUICtrlSetColor($logstat_labl,0xF8CD00)
    ElseIf $resp == -3 Then
    GUICtrlSetImage($amp_icon,"red.gif")
    GUICtrlSetData($logstat_labl,"Deine Logindaten wurden nicht akzeptiert!")
    GUICtrlSetColor($logstat_labl,0xff0000)
    ElseIf $resp == -4 Then
    GUICtrlSetImage($amp_icon,"yellow.gif")
    GUICtrlSetData($logstat_labl,"Die Serverinformationen konnte nicht geladen werden: Der Server antwortet nicht!")
    GUICtrlSetColor($logstat_labl,0xF8CD00)
    ElseIf $resp == 0 Then
    Else
    MsgBox(16,"Fehler","Es ist ein unbekannter Fehler aufgetreten! Code: stat_ak_but.autoupdate.err="&$resp,5)
    Exit
    EndIf
    Case $check_autoakt
    If $autoupvar == 0 Then
    AdlibRegister("Autoupdate",5000)
    $autoupvar = 1
    Else
    AdlibUnRegister("Autoupdate")
    $autoupvar = 0
    EndIf
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    TCPCloseSocket($socket)
    TCPShutdown()
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func GetPos4PNum($aplayer)
    If $aplayer > 999 Then
    Return 346
    ElseIf $aplayer > 99 Then
    Return 352
    ElseIf $aplayer > 9 Then
    Return 357
    Else
    Return 363
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func GetServerUptime()
    $asocket = TCPConnect(GUICtrlRead($ip),GUICtrlRead($port))
    $asendedBytes = TCPSend($asocket,GUICtrlRead($username)&"|;:|"&GUICtrlRead($password))
    If $asendedBytes = 0 Then
    MsgBox(16, "Error", "Logindaten konnte nicht an "&GUICtrlRead($ip)&":"&GUICtrlRead($port)&" gesendet werden.")
    Return 0
    Else
    $timer = TimerInit()
    Do
    $arecvData = TCPRecv($asocket,1024,0)
    Until $arecvData <> "" Or TimerDiff($timer) > 15000
    If $arecvData == "O.K." Then
    TCPSend($asocket,"uptime")
    Do
    $arecvData = TCPRecv($asocket,1024,0)
    Until $arecvData <> "" Or TimerDiff($timer) > 15000
    Return $arecvData
    Else
    MsgBox(16,"Login",$arecvData)
    Return 0
    EndIf
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func LoadServerInfo($asocket)
    $atimer = TimerInit()
    If TCPSend($asocket,"multiple") == 0 Then Return -1
    Sleep(10)
    If TCPSend($asocket,"useram") == 0 Then Return -1
    Do
    $recvData = TCPRecv($asocket,1024)
    Until $recvData <> "" Or TimerDiff($atimer) > 5000
    If $recvData == "" Then
    Return -2
    Else
    $useram = $recvData
    If StringInStr($useram,".") > 0 Then $useram = StringTrimRight($useram,StringLen($useram)-StringInStr($useram,".")+1)
    EndIf
    If TCPSend($asocket,"list") == 0 Then Return -1
    Do
    $recvData = TCPRecv($asocket,1024,0)
    Until $recvData <> "" Or TimerDiff($atimer) > 5000
    If $recvData == "" Then
    Return -2
    Else
    $maxplayer = StringTrimLeft($recvData,StringInStr($recvData,"/"))
    $player = StringTrimRight($recvData,StringLen($recvData)-StringInStr($recvData,"/"))
    EndIf
    If TCPSend($asocket,"maxram") == 0 Then Return -1
    Do
    $recvData = TCPRecv($asocket,2048,0)
    Until $recvData <> "" Or TimerDiff($atimer) > 5000
    If $recvData == "" Then
    Return -2
    Else
    $maxram = $recvData
    EndIf
    If TCPSend($asocket,"usecpu") == 0 Then Return -1
    Do
    $recvData = TCPRecv($asocket,1024,0)
    Until $recvData <> "" Or TimerDiff($atimer) > 5000
    If $recvData == "" Then
    Return -
    Else
    $usecpu = $recvData
    EndIf
    TrayTip("Stats","MaxRAM: "&$maxram&@CRLF&"UseRAM: "&$useram&@CRLF&"UseCPU: "&$usecpu,5)
    If TCPSend($asocket,"uptime") == 0 Then Return -1
    Do
    $recvData = TCPRecv($asocket,1024,0)
    Until $recvData <> "" Or TimerDiff($atimer) > 5000
    If $recvData == "" Then
    Return -2
    Else
    $serveruptime = $recvData
    EndIf
    If TCPSend($asocket,"multipleend") == 0 Then Return -1
    TCPCloseSocket($asocket)
    Return 0
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Autoupdate()
    For $i = 1 To 1
    $asocket = TCPConnect(GUICtrlRead($ip),GUICtrlRead($port))
    $asendedBytes = TCPSend($asocket,GUICtrlRead($username)&"|;:|"&GUICtrlRead($password))
    If $asendedBytes == 0 Then
    Return -1
    Else
    $atimer = TimerInit()
    Do
    $arecvData = TCPRecv($asocket,1024,0)
    Until $arecvData <> "" Or TimerDiff($atimer) > 15000
    If $arecvData == "O.K." Then
    $ainfo = LoadServerInfo($asocket)
    If $ainfo == -1 Then
    Return -2
    ElseIf $ainfo == -2 Then
    Return -4
    ElseIf $ainfo == 0 Then
    GUICtrlSetData($cpu_prog,$usecpu)
    GUICtrlSetData($ram_prog,$useram/$maxram*100)
    GUICtrlSetData($pla_prog,$player/$maxplayer*100)
    GUICtrlSetData($mpl_labl,$maxplayer)
    GUICtrlSetData($pla_labl,$player)
    GUICtrlSetData($mram_labl,$maxram)
    GUICtrlSetData($uram_labl,$useram)
    GUICtrlSetPos($uram_labl,GetPos4PNum($useram),115)
    GUICtrlSetPos($pla_labl,GetPos4PNum($player),145)
    GUICtrlSetData($upt_labl,"Uptime: "&$serveruptime)
    Else
    Return -10
    EndIf
    Else
    Return -3
    EndIf
    EndIf
    Next
    EndFunc

    [/autoit]

    Und das Serverscript

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile_x64=starter.exe
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

    [/autoit] [autoit][/autoit] [autoit]

    #include <Constants.au3>
    #include <File.au3>
    #include <array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;... <Username> <ServerNo> <RAM> <Passwort>

    [/autoit] [autoit][/autoit] [autoit]

    If $CmdLine[0] < 1 Then Exit

    [/autoit] [autoit][/autoit] [autoit]

    $process = Run("java -Dfile.encoding=utf-8 -Djline.terminal=jline.UnsupportedTerminal -server -Xmx"&$CmdLine[3]&"M -jar D:\Minecraft_Server"&$CmdLine[1]&"\Server_"&$CmdLine[2]&"\minecraft_server.jar nogui -nojline", "D:\Minecraft_Server"&$CmdLine[1]&"\Server_"&$CmdLine[2]&"",@SW_HIDE,$STDIN_CHILD + $STDOUT_CHILD)
    $ticker = TimerInit()

    [/autoit] [autoit][/autoit] [autoit]

    If $process Then
    WinSetTitle("starter.exe","",$process)
    Else
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc"), $f_COMError = False

    [/autoit] [autoit][/autoit] [autoit]

    TCPStartup()
    $asocket = TCPListen("176.57.141.178",1)
    $try = 0
    While 1
    Do
    $acceptedSocket = TCPAccept($asocket)
    Until $acceptedSocket <> -1
    Do
    $receivedData = TCPRecv($acceptedSocket,1024,0)
    Until $receivedData <> ""
    $authstring = $CmdLine[1]&"|;:|"&$CmdLine[4]
    If $receivedData == $authstring And $try < 4 Then
    TCPSend($acceptedSocket,"O.K.")
    Do
    $receivedData = TCPRecv($acceptedSocket,1024,0)
    Until $receivedData <> ""
    ConsoleWrite("["&@HOUR&":"&@MIN&":"&@SEC&"]: Incoming Command: |"&$receivedData&"| from "&SocketToIP($acceptedSocket)&@CRLF)
    If $receivedData == "multiple" Then
    $waittimer = TimerInit()
    Do
    $receivedData = TCPRecv($acceptedSocket,1024,0)
    If $receivedData == "list" Then
    TCPSend($acceptedSocket,GetOnlinePlayer())
    ElseIf $receivedData == "maxram" Then
    TCPSend($acceptedSocket,$CmdLine[3])
    ElseIf $receivedData == "useram" Then
    $ramarr = ProcessGetStats($process)
    $ramarr = $ramarr[0]/1024/1024
    TCPSend($acceptedSocket,$ramarr)
    ElseIf $receivedData == "usecpu" Then
    $cpuarr = _ProcessListProperties($process)
    TCPSend($acceptedSocket,$cpuarr[1][6])
    ElseIf $receivedData == "uptime" Then
    TCPSend($acceptedSocket,GetServerUptime())
    EndIf
    Until $receivedData == "multipleend" Or TimerDiff($waittimer) > 60000
    If TimerDiff($waittimer) > 60000 Then ConsoleWrite("["&@HOUR&":"&@MIN&":"&@SEC&"]: Lost connection to "&SocketToIP($acceptedSocket)&@CRLF)
    Else
    If $receivedData == "list" Then
    TCPSend($acceptedSocket,GetOnlinePlayer())
    ElseIf $receivedData == "uptime" Then
    TCPSend($acceptedSocket,GetServerUptime())
    Else
    StdinWrite($process,$receivedData&@CRLF)
    EndIf
    EndIf
    TCPCloseSocket($acceptedSocket)
    $try = 0
    Else
    ConsoleWrite("["&@HOUR&":"&@MIN&":"&@SEC&"]: Authentication failed from "&SocketToIP($acceptedSocket)&@CRLF)
    TCPSend($acceptedSocket,"Wrong password or username!")
    TCPCloseSocket($acceptedSocket)
    $try = $try + 1
    If $try > 3 Then
    ConsoleWrite("["&@HOUR&":"&@MIN&":"&@SEC&"]: Too many failed authentications! Sleeping 2 min."&@CRLF)
    TCPCloseSocket($asocket)
    Sleep(120000)
    $try = 0
    $asocket = TCPListen("176.57.141.178",1)
    ConsoleWrite("["&@HOUR&":"&@MIN&":"&@SEC&"]: Listening..."&@CRLF)
    EndIf
    EndIf
    WEnd
    TCPShutdown()
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func GetOnlinePlayer()
    StdinWrite($process,"list"&@CRLF)
    $logfile = FileOpen("D:\Minecraft_Server"&$CmdLine[1]&"\Server_"&$CmdLine[2]&"\server.log",0)
    If $logfile == -1 Then
    FileClose($logfile)
    Return "0/0"
    Else
    $atime = TimerInit()
    Do
    $text = FileReadLine($logfile,_FileCountLines("D:\Minecraft_Server"&$CmdLine[1]&"\Server_"&$CmdLine[2]&"\server.log")-1)
    Until StringInStr($text,"There are ") <> 0 Or StringInStr($text,"Es sind ") <> 0 Or TimerDiff($atime) > 10000
    If StringInStr($text,"/INFO") == 0 Then
    $pos = StringInStr($text,"/")
    Else
    $pos = StringInStr($text,"/",0,2)
    EndIf
    $pos1 = StringInStr($text," ",0,5)
    $pos2 = StringInStr($text," ",0,6)
    $player = StringTrimRight($text,StringLen($text)-$pos2)
    $player = StringTrimLeft($player,$pos1)
    FileClose($logfile)
    $test = ""
    Return $player
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func GetServerUptime()
    $zeit = TimerDiff($ticker)/1000
    If StringInStr($zeit,".") > 0 Then $zeit = StringTrimRight($zeit,StringLen($zeit)-StringInStr($zeit,".")+1)
    If $zeit < 60 Then
    $sec = $zeit
    $min = "0"
    $std = "0"
    $day = "0"
    ElseIf $zeit < 60*60 Then
    If StringInStr($zeit/60,".") == 0 Then
    $sec = "0"
    $min = $zeit/60
    Else
    $min = $zeit/60
    If StringInStr($min,".") > 0 Then $min = StringTrimRight($min,StringLen($min)-StringInStr($min,".")+1)
    $sec = $zeit - $min*60
    If StringInStr($sec,".") > 0 Then $sec = StringTrimRight($sec,StringLen($sec)-StringInStr($sec,".")+1)
    EndIf
    $std = "0"
    $day = "0"
    ElseIf $zeit < 60*60*24 Then
    If StringInStr($zeit/60/60,".") == 0 Then
    $sec = "0"
    $min = "0"
    $std = $zeit/60/60
    Else
    $std = $zeit/60/60
    If StringInStr($std,".") > 0 Then $std = StringTrimRight($std,StringLen($std)-StringInStr($std,".")+1)
    $min = $zeit/60 - $std*60
    If StringInStr($min,".") > 0 Then $min = StringTrimRight($min,StringLen($min)-StringInStr($min,".")+1)
    $sec = $zeit - $std*60*60 - $min*60
    If StringInStr($sec,".") > 0 Then $sec = StringTrimRight($sec,StringLen($sec)-StringInStr($sec,".")+1)
    EndIf
    $day = "0"
    Else
    If StringInStr($zeit/60/60/24,".") == 0 Then
    $sec = "0"
    $min = "0"
    $std = "0"
    $day = $zeit/60/60/24
    Else
    $day = StringTrimRight($zeit/60/60/24,StringLen($zeit/60/60/24)-StringInStr($zeit/60/60/24,".")+1)
    $std = $zeit/60/60 - $day*24
    If StringInStr($std,".") > 0 Then $std = StringTrimRight($std,StringLen($std)-StringInStr($std,".")+1)
    $min = $zeit/60 - $std*60 - $day*24*60
    If StringInStr($min,".") > 0 Then $min = StringTrimRight($min,StringLen($min)-StringInStr($min,".")+1)
    $sec = $zeit - $std*60*60 - $min*60 - $day*24*60*60
    If StringInStr($sec,".") > 0 Then $sec = StringTrimRight($sec,StringLen($sec)-StringInStr($sec,".")+1)
    EndIf
    EndIf
    If $sec < 10 Then $sec = "0"&$sec
    If $min < 10 Then $min = "0"&$min
    If $std < 10 Then $std = "0"&$std
    $ausgabe = $day&"d "&$std&":"&$min&":"&$sec
    Return $ausgabe
    $ausgabe = ""
    $zeit = ""
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func SocketToIP($SHOCKET)
    $sockaddr = DllStructCreate("short;ushort;uint;char[8]")

    [/autoit] [autoit][/autoit] [autoit]

    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
    "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
    If Not @error And $aRet[0] = 0 Then
    $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
    If Not @error Then $aRet = $aRet[0]
    Else
    $aRet = 0
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $sockaddr = 0
    Return $aRet
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ProcessListProperties($Process = "", $sComputer = ".")
    Local $sUserName, $sMsg, $sUserDomain, $avProcs, $dtmDate
    Local $avProcs[1][2] = [[0, ""]], $n = 1

    [/autoit] [autoit][/autoit] [autoit]

    ; Convert PID if passed as string
    If StringIsInt($Process) Then $Process = Int($Process)

    [/autoit] [autoit][/autoit] [autoit]

    ; Connect to WMI and get process objects
    $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate,authenticationLevel=pktPrivacy, (Debug)}!" & $sComputer & "\root\cimv2")
    If IsObj($oWMI) Then
    ; Get collection processes from Win32_Process
    If $Process == "" Then
    ; Get all
    $colProcs = $oWMI.ExecQuery("select * from win32_process")
    ElseIf IsInt($Process) Then
    ; Get by PID
    $colProcs = $oWMI.ExecQuery("select * from win32_process where ProcessId = " & $Process)
    Else
    ; Get by Name
    $colProcs = $oWMI.ExecQuery("select * from win32_process where Name = '" & $Process & "'")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If IsObj($colProcs) Then
    ; Return for no matches
    If $colProcs.count = 0 Then Return $avProcs

    [/autoit] [autoit][/autoit] [autoit]

    ; Size the array
    ReDim $avProcs[$colProcs.count + 1][10]
    $avProcs[0][0] = UBound($avProcs) - 1

    [/autoit] [autoit][/autoit] [autoit]

    ; For each process...
    For $oProc In $colProcs
    ; [n][0] = Process name
    $avProcs[$n][0] = $oProc.name
    ; [n][1] = Process PID
    $avProcs[$n][1] = $oProc.ProcessId
    ; [n][2] = Parent PID
    $avProcs[$n][2] = $oProc.ParentProcessId
    ; [n][3] = Owner
    If $oProc.GetOwner($sUserName, $sUserDomain) = 0 Then $avProcs[$n][3] = $sUserDomain & "" & $sUserName
    ; [n][4] = Priority
    $avProcs[$n][4] = $oProc.Priority
    ; [n][5] = Executable path
    $avProcs[$n][5] = $oProc.ExecutablePath
    ; [n][8] = Creation date/time
    $dtmDate = $oProc.CreationDate
    If $dtmDate <> "" Then
    ; Back referencing RegExp pattern from weaponx
    Local $sRegExpPatt = "\A(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(?:.*)"
    $dtmDate = StringRegExpReplace($dtmDate, $sRegExpPatt, "$2/$3/$1 $4:$5:$6")
    EndIf
    $avProcs[$n][8] = $dtmDate
    ; [n][9] = Command line string
    $avProcs[$n][9] = $oProc.CommandLine

    [/autoit] [autoit][/autoit] [autoit]

    ; increment index
    $n += 1
    Next
    Else
    SetError(2); Error getting process collection from WMI
    EndIf
    ; release the collection object
    $colProcs = 0

    [/autoit] [autoit][/autoit] [autoit]

    ; Get collection of all processes from Win32_PerfFormattedData_PerfProc_Process
    ; Have to use an SWbemRefresher to pull the collection, or all Perf data will be zeros
    Local $oRefresher = ObjCreate("WbemScripting.SWbemRefresher")
    $colProcs = $oRefresher.AddEnum($oWMI, "Win32_PerfFormattedData_PerfProc_Process" ).objectSet
    $oRefresher.Refresh

    [/autoit] [autoit][/autoit] [autoit]

    ; Time delay before calling refresher
    Local $iTime = TimerInit()
    Do
    Sleep(20)
    Until TimerDiff($iTime) >= 100
    $oRefresher.Refresh

    [/autoit] [autoit][/autoit] [autoit]

    ; Get PerfProc data
    For $oProc In $colProcs
    ; Find it in the array
    For $n = 1 To $avProcs[0][0]
    If $avProcs[$n][1] = $oProc.IDProcess Then
    ; [n][6] = CPU usage
    $avProcs[$n][6] = $oProc.PercentProcessorTime
    ; [n][7] = memory usage
    $avProcs[$n][7] = $oProc.WorkingSet
    ExitLoop
    EndIf
    Next
    Next
    Else
    SetError(1); Error connecting to WMI
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ; Return array
    $oProc = ""
    $colProcs = ""
    $sUserName = ""
    $sMsg = ""
    $sUserDomain = ""
    $dtmDate = ""
    $n = ""
    $Process = ""
    $sComputer = ""
    $oWMI = ""
    Return $avProcs
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func MyErrFunc()
    Local $HexNumber=hex($oMyError.number,8)
    Msgbox(0,"","We intercepted a COM Error !" & @CRLF & _
    "Number is: " & $HexNumber & @CRLF & _
    "WinDescription is: " & $oMyError.windescription & @CRLF & _
    "Source is: " & $oMyError.source & @CRLF & _
    "ScriptLine is: " & $oMyError.scriptline)
    $f_COMError = True; something to check for when this function returns
    Endfunc

    [/autoit]

    Du kannst es gerne compelieren und ausprobieren. Mein Server läuft und die Daten, die in den Inputs drin stehen sind korrekt. Der Server setzt die Verbindung nach 1 min zurück, wenn keine Antwort vom Client kommt.

    Mit freundlichen Grüßen

    Krassus


    P.S.
    Bin in ca. 1 Std wieder da. (Weihnachten und so ^^)

    Einmal editiert, zuletzt von Krassus1547 (23. Dezember 2013 um 17:09)

  • Ich habe grade auf die aktuellste Version von AutoIT geupdated (3.3.10.0). Der Fehler ist jedoch nicht weggeganden.

    Edit: O.K. Ich hab den Fehler gefunden! $ramarr ist eine Kommazahl (209.234). Wenn ich jetzt mit StringTrimRight(...) das Komma und die dahinter folgenden Zahlen abtrenne, kommt der String richtig an. Will ich jetzt aber die komplette Kommazahl senden, verwende ich StringToBinary($ramarr).


    Mit freundlichen Grüßen


    Krassus1547

    Einmal editiert, zuletzt von Krassus1547 (23. Dezember 2013 um 17:44)

    • Offizieller Beitrag

    Hallo,

    Ich setze immer den letzten Parameter auf "1" und wenn ich dann Strings auswerten will benutze ich auch immer BinaryToString(TcpRecv(..,..,1))
    So solltest du nie Probleme bekommen :)
    Problem ist, dass wenn AutoIt ein Zeichen empfängt, dass nicht alnum (0-9, A-Z, a-z) ist, dann wandelt AutoIt das automatisch in binär um. (was an sich auch richtig ist)

    Gruß,
    Spider