[EX] Connexion TCP (Enfin un truc qui marche!)

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

[EX] Connexion TCP (Enfin un truc qui marche!)

#1

Message par matwachich »

Alors voila, j'y ai passé une nuit blanche mais j'y suis arrivé!

Serveur:
► Afficher le texte
Client:
► Afficher le texte
PS:
- Je sais que ce n'est pas complet mais c'est une excellente base!
- J'ai eu des problèmes avec la gestion du faite de quitter le script ($GUI_EVENT_CLOSE), mais je suis trop faignant pour le faire! je vous laisse le soin de le faire!
- Il n'y que quelques commentaires dans le code, ce sont les ESSENTIELS! Il faut les lires pour comprendre l'utilité du script! appart ça, le fonctionnement n'est pas commenté!
- Voici quand même une petit explication du fonctionnement :P :
*On lance le serveur, il se met en écoute sur l'ip EXTERNE de la machine.
*On lance le client et on clique sur "connect", on entre l'ip sur laquelle écoute le serveur. La demande de connexion est partie, et le serveur attend le mot de passe! (Regardez dans le haut du code du serveur la variable $password!), pour envoyer au serveur le mot de passe (et n'importe quoi d'autre aussi) on clique sur Send dans le client, et on envoi le mot de passe.
*Une fois que c'est fait, la connexion est établie, et on peut voir la partie de ping-pong entre le serveur et le client!!! :lol:
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
networe
Niveau 4
Niveau 4
Messages : 92
Enregistré le : lun. 30 nov. 2009 02:36
Status : Hors ligne

Re: [EX] Connexion TCP (Enfin un truc qui marche!)

#2

Message par networe »

J'ai une érreur à OnAutoItExitRegister("_onExit") , Unknown function
Apres quand jéfface la ligne, Connection attemp..0...1..2..3..4..5..6.7..8..9..10..11... Sans réponce
Habibsbib
Niveau 7
Niveau 7
Messages : 393
Enregistré le : dim. 30 août 2009 13:49
Localisation : Euh...Verticale, entre le siège et l'écran...
Status : Hors ligne

Re: [EX] Connexion TCP (Enfin un truc qui marche!)

#3

Message par Habibsbib »

:shock:
Une nuit pour ça !

Tu me fais peur matwachich là ! C'est tout simplement excellent, mes respects !

En plus, aucune config' ne semble nécessaire, la connection est immédiate !

Bravo !!!!
Habibsbib
Niveau 7
Niveau 7
Messages : 393
Enregistré le : dim. 30 août 2009 13:49
Localisation : Euh...Verticale, entre le siège et l'écran...
Status : Hors ligne

Re: [EX] Connexion TCP (Enfin un truc qui marche!)

#4

Message par Habibsbib »

networe a écrit :J'ai une erreur à OnAutoItExitRegister("_onExit") , Unknown function
Après quand j'efface la ligne, Connection Attemp &..0...1..2..3..4..5..6.7..8..9..10..11... Sans réponse
Matwachich c'est en effet légèrement trompé, la commande "OnAUtoitExitRegister" n'existe pas. J'ai modifié avec ça, et là ça marche :

Code : Tout sélectionner

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Compression=4
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("OnExitFunc", "_OnExit")

#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Client", 296, 296)
$console = GUICtrlCreateEdit("", 8, 8, 281, 249, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_HSCROLL,$WS_VSCROLL))
$b_connect = GUICtrlCreateButton("Connect", 8, 264, 89, 25, $WS_GROUP)
$b_sendMsg = GUICtrlCreateButton("Send message", 200, 264, 89, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global $connected_socket = -1
Global $connect_stat = False
Global $port = 8080

;############# Main loop #############################
While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            Exit 0
        Case $b_connect
            If GUICtrlRead($b_connect) = "Connect" Then
                _connect()
            ElseIf GUICtrlRead($b_connect) = "Disconnect" Then
                TCPSend($connected_socket, "disconnect")
                _toconsole("Disconnecting...")
            EndIf
        Case $b_sendMsg
            TCPSend($connected_socket, InputBox("Client", "Message to server", ""))
        ; Ici, on rajoute des cas de gestion d'envoi au serveur, exemple: un bouton $truc, s'il est actionné, alor on envoi
        ; au serveur le méssage "truc".
        ; Ou alors, on envoi manuellement le message "truc" grace au bouton $b_sendMsg
    EndSwitch
WEnd
;##########################################################

;################ Connecting Functions ###################
Func _connect()
    $ip = InputBox("Client", "Enter server's IP", "")
    _toconsole("Connection request to: "&$ip)

    $ret = TCPStartup()
        If $ret = 0 Then Return -1

    For $i = 0 To 10 Step 1
        $connected_socket = TCPConnect($ip, $port)
            If $connected_socket <> -1 And $connected_socket <> 0 Then
                ExitLoop
            ElseIf @error = 1 Then
                _toconsole("Invalid IP!")
                Return -1
            ElseIf @error = 2 Then
                _toconsole("Invalid port!")
                Return -1
            ElseIf $i = 10 Then
                _toconsole("Unable to connect after 10 attempts")
                Return -1
            EndIf
        _toconsole("Connection attempt "&$i)
        Sleep(5000)
    Next
    _toconsole("Connection to: "&$ip)
    AdlibRegister("_receive", 0.1)
EndFunc

Func _confirm_connection()
    _toconsole("confirmed ("&@HOUR&":"&@MIN&")")
    GUICtrlSetData($b_connect, "Disconnect")
    $connect_stat = True
    Return 0
EndFunc
;###############################################################

;################ Disconnect Function ##########################
Func _disconnect()
    TCPShutdown()
    _toconsole("Disconnected! ("&@HOUR&":"&@MIN&")")
    AdlibUnRegister("_receive")
    GUICtrlSetData($b_connect, "Connect")
    $connect_stat = False
EndFunc
;################################################################

;################### Receiving Function #########################
Func _receive()
    $recv = TCPRecv($connected_socket, 1000000)
    If $recv = "" Then Return
    Switch $recv
        Case "Server on stand-by"
            _disconnect()
        Case "connection ok"
            _confirm_connection()
        ; Ici, on rajoute la gestion de reception des messages du serveur, exemple: si on recoit le méssage "machin",
        ; alors on appel la fonction machin()
    EndSwitch

    If $recv <> "" And IsString($recv) Then _toconsole("Server: "&$recv)
    If $recv = "Ping" Then TCPSend($connected_socket, "Pong")
EndFunc
;################################################################

;#################### Misc Functions ############################
Func _toconsole($data)
    GUICtrlSetData($console, "> "&$data &@CRLF& GUICtrlRead($console))
EndFunc

Func _OnExit()
    If $connect_stat = True Then
        TCPSend($connected_socket, "disconnect")
        While 1
            $rcv = TCPRecv($connected_socket, 100)
            If $rcv = "Server on stand-by" Then ExitLoop
        WEnd
        _toconsole("Serveur on stand by")
        _toconsole("Exiting...")
        Sleep(1000)
    Else
        Return 0
    EndIf
EndFunc
;#################################################################
 
 
Voila, la ça devrait marcher.

EDIT:

J'ai pas pu tester le client parce que le pare-feu m'a bloqué l'edit principal, et je suis pas admin sur mon ordi :(
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11796
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [EX] Connexion TCP (Enfin un truc qui marche!)

#5

Message par Tlem »

Pendant que Habibsbib plaçait son code, je modifiait le message original pour rajouter les balises de code Autoit et pendant que je faisait quelques modifications dans le code du client (problème de variables).

Personnellement je n'ai pas vu de problème majeur sur le code du serveur, si ce n'est qu'il y à un problème de gestion de la GUI (qui ne se ferme pas correctement comme il l'a indiqué).

De plus il aurait été sympa de pouvoir utiliser une IP interne au lieu de l'externe au cas ou on voudrait utiliser ce code dans un réseau privé. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [EX] Connexion TCP (Enfin un truc qui marche!)

#6

Message par matwachich »

Bon:
1) Pour l'ip interne il suffit en haut dans le serveur de modifier la variable $ip et de lui mettre @IPadress1
2) OnAutoitExitRegister est dans Autot 3.3.2.0! (il serait temps de vous metres a jour les gars!!! lol)
3) pour celui qui n'arrive pas a se connecter, verifie ton parefeu, et tes adresse ip (il faudrait peut être metre l'ip interne!)

Voila! merci pour vos commentaires!
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Habibsbib
Niveau 7
Niveau 7
Messages : 393
Enregistré le : dim. 30 août 2009 13:49
Localisation : Euh...Verticale, entre le siège et l'écran...
Status : Hors ligne

Re: [EX] Connexion TCP (Enfin un truc qui marche!)

#7

Message par Habibsbib »

Lol, ben au moins, j'aurais donné le code fonctionnel avec la vieille version ^^

Toujours rien à dire, matwachich ^^
Douves
Status : Hors ligne

Re: [EX] Connexion TCP (Enfin un truc qui marche!)

#8

Message par Douves »

matwachich a écrit :Bon:
1) Pour l'ip interne il suffit en haut dans le serveur de modifier la variable $ip et de lui mettre @IPadress1
2) OnAutoitExitRegister est dans Autot 3.3.2.0! (il serait temps de vous metres a jour les gars!!! lol)
3) pour celui qui n'arrive pas a se connecter, verifie ton parefeu, et tes adresse ip (il faudrait peut être metre l'ip interne!)

Voila! merci pour vos commentaires!
Ou sinon, Tu modifies par ton I.P. réseau, dans mon cas, @ipadress1 retourne mon ip "machine" (127.0.0.1) alors que mon IP réseau est 192.168.1.10

Pour la connaitre

Démarrer -> éxecuter -> Ipconfig/all
retourne ton IP ;)
Habibsbib
Niveau 7
Niveau 7
Messages : 393
Enregistré le : dim. 30 août 2009 13:49
Localisation : Euh...Verticale, entre le siège et l'écran...
Status : Hors ligne

Re: [EX] Connexion TCP (Enfin un truc qui marche!)

#9

Message par Habibsbib »

Il a pas que ça à faire, de cliquer sur démarrer puis exécuter ^^ D'ailleurs il y a des posts sur ça dans le fofo.
Répondre