Server - Client tcp

  • Hey,

    hab mir mal das tcpsend und recv thema angeschaut und versuch da grad was zu basteln..
    krieg aber immer nen error in expression..

    [autoit]


    Opt('MustDeclareVars', 1)

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

    ;==============================================
    ;==============================================
    ; CLIENT! Startet mich, nachdem der Server gestartet wurde!!!!!!!!!!!!!!!
    ;==============================================
    ;==============================================

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

    Example()

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

    Func Example()
    ; Richte einige wiederverwendbare Informationen ein.
    ;--------------------------
    Local $ConnectedSocket, $szData
    ; Set $szIPADDRESS Wir ändern den PC-Namen in eine IP-Adresse.
    ; Local $szServerPC = @ComputerName
    ; Local $szIPADDRESS = TCPNameToIP($szServerPC)
    Local $szIPADDRESS = "192.168.245.128"
    Local $nPORT = 33891

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

    ; Startet den TCP Service
    ;==============================================
    TCPStartup()

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

    ; Initialisiert eine Variable, um eine Verbindung anzugeben.
    ;==============================================
    Dim $ConnectedSocket = -1

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

    ; Versucht, zu einem Server mit der IP und dem PORT 33891 zu verbinden.
    ;=======================================================
    $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)

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

    ; Falls es einen Fehler gibt, wird er angezeigt
    If @error Then
    MsgBox(4112, "Fehler", "TCP-Connect schlug mit folgendem WSA-Fehler fehl: " & @error)
    ; Wenn es keinen Fehler gibt, dann erscheint wiederholt eine Inputbox zur Eingabe von Daten, die zum Server gesendet werden sollen.
    Else
    ; Fragt fortwährend nach Daten, die zum Server gesendet werden sollen.
    While 1
    ; InputBox für die zu versendenden Daten
    $szData = "IP Adresse: " @IPAddress1 & "Computername: "@ComputerName "Zeit des Clienten: "& @Hour & ":" & @min ":" & @sec

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

    ; Wenn die Inputbox geschlossen wird oder leer bleibt, wird die Schleife beendet.
    If @error Or $szData = "" Then ExitLoop

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

    ; Wir sollten Daten in $szData haben... Lasst uns versuchen, sie durch unseren verbundenen Socket zu versenden.
    TCPSend($ConnectedSocket,$szData)

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

    ; Wenn das Senden mit @error fehlgeschlagen ist, dann ist der Socket getrennt.
    ;----------------------------------------------------------------
    If @error Then ExitLoop
    WEnd
    EndIf
    EndFunc ;==>Example

    [/autoit]

    is das standart ding bis auf n paar veränderungen :)

    [autoit]

    $szData = "IP Adresse: " @IPAddress1 & "Computername: "@ComputerName "Zeit des Clienten: "& @Hour & ":" & @min ":" & @sec

    [/autoit]

    error kommt hier.

    gruß

    Kev

  • da fehln ja auch einige &

    so musses sein:

    [autoit]

    $szData = "IP Adresse: "& @IPAddress1 & "Computername: " & @ComputerName & "Zeit des Clienten: "& @Hour & ":" & @min &":" & @sec

    [/autoit]
  • darauf bin ich dann auch gekomm, hat aber anscheinend eins gefehlt, naja jetz gehts :D

    jetz schickter mir bloß die daten 100000 mal ^^ kann man dem net sagen, sende 1 mal ip, 1 mal computername, 1 mal time und fertig ;)

    /edit, juhu ich bin fortgeschritten xD

    Einmal editiert, zuletzt von Kev (15. März 2010 um 09:09)

  • und du solltest auf das aufpassen:

    Zitat

    Es muss TCPShutdown() aufgerufen werden, um den Speicherverbrauch zu reduzieren, wobei für jeden geglückten TCPStartup() Aufruf ein TCPShutdown getätigt werden muss.

    ;)

  • kay, ich baus gleich ein.

    habs jetz so :

    [autoit]


    Opt('MustDeclareVars', 1)

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

    ;==============================================
    ;==============================================
    ; CLIENT! Startet mich, nachdem der Server gestartet wurde!!!!!!!!!!!!!!!
    ;==============================================
    ;==============================================
    global $start

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

    $start = Timerinit()
    while 1
    if TimerDiff($start) > 5000 Then
    client()
    $start = TimerInit()
    EndIf
    WEnd

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

    client()

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

    Func client()
    ; Richte einige wiederverwendbare Informationen ein.
    ;--------------------------
    Local $ConnectedSocket, $szData
    ; Set $szIPADDRESS Wir ändern den PC-Namen in eine IP-Adresse.
    ; Local $szServerPC = @ComputerName
    ; Local $szIPADDRESS = TCPNameToIP($szServerPC)
    Local $szIPADDRESS = "192.168.245.128"
    Local $nPORT = 33891

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

    ; Startet den TCP Service
    ;==============================================
    TCPStartup()

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

    ; Initialisiert eine Variable, um eine Verbindung anzugeben.
    ;==============================================
    Dim $ConnectedSocket = -1

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

    ; Versucht, zu einem Server mit der IP und dem PORT 33891 zu verbinden.
    ;=======================================================
    $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)

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

    ; Falls es einen Fehler gibt, wird er angezeigt
    If @error Then
    client()
    Else

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

    $szData = "IP Adresse:" & "" & @IPAddress1 & "" & "Computername: " & "" & @ComputerName & "" & "Zeit des Clienten:" & "" & @Hour & ":" & @min &":" & @sec
    TCPSend($ConnectedSocket,$szData)
    EndIf
    EndFunc ;==>Example

    [/autoit]

    jetz schickt der des nach 5 sec
    er solls aber alle 5 sec

    bloß wie?

  • so in etwa hätt ichs gemacht:

    Spoiler anzeigen
    [autoit]

    AutoItSetOption("OnExitFunc", "_quit")

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

    TCPStartup(); wird nur einmal aufgerufen

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

    Global $szIPADDRESS = "192.168.245.128"
    Global $nPORT = 33891

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

    AdlibRegister("_client", 5000); rufe die func _client alle 5 sec auf

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

    While 1
    Sleep(100)
    WEnd

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

    Func _client()
    Local $ConnectedSocket
    $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
    If @error Then
    _client()
    Else
    $szData = "IP Adresse:" & "" & @IPAddress1 & "" & "Computername: " & "" & @ComputerName & "" & "Zeit des Clienten:" & "" & @HOUR & ":" & @MIN & ":" & @SEC
    TCPSend($ConnectedSocket, $szData)
    EndIf
    EndFunc ;==>_client

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

    Func _quit()
    TCPShutdown()
    EndFunc ;==>_quit

    [/autoit]
  • hmm same thing.
    bei mir kommt nichts an:
    bzw. halt nur einmal. nach 5 sec.
    server ist :

    [autoit]


    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)

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

    ;==============================================
    ;==============================================
    ; SERVER!! Startet mich zuerst !!!!!!!!!!!!!!!
    ;==============================================
    ;==============================================
    dircreate("C:\Message\")
    Example()

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

    Func Example()
    ; Richte einige wiederverwendbare Informationen ein.
    ; Richte deine öffentliche IP Adresse (@IPAddress1) hier ein.
    ; Local $szServerPC = @ComputerName
    ; Local $szIPADDRESS = TCPNameToIP($szServerPC)
    Local $szIPADDRESS = @IPAddress1
    Local $nPORT = 33891
    Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted
    Local $msg, $recv

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

    ; Startet den TCP Service
    ;==============================================
    TCPStartup()

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

    ; Erstellt einen lauschenden Port.
    ; Benutzt deine IP Adresse und den Port 33891. (Oben angegeben)
    ;==============================================
    $MainSocket = TCPListen($szIPADDRESS, $nPORT)

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

    ; Wenn die Socketerstellung fehl schlägt, dann wird das Programm beendet.
    If $MainSocket = -1 Then Exit

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

    ; Erstellt eine GUI für Messages.
    ;==============================================
    $GOOEY = GUICreate("Message - Server IP: " & $szIPADDRESS, 450, 200)
    $edit = GUICtrlCreateEdit("", 10, 10, 300, 180)
    GUISetState()

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

    ; Initialisiert eine Variable um eine Verbindung anzugeben
    ;==============================================
    $ConnectedSocket = -1

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

    ; Wartet auf und akzeptiert eine Verbindung
    ;==============================================
    Do
    $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1

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

    ; Bekommt die IP des verbundenen Clients
    $szIP_Accepted = SocketToIP($ConnectedSocket)

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

    ; GUI Message Schleife
    ;==============================================
    While 1
    $msg = GUIGetMsg()

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

    ; GUI beendet
    ;--------------------
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop

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

    ; Versucht Daten zu empfangen, bis zu 2048 bytes
    ;----------------------------------------------------------------
    $recv = TCPRecv($ConnectedSocket, 2048)

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

    ; Aktualisiert das Input-Control mit dem, was wir empfangen haben.
    ;----------------------------------------------------------------
    If $recv <> "" Then GUICtrlSetData($edit, _
    $szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
    Filewrite("C:/Message/recieved.txt",$recv)
    WEnd

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

    If $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)

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

    TCPShutdown()
    EndFunc ;==>Example

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

    ; Funktion um die IP Adresse eines verbundenen Sockets wiederzugeben.
    ;----------------------------------------------------------------------
    Func SocketToIP($SHOCKET)
    Local $sockaddr, $aRet

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

    $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

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

    Return $aRet
    EndFunc ;==>SocketToIP

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Hab mir jetzt mal ne Messagebox ausgeben lassen mit @Error.
    und tatsächlich ich krieg nen fehler: "10061"

    mehr net..
    Er sendet die IP/Computername/Time

    einmal.

    sobald die zeit wiederum ist, sprich 5 sec , und er senden will, krieg ich den error code.

    [autoit]

    #include <timers.au3>

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

    AutoItSetOption("OnExitFunc", "_quit")

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

    TCPStartup(); wird nur einmal aufgerufen

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

    Global $szIPADDRESS = "192.168.245.128"
    Global $nPORT = 33891

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

    AdlibRegister('_client', 5000); rufe die func _client alle 5 sec auf

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

    While 1
    Sleep(100)
    WEnd

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

    Func _client ()
    Local $ConnectedSocket
    $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
    If @error Then
    msgbox(0,"",@error)
    Else
    $szData = "IP Adresse:" & "" & @IPAddress1 & "" & "Computername: " & "" & @ComputerName & "" & "Zeit des Clienten:" & "" & @HOUR & ":" & @MIN & ":" & @SEC
    TCPSend($ConnectedSocket, $szData)
    EndIf
    EndFunc ;==>_client

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

    Func _quit()
    TCPShutdown()
    EndFunc ;==>_quit

    [/autoit][autoit][/autoit][autoit][/autoit]
  • gehts so:

    [autoit]

    #include <timers.au3>

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

    ;AutoItSetOption("OnExitFunc", "_quit") hab gerade festgestellt das es das in neueren autoitversionen nicht mehr gibt

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

    TCPStartup(); wird nur einmal aufgerufen

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

    Global $szIPADDRESS = "192.168.245.128"
    Global $nPORT = 33891
    Global $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)

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

    AdlibRegister('_client', 5000); rufe die func _client alle 5 sec auf

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

    While 1
    Sleep(100)
    WEnd

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

    Func _client ()
    $szData = "IP Adresse:" & "" & @IPAddress1 & "" & "Computername: " & "" & @ComputerName & "" & "Zeit des Clienten:" & "" & @HOUR & ":" & @MIN & ":" & @SEC
    TCPSend($ConnectedSocket, $szData)
    EndFunc ;==>_client

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

    Func _quit()
    TCPShutdown()
    EndFunc ;==>_quit

    [/autoit]
    • Offizieller Beitrag

    Error 10061 = Connection refused. No connection could be made because the target computer actively refused it. This usually results from trying to connect to a service that is inactive on the foreign host—that is, one with no server application running.

    Connecte nur einmal (außerhalb der Funktion, $ConnectedSocket global deklarieren).

    Edit: Mist! Zu spät! Aber knapp war's... ^^

  • funktioniert danke :)
    ich saß 3h und hab versucht das ding rauszukriegen, da schreibt ma hier einma den error code rein und schon sindse dabei :D

    kurz was anders:

    [autoit]

    $szData = "IP Adresse:" & "" & @IPAddress1 & "" & "Computername: " & "" & @ComputerName & "" & "Zeit des Clienten:" & "" & @HOUR & ":" & @MIN & ":" & @SEC

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

    der macht dazwischen keine leerzeichen^^ der macht alles in eine reihe.

    :(

    solla aber net

  • wo kein leerzeichen steht da macht er auch keins :D

    ich denke mal du wolltest es so haben:

    [autoit]

    $szData = "IP Adresse: " & @IPAddress1 & " Computername: " & @ComputerName & " Zeit des Clienten: " & @HOUR & ":" & @MIN & ":" & @SEC

    [/autoit]