Page 1 sur 1

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

Posté : sam. 09 janv. 2010 03:13
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:

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

Posté : sam. 09 janv. 2010 03:28
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

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

Posté : sam. 09 janv. 2010 10:58
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 !!!!

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

Posté : sam. 09 janv. 2010 11:07
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 :(

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

Posté : sam. 09 janv. 2010 11:17
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é. ;)

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

Posté : sam. 09 janv. 2010 19:38
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!

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

Posté : lun. 11 janv. 2010 10:03
par Habibsbib
Lol, ben au moins, j'aurais donné le code fonctionnel avec la vieille version ^^

Toujours rien à dire, matwachich ^^

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

Posté : ven. 15 janv. 2010 01:25
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 ;)

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

Posté : ven. 15 janv. 2010 10:01
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.