Netzwerk Programmierung

  • Moin,

    wollt mal ein Chat programmieren mit AutoIT, aber komme mit der OnEvent GUI einstellung nicht klar.

    Wenn ich auf den Button klicke sollte er eigentlich die Funktion ausführen aber der Server bekommt keine Nachricht.
    Hab es auch mal ohne Button versucht ob überhaupt der Server was wahrnimmt und es hat geklappt, doch so klappt es nicht.

    Also hier mal der Client:

    [autoit]


    #include <GUIConstants.au3>

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

    Opt("GUIOnEventMode", 1)

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

    $window = GUICreate("Client") ; Mainwindow erstellen
    GUISetOnEvent($GUI_EVENT_CLOSE, "Close") ; Close Funktion vom Fenster

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

    $textInput = GUICtrlCreateInput("", 10, 10)

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

    $sendButton = GUICtrlCreateButton("Senden", 300, 10)
    GUICtrlSetOnEvent($sendButton, "nachrichtSenden")

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

    GUISetState(@SW_SHOW, $window) ; MainWindow auf Show setzen

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

    $startTCP = TCPStartup()

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

    If $startTCP <> 1 Then
    MsgBox(0, "", "TCP konnte nicht gestartet werden!")
    Else
    MsgBox(0, "", "TCP erfolgreich gestartet!")
    EndIf

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

    $IP = "127.0.0.1"
    $Port = 12345

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

    $connectSocket = TCPConnect($IP, $Port)

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

    If $connectSocket == -1 Then
    MsgBox(16, "Keine Verbindung.", "Client konnte keine Verbindung zum Server herstellen.")
    Else
    MsgBox(0, "Verbindung Erflogreich", "Erfolgreich mit 127.0.0.1 verbunden!")
    EndIf

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

    While 1
    Sleep(1000)
    WEnd

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

    Func Close()
    Exit
    EndFunc

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

    Func nachrichtSenden()
    TCPSend($connectSocket, "test")
    EndFunc

    [/autoit]
  • [autoit]

    $startTCP = TCPStartup()

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

    If $startTCP <> 1 Then
    MsgBox(0, "", "TCP konnte nicht gestartet werden!")
    Else
    MsgBox(0, "", "TCP erfolgreich gestartet!")
    EndIf

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

    $IP = "127.0.0.1"
    $Port = 12345

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

    $listenSocket = TCPListen($IP, $Port, 10)

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

    If $listenSocket == -1 Then
    MsgBox(16, "", "Server konnte nicht gebunden werden!")
    Else
    MsgBox(0, "", "Server erfolreich im Listen Modus!")
    EndIf

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

    While 1
    $acceptSocket = TCPAccept($listenSocket)
    If $acceptSocket > 0 Then
    MsgBox(0, "", "Verbindung akzeptiert!")
    ExitLoop
    EndIf
    WEnd

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

    While 1
    $socketRecv = TCPRecv($acceptSocket, 255)
    If $socketRecv <> "" Then
    MsgBox(0, "", $socketRecv)
    EndIf
    $socketRecv = ""
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Wow, danke es funktioniert.
    Warum geht das nicht per Lokaler IP?
    Also es ging ja ohne die Funktion, aber so mit dem Button klickt nicht.

    Naja wollt noch fragen, wie ich den String in der Input Textbox senden kann?
    Hab es so versucht:

    [autoit]

    $textInput = GUICtrlCreateInput("", 10, 10)

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

    $sendButton = GUICtrlCreateButton("Senden", 300, 10)
    GUICtrlSetOnEvent($sendButton, "nachrichtSenden(" & $textInput & ")")

    [/autoit]
  • Hmm..

    Ich würd gerne noch wenn der Client sich schließt das beim Server eine Meldung kommt und der Server sich dann auch schließt bzw. sich resetet und auf Listen zurückkehrt.

    Auf meiner Variable $acceptSocket ist TCPAccept gespeichert.

    Doch wenn ich mein Client schließe reagiert der Server nicht :(.

    [autoit]

    While 1
    If $acceptSocket > 0 Then
    $socketRecv = TCPRecv($acceptSocket, 255)
    If $socketRecv <> "" Then
    MsgBox(0, "", $socketRecv)
    EndIf
    $socketRecv = ""
    Else
    MsgBox(16, "Verbindung verloren", "Keine Verbindung mehr vorhanden!"
    Exit
    EndIf
    WEnd

    [/autoit]

    7 Mal editiert, zuletzt von wireNova (27. Juni 2010 um 22:29)

  • Hmm..

    Ich würd gerne noch wenn der Client sich schließt das beim Server eine Meldung kommt und der Server sich dann auch schließt bzw. sich resetet und auf Listen zurückkehrt.

    Auf meiner Variable $acceptSocket ist TCPAccept gespeichert.

    Doch wenn ich mein Client schließe reagiert der Server nicht :(.

    Edit: mit GUICtrlRead kann man ja was von einem Widget auslesen, und wie kann man was editieren? z.B in einem Label was reinschreiben im nachhinein, bzw den Text ändern?

    [autoit]

    While 1
    If $acceptSocket > 0 Then
    $socketRecv = TCPRecv($acceptSocket, 255)
    If $socketRecv <> "" Then
    MsgBox(0, "", $socketRecv)
    EndIf
    $socketRecv = ""
    Else
    MsgBox(16, "Verbindung verloren", "Keine Verbindung mehr vorhanden!"
    Exit
    EndIf
    WEnd

    [/autoit]
  • also
    umd den server zu schließen würde ich das so machen
    server

    [autoit]

    While 1
    $socketRecv = TCPRecv($acceptSocket, 255)
    If $socketRecv = "-1" Then Exit
    If $socketRecv <> "" Then
    MsgBox(0, "", $socketRecv)
    EndIf
    $socketRecv = ""

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

    WEnd

    [/autoit]

    client

    [autoit]

    Func Close()
    TCPSend($connectSocket, "-1")
    Exit
    EndFunc

    [/autoit]


    zu deinem edit

    [autoit]

    guictrlsetdata

    [/autoit]
  • Ok dankeschön =)

    Guictrlsetdata hab ich auch schon gefunden, aber trotzdem Danke =).

    Edit:
    Hätte noch eine Frage bei if $socket = "-1" warum nur ein "="? Das setzt doch eigentlich eine Variable müsste das nicht ein vergleichsoperator sein "=="?

    Aber mit dem vergleichsoperator ging es nicht, warum ein zuweisungsoperator benutzen?

    Einmal editiert, zuletzt von wireNova (27. Juni 2010 um 22:57)