Viele Computer GLEICHZEITIG anrufen mit TCPConnect()

  • Hallo,
    ich möchte an viele Computer gleichzeitig mit TCPConnect() ein Befehl senden.
    Wieso ich das gleichzeig machen möchte? Computer die ausgeschaltet sind können das Signal nätürlich nicht entgegen nehmen. Somit bleibt er hier ca. 5 Sek. hängen. Wie kann ich das sozusagen nebenbei laufen lassen?

    Viele Grüße
    Gespenst

  • ... oder vor dem TCPConnect() mit einem 'Ping("pcname",50)' prüfen ob die Maschine erreichbar ist.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    Einmal editiert, zuletzt von Micha_he (15. April 2008 um 00:09)

  • Hi,
    leider geht es nicht. Bei 8 ausgeschalteten Computern sind es schon mehr als 10 Sekunden verzögerrung.....
    Deswegen meinte ich ja: ist es möglich alle Computer gleichzeitig anzusprechen?
    Viele Grüße
    Gespenst

  • Mach dir für jeden Computer n eigenes Script, und ein übergeordnetes, welches alle 10 Scripte aufruft. ;)

  • $runstring = "regsvr32 /s " & @scriptDir & "\OSWINSCK.dll"
    $status = _RunDos($runstring)

    CONST $SCKTCPPROTOCOL = 0
    CONST $SCKUDPPROTOCOL = 1
    Const $SCKCLOSED = 0
    Const $SCKOPEN = 1
    Const $SCKLISTENING = 2
    Const $SCKCONNECTIONPENDING = 3
    Const $SCKRESOLVINGHOST = 4
    Const $SCKHOSTRESOLVED = 5
    Const $SCKCONNECTING = 6
    Const $SCKCONNECTED = 7
    Const $SCKCLOSING = 8
    Const $SCKERROR = 9

    Func Connect($addr , $port , $timeout )

    $socket = ObjCreate("OSWINSCK.Winsock")
    if $socket == 0 Then ;failed to initialize the com object
    return -1; maybe oswinsock not registered?
    EndIf
    $socket.Protocol = $SCKTCPPROTOCOL ; set protocol to be tcp
    $timer = TimerInit()
    $socket.Connect($addr , $port )
    while True

    if $socket.State == $SCKERROR Then
    return -2 ;connection error (will give up for now)
    EndIf
    if $socket.State == $SCKCONNECTED Then
    ConsoleWrite("timeout " & TimerDiff($timer) & @CRLF)
    return $socket ; return object for connection
    EndIf
    if TimerDiff($timer) > $timeout Then
    ConsoleWrite("timeout " & TimerDiff($timer) & @CRLF)
    return -3 ; connection timeout
    EndIf

    WEnd

    EndFunc

    func Verteilen($Command)
    $anwender = IniReadSection(@ScriptDir & "\verteilerliste.ini", "general") ; Anwender lesen
    for $i = 1 to $anwender[0][0] ; Schleife für das verteilen
    Dim $ConnectedSocket = Connect($anwender[$i][0], 8695, 50)
    if not $ConnectedSocket = -3 Then
    Dim $szData = $Command ; Die Daten die gesendet werden wollen müssen dekliniert werden
    TCPSend($ConnectedSocket,$szData) ; $sZDATA an den Anwender
    TCPCloseSocket($ConnectedSocket)
    EndIf
    Next
    EndFunc

    http://www.autoitscript.com/forum/lofivers…php?t39807.html

    Wieso geht das nicht?

    Viele Grüße
    Gespenst

  • So,

    Func Connect($addr, $port, $timeout, $Command)
    $socket = ObjCreate("OSWINSCK.Winsock")
    if $socket == 0 Then return -1
    $socket.Protocol = $SCKTCPPROTOCOL
    $timer = TimerInit()

    $socket.Connect($addr, $port)

    while True
    if $socket.State == $SCKERROR Then return -2
    if $socket.State == $SCKCONNECTED Then
    $socket.SendData($Command)
    $socket.CloseWinsock()
    return -1
    EndIf
    if TimerDiff($timer) > $timeout Then return -3
    WEnd
    EndFunc

    func Verteilen($Command)
    $anwender = IniReadSection(@ScriptDir & "\verteilerliste.ini", "general") ; Anwender lesen
    for $i = 1 to $anwender[0][0] ; Schleife für das verteilen
    Dim $ConnectedSocket = Connect($anwender[$i][0], 8695, 50, $Command) ; Befehl senden
    sleep(5) ; Einen Moment warten...
    Next
    EndFunc

    Problem: Es geht nur ca. jedes 5 mal...... manchmal geht die Verteilen() sofort ... ein andres mal nicht... dannn muss sie ca. 4 mal aufgerufen werden.- was kann ich tun?

  • Hi,
    leider geht es nicht. Bei 8 ausgeschalteten Computern sind es schon mehr als 10 Sekunden verzögerrung.....
    Deswegen meinte ich ja: ist es möglich alle Computer gleichzeitig anzusprechen?
    Viele Grüße
    Gespenst

    Ähhm ??? wenn dein LAN/Internet schnell genug ist dann sehe ich da ein Speed von 1,6 Sekunden??? Timeout = 50ms / PC
    Du kannst das auch auf 10ms runterschrauben aber das ist nur im LAN sinvoll da du ohne 1,5mbit Anbindung immer als Offline gemeldet wirst :P:rock: