Bonsoir !
Je tente de développer un programme en Delphi qui nécessite d'échanger des données entre deux PC via internet. (que ce soit avec les composants VCL, Indy, Asphyres,...)
Le problème est que mon PC ainsi que de plus en plus de PC d'ailleurs se trouve derrière un routeur, à "cause" de l'ADSL.
Je lis partout qu'il faut configurer le modem (ou autre routeur) pour qu'il transmette les données envoyées sur le port désigné dans le programme client au bon PC, en précisant un port (identique ou non). Pas trop de soucis, j'ai du faire ça une fois pour jouer à Znes en ligne.
Maintenant je n'ai rien trouvé après des heures de recherches qui dise qu'il est possible de ne pas avoir à configurer le routeur... pourtant si je prend par exemple, sans vouloir faire de pub, le jeu Wolfenstein Enemy Territory, rien ne me demande de configurer le routeur, mais le programme arrive très bien à envoyer aux autres joueurs mes coordonnées (là ça va, on est le client) et surtout .. à récupérer les coordonnées des autres ?! Dans ce cas on est serveur non ? Ou alors de quelle manière le serveur de jeu (ou le programme des autres joueurs, comme client ?! - je ne connais pas le fonctionnement justement- ) me les envoit-il ? Ne doit-on pas être serveur pour recevoir des données ?
Le truc c'est que j'aimerai bien que mon programme soit à la fois client et serveur, mais qu'il récupère automatiquement les IPs des autres joueurs, ça facile, j'ai une bdd MySQL gérée en php pour inscrire les joueurs (login, pass, map -le jeu sera divisé en petits secteurs-, ..) et une page affichant l'ip publique du joueur (le prog la récupère tout seul biensûr - le code pour ceux que ça intéresse parce que j'ai pas mal cherché puis bidouiller :
PC_IP est une variable String déclarée en globale, pour être réutilisée n'importe où. On peut sans doute virer la variable "x" pour le remplacer tout de suite par "Mystreamt.Size" je viens d'y penser en collant mon code lol Je test tout à l'heure d'abord un petit dodo...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 ///////////////////////////////// procedure TMainForm.FormCreate(Sender: TObject); var MyStreamt:TMemoryStream; IPtxt : string; x : integer; begin MyStreamt:=TMemoryStream.Create; DIP.Get('http://www.ironsquare.com/ip.php',Mystreamt); Mystreamt.Position := 0; x := Mystreamt.Size; SetLength(IPtxt, x); Mystreamt.Read(IPtxt[1], x); PC_IP := IPtxt; MyStreamt.Free; end; ////////////////////////////////
ip.php est un simple code PHP :)
Code : Sélectionner tout - Visualiser dans une fenêtre à part <?php echo $_SERVER["REMOTE_ADDR"]; ?>
Ensuite avec ces IPs (IP des joueurs étant en ligne - signalé présent dans la bdd au lancement du jeu - et sur la même map) j'échange les coordonnées directement entre joueurs, donc chaque joueur devient client et serveur. Une autre solution était de passer par la bdd mais c'est beaucoup beaucoup beaucoup trop lent. bref, en résumé j'aimerai vraiment faire comme dans Wolfenstein, ne pas avoir à configurer son routeur pour jouer à mon peut-être futur jeu (lol)
Personne n'aurait une idée ? Une piste sérieuse ? Au pire il reste la solution de faire un petit tuto avec le programme expliquant comment configurer le routeur pour autoriser l'utilisation du (ou des) port du jeu avec la redirection... mais bon j'ai vraiment très envie de savoir comment certains programmes (comme Wolfenstein, MSN,...) y arrivent.
Voila.. désolé pour la longeur du post j'ai souvent du mal à m'arrêter lol.
Bonne nuit à tous et merci à toute réponse pouvant ne serait-ce que me remettre un peu dans la bonne voie;
Partager