Page 1 sur 6
[..] Script de connection TCP/UDP (Projet)
Posté : mar. 04 nov. 2008 01:36
par L4crymal
Salutation, Je vais vous raconter une histoire:
Il était une fois, AUTOIT, il aidait au début beaucoup de personne aimant l'informatique à faire des "macro", mais AUTOIT étant très réputé et puissant, il évolua et devenu encore + puissant et recueillant + de possibilités de fonctionnement. Mais aujourd'hui, les utilisateurs de AUTOIT se posent une question : Pourquoi les fonctions sur TCP/UDP existent telles si personnes ne sais les faire fonctionner entre 2 ordinateurs ou ne sais que très peut de leur puissance?
C'est alors que ce projet naquit : Le pouvoir de la connexion TCP/UDP !
Je vais tenter de faire un script/tuto sur ces fonctions, et j'ai besoin de VOUS! *Oncle Sam pour ceux qui connaissent*
Voici les deux scripts là ou ils en sont (Explications Traduite):
SERVER :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)
;==============================================
;==============================================
;SCRIPT DU SERVER ; A LANCER EN PREMIER
;==============================================
;==============================================
Example()
Func Example()
Sleep (100)
; INFOS A COMPLÉTÉES
Local $szServerPC = @ComputerName
Local $szIPADDRESS = TCPNameToIP($szServerPC)
Local $nPORT = 14584
Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted
Local $msg, $recv
; Lancement des services TCP
;==============================================
TCPStartup()
; Ouverture d'un port sur le reseau / ATTENTION UN PARE FEU PEU BLOQUER CETTE FONCTION
; Utilisation pour l'ouverture de : L'ip Public (@IPAddress1) avec le port 14584 (inutilisé normalement)
;==============================================
$MainSocket = TCPListen($szIPADDRESS, $nPORT,5000)
; Si la connection au port à échouée, alors on recommence
If $MainSocket = -1 Then
Example()
EndIf
; Création d'un GUI pour envoyer des données vers un autre PC part le port ouvert
;==============================================
$GOOEY = GUICreate("Mon Server (IP: " & $szIPADDRESS & ")", 300, 200)
$edit = GUICtrlCreateEdit("", 10, 10, 280, 180)
GUISetState()
; Initialisation de la variable définissant la connexion
;==============================================
$ConnectedSocket = -1
;Attente d'une demande de connection
;==============================================
Do
$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1
; Connaitre l'adresse IP du CLIENT
$szIP_Accepted = SocketToIP($ConnectedSocket)
; Fenêtre GUI affichant les données envoyées
;==============================================
While 1
$msg = GUIGetMsg()
; Fermeture de la GUI
;--------------------
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
; Reçoit des données à partir du port connecté / 2048 bytes maximum
;----------------------------------------------------------------
$recv = TCPRecv($ConnectedSocket, 2048)
; Si les données on mal été reçues, le SERVER se ferme
;----------------------------------------------------------------
If @error Then ExitLoop
; Rafraichissement des données envoyées
;----------------------------------------------------------------
If $recv <> "" Then GUICtrlSetData($edit, _
$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
WEnd
If $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)
TCPShutdown()
EndFunc ;==>Example
; Fonction permettant de connaitre l'adresse IP du CLIENT connecté au SERVER
;----------------------------------------------------------------------
Func SocketToIP($SHOCKET)
Local $sockaddr, $aRet
$sockaddr = DllStructCreate("short;ushort;uint;char[8]")
$aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
"ptr", DllStructGetPtr($sockaddr), "ptr", 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
$sockaddr = 0
Return $aRet
EndFunc ;==>SocketToIP
CLIENT :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
$szIPADDRESS = InputBox("Connexion à un SERVER", "IP du SERVER : ", @IPAddress1)
Opt('MustDeclareVars', 1)
;==============================================
;==============================================
;SCRIPT DU CLIENT ; A LANCER EN DEUXIEME
;==============================================
;==============================================
Example()
Func Example()
; INFOS A COMPLÉTÉES
Local $ConnectedSocket, $szData
Local $nPORT = 14584
; Lancement des services TCP
;==============================================
TCPStartup()
; Initialisation de la variable définissant la connexion
;==============================================
$ConnectedSocket = -1
;Connection sur le SERVER d'adresse IP:*voir ImputBox* avec le port 14584 (inutilisé normalement)
;=======================================================
$ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
; Si une erreur existe alors on l'envoie par MsgBox puis le script se ferme
If @error Then
MsgBox(4112, "Error", "TCPConnect failed with WSA error: " & @error)
; Si il n'y a pas d'erreur le CLIENT est connecté au SERVER
Else
;Demande de données à envoyées
While 1
; InputBox des données à envoyées
$szData = InputBox("Data for Server", @LF & @LF & "Enter data to transmit to the SERVER:")
; Si il y a une erreur ou si le bouton annuler est préssé le script se ferme, si les données envoyées sont nul, ne rien faire
If @error Then
Exit
ElseIf $szData = "" Then
Sleep (0)
EndIf
; Envoie des données vers le SERVER
TCPSend($ConnectedSocket, $szData)
; Si les données n'ont pas été envoyées, le CLIENT se Déconnecte
;----------------------------------------------------------------
If @error Then ExitLoop
WEnd
EndIf
EndFunc ;==>Example
Si vous avez des amélioration venez me les proposer !
Le script sera mis à jour lorsque une modification sera effectuée
Voici les Problèmes ou questions que je me pose avant de continuer merci de bien vouloir y répondre

