Bonjour il me faudrait en fait 2 script:
-le premier en voie l'ip de l'utilisateur au second a chaque ouverture.
-le second analyse l'ip et s'il s'agit d'une nouvelle il ajoute d'une nouvelle il ajoute 1 à un compteur. Ce prog tournerai en permanence sur mon pc et attend les données du premier
Je pense que c'est réalisable avec TCP mais je n'arrive pas à m'en servir je ne comprend ce qu'est le port, je ne sais pas comment trouver un serveur fiable et sécuriser et tout mes essaies étaient bugger
Merci d'avance
Modifié en dernier par Bonjour le dim. 03 août 2014 16:08, modifié 1 fois.
Je suis désolé mais j'ai un gros problème je n'arrive absolument pas à lire un prog si ce n'est pas moi qui l'ai éditer et s'il est trop gros j'ai essayé 10 min et je n'ai pas arrêter de m’embrouiller...
Je ne sais pas si je me suis bien expliquer : ce n'est pas un chat que je voudrais en fait c'est comme ça que je m'imagine le prog
► Afficher le texteprog1
il se connecte
il envoie son ip
il se deconnecte et fait ce pour quoi il a été creer
► Afficher le texteprog2
il se connecte
il attend une adresse ip
il regarde si celle ci est déjà arriver aujourd'hui
si oui il recommence à attendre une ip
si non il l'a sauvegarde et recommence
En espérant vous avoir aider à comprendre mon problème
Global $socket, $monip = @IPAddress1, $IpDest=@IPAddress1,$port = 9958, $toSend ; ici, tu remplacera $IpDest par l'IP de ton serveur, donc dans le cas présent, nous imaginons que l'ip de la machine sur laquelle tourne ton serveur est ta machine, donc ton ip
TCPStartup() ; le programme utilise désormais le protocole TCP/IP
$socket = TCPConnect($IpDest,$port) ; on tente une connexion à l'IP xxx.xxx.x.xxx
If $socket = -1 Or $socket = 0 Then ; si on ne peut pas se connecter
MsgBox(16,"", "Impossible de se connecter au serveur!")
TCPShutdown() ; le programme n'utilise plus le protocole TCP/IP
Exit ; on quitte le programme
EndIf
local $toSend=$monip
TCPSend($socket,$toSend)
MsgBox(64,"","Votre adresse IP ("&$monip&") a été envoyée avec succès!")
TCPCloseSocket($socket) ; ferme la connexion
TCPShutdown() ; le programme n'utilise plus le protocole TCP/IP
#include <Array.au3>
HotKeySet("{ESC}","_Exit") ; assigne la fonction "quitter" à la touche "Echappe"
HotKeySet("{F1}","_ClientsShow") ; assigne la fonction "afficher la liste des clients" à la touche "F1"
Global $IPAddress = @IPAddress1, $port = 9958, $listener = -1, $socketsArray[2] = [0,-1], $maxSockets = 100, $temp, $tempArray, $datas,$path="data.txt" ; on déclare les variables accessibles depuis tout le script
TCPStartup() ; on démarre le service TCP
$listener = TCPListen($IPAddress,$port,$maxSockets) ; création du socket d'écoute
If $listener = -1 Then ; si il y a une erreur, on l'affiche et on ferme service TCP et programme
MsgBox(16,"Erreur","Erreur lors de la création du socket d'écoute : n°" & @error)
TCPCloseSocket($listener)
TCPShutdown()
EndIf
if FileExists($path)=1 Then
FileDelete($path)
EndIf
if FileOpen($path,1)=-1 Then
MsgBox(0,"","erreur d'ouverture du fichier")
Exit
EndIf
While 1 ; boucle principale du serveur
If UBound($socketsArray)-1 = $socketsArray[0] Then _ArrayAdd($socketsArray,-1) ; si jamais le nombre de connexion noté (socketsArray[0]) est égale au nombre de clients connectés, on ajoute un dernier élément qui sera utilisé pour accepter un autre client
;~ ### DETECTION DES CLIENTS TOUJOURS CONNECTÉS ###
If $socketsArray[0] <> 0 Then ; s'il y a un ou des clients connectés
For $i = 1 To $socketsArray[0] ; pour chacun des clients connectés
$temp = TCPSend($socketsArray[$i],"TestConnexion") ; on envoie un packet de données
If $temp = 0 Then ; si le paquet n'est pas bien transmis
TCPCloseSocket($socketsArray[$i]) ; on ferme (pour être propre) la connexion
$socketsArray[0] -= 1 ; on enlève 1 au nombre de clients connectés
_ArrayDelete($socketsArray,$i) ; on enlève l'élément de rang $i de l'array
EndIf
Next
EndIf
;~ ### AJOUT D'UN NOUVEAU CLIENT ###
If $socketsArray[0] = 0 Then ; s'il n'y a aucun client de connecté
$socketsArray[1] = TCPAccept($listener) ; on accepte une connexion en tant qu'élément 1 du tableau
If $socketsArray[1] <> -1 Then ; s'il n'y a pas d'erreur
_ArrayAdd($socketsArray,-1) ; on ajoute un dernier élément qui sera utilisé pour accepter un autre client
$socketsArray[0] += 1 ; on ajoute 1 au nombre de clients connectés
EndIf
Else ; sinon (ça veut dire qu'au moins un client est connecté)
$socketsArray[$socketsArray[0]+1] = TCPAccept($listener) ; on accepte une connexion en tant que dernier élément du tableau
If $socketsArray[$socketsArray[0]+1] <> -1 Then ; s'il n'y a pas d'erreur
_ArrayAdd($socketsArray,-1) ; on ajoute un dernier élément qui sera utilisé pour accepter un autre client
$socketsArray[0] += 1 ; on ajoute 1 au nombre de clients connectés
EndIf
EndIf
;~ ### RECEPTIONS DES DONNÉES DE TOUS LES CLIENTS ###
For $i = 1 To $socketsArray[0] ; pour chacun des clients connectés
$temp = TCPRecv($socketsArray[$i],9999) ; on attend la réception de données
If $temp <> "" Then
$datas &= $temp & @CRLF ; si jamais on reçoit quelque chose, on l'ajoute à la suite de la variable $datas avec un retour à la ligne
FileWrite($path,"Client "&$socketsArray[$i]&": "&$temp&@CRLF)
EndIf
Next
WEnd
Func _Exit()
For $i = 1 To $socketsArray[0] ; pour chacun des clients
TCPCloseSocket($socketsArray[$i]) ; on ferme la connexion
Next
TCPCloseSocket($listener) ; on ferme le socket d'écoute
TCPShutdown() ; on arrête le service TCP
FileWrite($path,"Nombre de client différents à avoir été connecté: "&UBound($socketsArray)-1&@CRLF)
FileClose($path)
Exit
EndFunc
Func _ClientsShow()
_ArrayDisplay($socketsArray,"Etat connexions") ; affiche la liste des clients connectés
EndFunc
"Là où la volonté est grande, les difficultés diminuent.", Niccolò Machiavelli
Euh oui j'ai une question
dans chaque script il y a
$IpDest=@IPAddress1
ou
$IPAddress = @IPAddress1
qui sert de premier argument au la fonction TCPListen()
Sur mon pc sa marche mais si j'implante le prog qui envoie l'ip dans mon prog et que je le donne a quelqu'un qui s'en sert chez lui est ce que cela fonctionnera alors qu'il n'a pas la même ip que moi ?
Edit : euh en fait je m'excuse je n'avais pas lu tout les commentaires
Pendant que je suis je vais en profité: c'est quoi le port, est ce que c'est juste un nombre aleatoire entre 100 et 1000 ou est ce qu'il faut bien le choisir ?
Oui alors y a aussi _GetIP() pour l'adresse IP publique que j'avais oublié de mentionner...
Sinon le port, bah écoute, dixit blacksoul305:
Passons au second argument, le port. Le port est un numéro allant de 1 à 65 536. Les seules et uniques règles sont que :
Le port choisi ne doit pas être un port réservé par Windows
Le port ne dois pas être utilisé par un autre programme.
Le choix d'un port paraît donc compliqué, néanmoins, sachez que vous n'aurez pas de mal à trouver les bons ! Dans notre exemple, nous utiliserons le port 9989. Veuillez jeter un coup d'oeil au lien suivant si jamais vous voulez en savoir un peu plus sur les ports utilisés etc...