TCP Hilfe - Server - Client

  • Hallo, das ist ein Login Server + Client, würde das gerne am Anfang meines Programmes reinsetzten, damit nur bestimmte Leute zugriff haben. Zur Erklärung: Beim Client sind am Anfang 2 Inputboxen, wo man Username + Password eingeben muss. Dannach sendet Der Client es an den Server und der Server checkt, ob es in der Textdatei übereinstimmt. Das bekomme ich alles noch hin. Aber jetzt möchte ich, dass der Server dem Client nach dem checken der text datei sagt, ob er nun zugriff hat oder nicht. Ich würde vom Server dann ebend eine Variable $message z.b. senden, die entweder z. B. "ja" und "nein" heisst. Der Client überprüft die $message. Wenn sie = "ja" ist dann ist er eingeloggt. Wenn "nein" dann muss ers nochmal versuchen ;). Aber wie kann ich denn vom Server aus dem Client etwas senden? Ich müsste ja dann seine IP benötigen o.ä. und warscheinlich müsste er auch Ports offen haben. Das will ich ja vermeiden. Ich will dem Client was senden, wenn er auf dem Server ist. Er soll dementsprechend so lange warten. Bitte um Hilfe :P

    Server:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Server

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

    global $srecv

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

    Const $IP = @IPAddress1
    Const $PORT = 81

    TCPStartup()

    $nListen = TCPListen($IP,$PORT)

    $nAcc = TCPAccept($nListen)
    While $nAcc = -1
    $nAcc = TCPAccept($nListen)
    WEnd
    $sRecv = TCPRecv($nAcc,1024)
    While $sRecv = ""
    $sRecv = TCPRecv($nAcc,1024)
    Sleep(100)
    WEnd
    if $sRecv = Filereadline("C:\Dokumente und Einstellungen\Domy\Desktop\project\user.txt", 1) then
    _connect()
    elseif $sRecv = Filereadline("C:\Dokumente und Einstellungen\Domy\Desktop\project\user.txt", 2) then
    _connect()
    Else
    _nconnect()
    endif

    func _connect()
    ; tcp send erlaubnis
    endfunc

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

    func _nconnect()
    ; tcp send keine erlaubnis
    endfunc

    [/autoit]

    Client:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Client

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

    #include <GuiConstants.au3>

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

    Const $IP = @IPAddress1
    Const $PORT = 81

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

    GUICreate ( "Login", 250, 200)
    guisetstate (@SW_SHOW)
    Opt("GUIOnEventMode", 1)
    guisetonevent($GUI_EVENT_CLOSE, "_exit")
    $msg = guigetmsg()
    If $msg = $GUI_EVENT_CLOSE then exit

    $Input1 = guictrlcreateinput("", 100, 50, 70)
    $Input2 = guictrlcreateinput("", 100, 100, 70)
    $Button = guictrlcreatebutton("Einloggen", 55, 150, 70)

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

    guictrlsetonevent($Button, "_send")

    func _send()
    $Loginname = guictrlread($Input1)
    $Password = guictrlread($Input2)
    $message = $Loginname & " " & $Password
    TCPStartup()
    $nCon = TCPConnect($IP,$PORT)
    While $nCon = -1
    $nCon = TCPConnect($IP,$PORT)
    WEnd
    TCPSend($nCon,$message)
    endfunc

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

    func _exit()
    Exit
    endfunc

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

    while 1
    sleep(100)
    wend

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Hi, ich hab mal was in vereinfachter From gebastelt, kannst du bestimmt weiter ausbauen :)

    Server
    [autoit]


    ;HotKey für das Beenden vom Server
    HotKeySet("{ESC}","_Shutdown")

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

    ; Variablen
    $ServerIP = "127.0.0.1"
    $ServerPort = 81
    $ConnectedSocket = -1
    $recvUser = ""
    $recvPwd = ""

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

    ;TCP starten
    TCPStartup()

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

    ;MainSocket erstellen
    $MainSocket = TCPListen($ServerIP, $ServerPort )

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

    ;Bei Fehlschlag Server beenden
    If $MainSocket = -1 Then Exit

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

    ;Meine Testdaten
    $Username = "McPoldy"
    $Passwort = "AutoIT"

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

    While 1
    $ConnectedSocket = TCPAccept( $MainSocket)
    If $ConnectedSocket >= 0 Then
    Empfangen()
    EndIf

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

    WEnd

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

    Func _Shutdown()
    TCPCloseSocket($ConnectedSocket)
    TCPShutdown()
    Exit
    EndFunc

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

    Func Empfangen()
    While $ConnectedSocket >= 0
    $recv = TCPRecv( $ConnectedSocket, 2048 )
    If StringLen($recv) > 0 then
    Switch StringLeft($recv,6)
    Case "Auth1:"
    $strLen = StringLen($recv) - 6
    $recvUser = StringMid($recv,7,$strLen)
    Case "Auth2:"
    $strLen = StringLen($recv) - 6
    $recvPwd = StringMid($recv,7,$strLen)
    If $Username = $recvUser AND $Passwort = $recvPwd Then
    TCPSend($ConnectedSocket,"Anmeldung erfolgreich!")
    Else
    TCPSend($ConnectedSocket,"Anmeldung NICHT erfolgreich!")
    EndIf
    TCPCloseSocket($ConnectedSocket)

    Return 0
    EndSwitch
    EndIf
    WEnd

    EndFunc

    [/autoit]
    Client
    [autoit]


    TCPStartUp()

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

    Dim $szIPADDRESS = "127.0.0.1"
    Dim $nPORT = 81

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

    Dim $ConnectedSocket = -1
    $ConnectedSocket = TCPConnect($szIPADDRESS,$nPORT)
    If $ConnectedSocket = -1 Then Exit
    Dim $szData

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

    $szData = "Auth1:" & InputBox("User","Bitte Benutzer eingeben:","McPoldy")
    TCPSend($ConnectedSocket,$szData)
    Sleep(2000)
    $szData = "Auth2:" & InputBox("Passwort","Bitte Passwort eingeben:","AutoIT")
    TCPSend($ConnectedSocket,$szData)

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

    While 1
    $recv = TCPRecv( $ConnectedSocket, 2048 )
    If StringLen($recv) > 0 then
    MsgBox(0,"Anmeldevorgang",$recv)
    TCPCloseSocket($ConnectedSocket)
    TCPShutdown()
    Exit
    EndIf
    WEnd

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

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)