:
-Lorsque le bouton Cancel une nouvelle GUI du serveur s'ouvre ( à corriger par : Lorsque le bouton CANCEL est appuyé, le CLIENT se ferme et le SERVER reste tel qu'il est en attente d'une nouvelle connexion)
Re: [..] Script de connection TCP/UDP (Projet)
Posté : mer. 05 nov. 2008 01:08
par arrkhan
sujet interressant il est vrai, ne connaissant que peu de choses (rien a vrai dire) sur le sujet, je suivrai ce topic avec interet
Re: [..] Script de connection TCP/UDP (Projet)
Posté : mer. 05 nov. 2008 07:50
par L4crymal
J'ai bosser pour une petite entreprise la dessus, j'étais rédacteur de tutoriels de création de serveurs privés World Of Warcraft, pour ceux qui connaissent, je faisait aussi des recherches sur l'ouverture des ports des serveurs privés, voila pourquoi j'essaie de me risquer dans autoit sur le même sujet, je pense quand même vous fournir de bonnes infos mais il faudra un peu m'aider pour certaine questions/problèmes ( voir en haut )
Re: [..] Script de connection TCP/UDP (Projet)
Posté : mer. 05 nov. 2008 09:21
par BeCool
L4crymal a écrit :J'ai bosser pour une petite entreprise la dessus, j'étais rédacteur de tutoriels de création de serveurs privés World Of Warcraft
C'est pas illégal les serveurs privé W*W? Bizarre ton truc... Une entreprise doit, normalement faire des choses légales non ?
Re: [..] Script de connection TCP/UDP (Projet)
Posté : mer. 05 nov. 2008 10:43
par minoui
Ben sa depend la ou elle est

Si elle est au îles caïmans elle s'en f.... fiche
Re: [..] Script de connection TCP/UDP (Projet)
Posté : mer. 05 nov. 2008 11:24
par L4crymal
BeCool a écrit :C'est pas illégal les serveurs privé W*W? Bizarre ton truc... Une entreprise doit, normalement faire des choses légales non ?
Non nous on montre comment les faire, ce qui est illégal c'est d'en faire ^^
Concurrence déloyal + confiscation du disque dur ^^ ( World Of Energy )
Bref non ceci n'est pas bizarre mais Blizzard ( ahah jeu de mots -_-' )
Re: [..] Script de connection TCP/UDP (Projet)
Posté : mer. 05 nov. 2008 18:18
par L4crymal
Hop j'avance dans mes recherche et je vous propose un tuto avec HAMACHI
http://www.autoitscript.fr/forum/viewto ... 069#p11069
Prochaine étape : la redirection DNS
Re: [..] Script de connection TCP/UDP (Projet)
Posté : ven. 07 nov. 2008 20:34
par L4crymal
Nouveau : J'ai trouver comment savoir si notre ordinateur peu héberger un server :
1 - Executer cmd.exe ( taper cmd dans la commande d'exécution WINDOWS )
2 - Dans la console taper ipconfig
3 - Vous devez voir ceci ( c'est mes IP je les brouilles pas pour vous les montrer mais si qqun s'amuse à me scanner ou a me nuker je le bousille

)
4 - Regarder bien ce que j'ai encadrer en
ROUGE, cela correspond à vos IP V4 ( votre IP officiel vous permettant de vous connecter à différents réseaux ) en effet c'est cette IP qui va nous servir, taper ipconfig et regarder si vous avez une IP qui correspond à la définition de IPV4 ( pour moi j'en est 2, celle de ma live box(me permettant de communiquer sur ma live box mais pas avec d'autre réseaux), et ma deuxième IPV4 est celle de HAMACHI, Voir plus haut, celle-ci par contre me permet donc de communiquer sur les réseaux de HAMACHI) voila j'espère vous avoir bien appris que :
Ce n'est que avec les IPV4 que les Fonctions TCP/UDP fonctionnent donc faite l'étape 1 et 2 si vous voulez savoir si vous pouvez utiliser ces fonctions.
FIN
Re: [..] Script de connection TCP/UDP (Projet)
Posté : ven. 07 nov. 2008 23:53
par Cyrille
Très sympa ^^ Je crois que je vais me mettre au TCP-IP, ça va m'être plus pratique pour mon logiciel de discutions (plus que le mysql jusqu'à présent ^^)
Est ce que plusieurs client peuvent se connecter au même serveur ?
Si oui, comment on gère les différents messages/actions ?
Un autre truc qu'il me semble pas avoir vu dans ton exemple, c'est comment le serveur peut envoyer un message au client ?
merci d'avance pour les réponses ^^
Re: [..] Script de connection TCP/UDP (Projet)
Posté : sam. 08 nov. 2008 13:11
par L4crymal
Est ce que plusieurs client peuvent se connecter au même serveur ?
Surement mais je n'est pas tester vu que je n'est que 2 ordis pour l'instant ^^
Si oui, comment on gère les différents messages/actions ?
]Mettre un pseudo qui sera visible dans la boite du server ou alors l'IP du client (très bientôt)
Un autre truc qu'il me semble pas avoir vu dans ton exemple, c'est comment le serveur peut envoyer un message au client ?
Un server est un server un client est un client un server ne peut pas envoyer à un client, donc on doit combiner les deux ( à faire bientôt aussi )
Re: [..] Script de connection TCP/UDP (Projet)
Posté : sam. 08 nov. 2008 13:52
par Cyrille
Ok merci de la réponse. Je vais essayer de m'y mettre aussi.
Re: [..] Script de connection TCP/UDP (Projet)
Posté : sam. 08 nov. 2008 15:23
par L4crymal
Ce qui serais bien c'est de trouver comment générer une adresse exploitable par TCP/UDP comme l'IPV4
Re: [..] Script de connection TCP/UDP (Projet)
Posté : sam. 08 nov. 2008 18:42
par Cyrille
Je comprends pas ton idée. Tu voudrais avoir une adresse qui redirige l'ipv4 et qui serai exploitable par le script ? Ou avoir un autre type d'adresse directement ?
Dans le premier cas, c'est simple avec une redirection dns tu peux avoir une adresse du genre monadresse.quelquechose et si tu as une box du redirige le port vers ton serveur.
Pour le deuxième cas c'est pas possible, tout les protocoles, tcp et udp utilisent l'adresse ip.
Re: [..] Script de connection TCP/UDP (Projet)
Posté : dim. 09 nov. 2008 18:01
par L4crymal
J'ai utilisé avec no-ip ( chui pas bête non plus ^^ mais apparemment cela ne marche pas ) mais je vais quand même vous conseiller d'essayer au cas ou
Re: [..] Script de connection TCP/UDP (Projet)
Posté : dim. 09 nov. 2008 19:58
par jbnh
@lacrymal si tu es derriere un routeur et que tu n'as pas ouvert les port ca ne marchera pas, sinon no-ip marche

Re: [..] Script de connection TCP/UDP (Projet)
Posté : dim. 09 nov. 2008 19:59
par L4crymal
Je dois ouvrir quels ports pour No-Ip ?
Re: [..] Script de connection TCP/UDP (Projet)
Posté : dim. 09 nov. 2008 20:05
par Cyrille
Moi j'obtiens une erreur :
WSAECONNREFUSED (10061)
Connection Refused -- The target machine actively refused the attempt to connect to it.
Mais ça veut dire que ça marche je pense :p Juste que ma connexion est refusé.
Re: [..] Script de connection TCP/UDP (Projet)
Posté : dim. 09 nov. 2008 20:43
par L4crymal
Perso chez moi No-ip ne fonctionne pas ... une aide stp jbnh

Re: [..] Script de connection TCP/UDP (Projet)
Posté : dim. 09 nov. 2008 20:52
par jbnh
Je sais juste qu'il faut ouvrir les ports' pcq avant j'avais un routeur et on m'avait dit de le faire. Mais maintenant je suis derriere un modem ^^
Re: [..] Script de connection TCP/UDP (Projet)
Posté : dim. 09 nov. 2008 20:54
par Cyrille
Il faut juste ouvrir les ports que ton script utilise pour qu'il puisse fonctionner.
Je crois pas que no-ip nécessite d'ouvrir un port (moi j'utilise dyndns)
Tu as quoi comme routeur ?