IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Routeur, comment passer en travers ?


Sujet :

Delphi

  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 19
    Par défaut Routeur, comment passer en travers ?
    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 :
    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;
    ////////////////////////////////
    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...
    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;

  2. #2
    Membre extrêmement actif
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 219
    Par défaut
    bonjour,

    il y a un port qui est systématiquement ouvert, c'est le port 80
    tu peux l'utiliser, mais par contre il y aura surement pb avec les utilisateurs qui auraient Apache ou IIS d'installé sur leur poste.

    @++
    Dany

  3. #3
    Membre confirmé
    Profil pro
    Directeur
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut
    J'ai pas lu tt le post, c pas tres utilie, soit t'ouvre le port en allant config le routeur, soit tu utilise un port ouvert, soit, tu etabli la connection en reverse connection pck la plupart du temps de LAN a WAN ca passe mais pas de WAN a LAN. Donc, si t'as un des deux pc qui est sur routeur et l'autre non, tu prends celui qui est sur routeur et tu le fais se connecté a l'autre, si ils ont ts les deux un routeur, c grillé.

  4. #4
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Salut!

    J'ai pas tout lu non plus, mais j'ai déjà longuement cherché une solution à ce problème car je suis déjà tombé dessus et c'est pas forcément un problème de routeur selon moi, mais aussi de firewall. La connection directe par socket nécessite qu'il y ait un pc client et un autre serveur et il n'est pas garanti que l'on puisse démarrer comme serveur sur un autre port que 80. La solution serait l'utilisation d'un tunnel ou bien un serveur dédié car dans ce cas, il n'y aurait plus que des clients. Enfin après tout dépend de ce que tu veux en faire exactement, mais dans ton cas, un serveur dédié est la meilleure solution (OVH = 30€/mois)...
    à+

    [EDIT]
    Ce sujet pourrait peut-être t'interesser :
    http://developpez.net/forums/showthread.php?t=192781

  5. #5
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 19
    Par défaut
    Bonjour,

    Ce que je voudrais c'est que chaque joueur soit lui-même client et serveur, client pour envoyer ces coordonnées aux autres joueurs et serveur pour recevoir les coordonnées des autres joueurs.
    L'utilisation du port 80 semble fonctionner, il y a bien un échange de données entre mon PC et celui d'un ami, alors que nous sommes tous deux derrière un routeur.... parcontre mon code génère une erreur de type violation d'accès.

    Pour résumer, lorsque je lance le jeu, je dois entrer mon login et pass membre (qui sont enregistrés dans une table MySQL sur mon site) pour débloquer le bouton "Lancer". En cliquant sur ce dernier une requête est envoyé à ma bdd pour indiquer que je suis en ligne, indiquer mon IP actuel et récupérer mes données. Ensuite une nouvelle requête sélectionne la liste des joueurs étant sur la même map, j'ai donc leurs IP. Ensuite les joueurs échangent directement les infos entre eux.

    Pour mes test, je commence seul, je n'ai donc aucun IP à qui envoyer des données. Mon pote lance le jeu chez lui avec son login et pass. En cliquant sur "Lancer" il obtient la liste de ceux de la même map, moi en l'occurence. Mon IP s'ajoute donc à sa liste, un message m'est envoyé par le composant TNetCom (un des composants Asphyres). Son programme ne plante pas, je ne reçois pas le message en question (qui m'indique qu'un joueur vient d'arriver) et mon programme ne plante pas non plus.
    Par contre si je quitte et relance, mon pote étant déjà en ligne, j'obtiens son IP et là.... plantage des deux côtés simultanément, ce qui démontre qu'on arrive bien à échanger des données malgrès que je n'ai pas reçu le premier mess me disant que mon pote se connectait.

    J'ignore encore d'où viennent ces deux erreurs, le fait de ne pas recevoir le premier message et le pourquoi de l'erreur de type violation d'accès.

  6. #6
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Pour une connection directe entre 2 machines, il faut l'IP et le port.
    Si tu utilises le port 80 pour le serveur, ça ne peut pas fonctionner puisque ce port est déjà pris par internet. Il faut donc que le serveur choisisse un port libre et le client le même port... Et puis ya un port pour l'émission et un pour la reception... Je pense qu'ils peuvent être identiques, mais je n'en suis pas sûr.

    A propos, tu as lu ce topic ?
    http://developpez.net/forums/showthread.php?t=192781

    Ya une démo de Nono40 pour transférer un fichier, tu devrais l'essayer pour mettre au point ton programme...
    Au moins tu sauras si la communication entre vos 2 machines fonctionne.

  7. #7
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 104
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 104
    Par défaut
    Salut !

    Les problèmes de "violation d'accès" sont très souvent dûs à des embrouilles avec les pointeurs.
    Et je suppose (pour avoir utilisés les composants de Piette) que ces petites bêtes (qui les utilisent beaucoup - les pointeurs) sont sensibles à des détails insignifiants comme ne pas oublier de terminer une chaîne à envoyer avec le caractère #0, je crois (de mémoire, voir la FAQ de Piette sur www.overbyte.be).

    D'un autre côté, à mon avis, tu galèrerais moins si tu avais une seconde machine à portée de main : tu pourrais faire un code truffé de "ShowMessage", tu pourrais *facilement* voir où ça coince.

    Mes 2 cts,
    --
    jp

  8. #8
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 19
    Par défaut
    Hello,

    Merci pour les tuyaux.

    Jipété, j'utilise TNetCom des composants Asphyres pour l'échange de données, pas ICS. Je vais quand même voir si j'y trouve un rapport plus directe avec mon soucis actuel.

    Pour l'envoie et la réception sur un même port il me semble que c'est possible. Ou en tout cas en local. Avant de tester avec mon pote je testai avec moi même et je recevais bien les données que j'envoyais. Peut-être que le composant TNetCom ne fais pas pareil que les autres.

    Pour les pointeurs, avec TNetCom je déclare un "^string" puis j'y enregistre le string à envoyer avec P1 := @Mess; (P1 étant le pointeur et Mess le string à envoyer).
    A la réception c'est pareil mais avec P2 et Mess2, et dans l'autre sens :
    Mess2 := P2^;

    P2 ayant prit la valeur de P1 dans la procédure de réception. A aucun moment la démo de ce composant parle d'un #0 ou autre.

  9. #9
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 104
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 104
    Par défaut
    j'utilise TNetCom des composants Asphyres
    Oui, j'avais bien vu, mais je sais que les FAQ de Piette sont sympa et bourrées de conseils utiles et généraux.
    (En plus il est plein d'exemples)
    Inspire-toi d'exmples de chat et/ou de ftp, ce que tu veux faire semble être un mix des deux.

    Mes 2 cts,
    --
    jp

  10. #10
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Je vais aussi devoir coder un tchat pour mon jeu d'échec. Malgré qu'il ya moins de données à transmettre pour un jeu d'échec ou des messages, je veux donner la possibilité aux utilisateurs de transférer des fichiers. Je pense que j'utiliserai TClientSocket et TServerSocket car ils ont fait leurs preuves et sont simples à mettre en oeuvre. Sinon ICS parce que c'est top c'est vrai, et gratuit en plus.

    Malgré tout, un serveur dédié reste la meilleure solution pour connecter des joueurs. Il n'ya plus qu'un seul serveur, les joueurs se connectent dessus et le serveur redistribue les messages. C'est de cette manière que fonctionne la plupart des jeux sur le net, et les tchats genre MSN aussi.

    Avec ta méthode, tu as des chances que ça fonctionne sur ton PC puisque tu l'auras mis au point sur ta machine, mais pas mal de risques d'avoir des bugs sur d'autres type de config dès que tu vas vouloir mettre ton jeu en ligne...
    A toi de voir. Bon courage, à+

  11. #11
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 19
    Par défaut
    Merci encore pour les nouvelles réponses,

    J'avais songé à un serveur dédié pour le jeu aussi. Mais là encore plusieurs questions auxquelles je n'ai pas trouvé de réponse claire se posent.

    Si mon application est un .exe, il me faudrait un serveur dédié qui tourne sous Windows non ?
    Là pour récupérer les coordonnées des joueurs par mon site ma seule possibilité est d'enregistrer constament ces coordonnées dans la bdd du site, mais là avec un seul joueur ça rame déjà, le serveur MySQL ne suit pas du tout, même en limitant la mise à jour des coordonnées à plus ou moins deux fois par secondes (c'est un jeu 3D, donc il faut voir à "chaque instant" l'emplacement des autres, la position et l'angle des autres joueurs)
    Ca fonctionnerait mieu si c'était un .exe avec une base de données créée et gérée par l'exe ?

    J'ai un serveur virtuel dédié qui tourne avec Debian Sarge, ce n'est pas possible d'y faire tourner un .exe non ? Comment faire ? Et si un .exe ne peut y être lancer, que faut-il créer comme fichier pour le serveur, et enfin Delphi permet-il de créer ce type de fichier ?

    Je pensais faire mon appli pour Windows uniquement car je ne connais personne qui a autrechose que Windaube pour tester le prog.... là encore, si je n'ai que Windows (XP) comment programmer pour un autre système d'exploitation ?

    Voila, je sais que le sujet dérive un peu du coup mais bon, j'ai quand même une question de plus :
    Je pensais réessayer en virant TNetCom pour les composants TClientSocket et TServerSocket, mais j'ai lu que ses deux composants sont remplacé par les Indy dans les versions suivantes de Delphi (là j'ai le 2005 sur lequel j'ai ajouté les Indy et Asphyre pour la 3D) que me conseillez-vous ? Sachant que les TClientSocket et TServerSocket semble plus simple à utiliser que leurs "équivalent" Indy ?

  12. #12
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Attention, ne confond pas serveur et application cliente.
    Ton jeu est développé pour windows, ok. Mais le serveur n'à rien à voir la dedans, il ne fait que redistribuer les données des clients.
    Bien entendu, tu conserves toujours ton site et ta base MySQL en parrallèle.
    Un serveur te permettra de connecter tes clients entre eux et de centraliser les données.
    Essaye de faire une petite recherche dans le forum développement réseau, non ?

  13. #13
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 104
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 104
    Par défaut
    pour récupérer les coordonnées des joueurs par mon site ma seule possibilité est d'enregistrer constament ces coordonnées dans la bdd du site, mais là avec un seul joueur ça rame déjà, le serveur MySQL ne suit pas du tout,
    Une bdd elle est plutôt faite pour stocker des infos stables, style le prix du litre d'essence, non ?
    Pour des infos dynamiques qui changent en permanence, je ne pense pas que ça soit adapté, à moins qu'un gourou de la bdd vienne expliquer que ça peut fonctionner.
    IMHO, un serveur Linux tourne très bien pour faire ce que tu veux, qui est, comme l'a dit Sub0, d'échanger des messages.
    À toi d'inventer le langage de tes messages, (ie la manière dont tu vas y insérer dedans les trucs que pour le moment tu balourdes sur la bdd) et n'importe quels composants, en une semaine de boulot, seront capables de se les échanger. Sur chaque poste :
    le client postera ses messages (coordonnées, etc.)
    le serveur local décodera les messages, pour actions

    Et un serveur central pour échanger tout ça ? Même pas sûr.

    Voilà, il y a plein d'exemples partout pour faire des clients/serveurs de chat, c'est ce principe.
    Et les exe de Windows ne tournent pas sous Linux sauf à rajouter une couche supplémentaire, alors que tu peux faire des clients/serveurs en quelques centaines de lignes de code (oui, en C, dur...).

    Mes 2 cts,
    --
    jp

  14. #14
    Membre extrêmement actif
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 219
    Par défaut
    Bonjour,

    Citation Envoyé par Jipété
    alors que tu peux faire des clients/serveurs en quelques centaines de lignes de code (oui, en C, dur...).
    Ou il est très possible de faire le serveur sous Kylix, ou en freepascal avec Lazarus par exemple, donc pas forcément besoin de C.

    @++
    Dany

  15. #15
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 19
    Par défaut
    Encore et toujours moi...

    En regardant divers liens et tutaux, je me rend bien compte que dès qu'une application contient un composant serveur ET un composant client, elle est soit serveur soit client, selon les cas. Par exemple deux personnes voulant communiquer par un petit tchat, le premier se déclare serveur et permet donc que le deuxième en se déclarant client se connecte à lui, de là le premier peut répondre au second. Les suivants, seront eux aussi clients. Au final il y a donc toujours un seul serveur malgrès que chacun possède dans son programme un composant serveur et un composant client.... C'est sans doute là mon erreur, grossière qui plus est.
    Ce qui m'a mit dans la mauvaise voix c'est que le composant Asphyre TNetCom que j'ai voulu utiliser n'est pas "séparé en deux" (genre TNetComClient et TNetComServeur) je pensais donc qu'il gérait le conflit de client/serveur en un seul port tout seul

    Du coup après réflexion, je vais revoir mon programme avec les composants TClientSocket et TClientServer qui me semble plus simple d'utilisation que leurs "équivalents" Indy (je n'ai trouvé que des sources utilisant des thread avec les composants Indy, ce qui à mon niveau en Delphi me complique la chose).
    Le premier joueur se connectant sera serveur, les autres clients. Par contre là où ça va se corser c'est quand le joueur serveur va quitter, il faudrait que sans coupure, ou vraiment à peine perceptible, un autre prenne le relais... c'est possible ? (sauf quand le serveur ne quitte pas d'une manière correcte, genre panne de courrant, plantage,.. bien entendu)

  16. #16
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 104
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 104
    Par défaut
    Oui, c'est possible !
    Mais c'est pas simple...
    C'est un peu le principe de l'exploration Netbios, avec son système des élections.
    Il faut qu'en permanence n'importe quel autre client puisse devenir serveur, tout en jonglant avec le fait que si le serveur tombe, il ne faut pas que 2 clients deviennent serveur. D'où les élections.
    Car sur les systèmes beaucoup_de_clients/un_seul_serveur, à mon avis, c'est pas 1 serveur qui tourne, c'est un service sur plusieurs serveurs, au cas où, justement.
    Bon courage,
    --
    jp

  17. #17
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 19
    Par défaut
    Merci beaucoup pour cette réponse Jipété, j'étais justement entrain de faire mes modifs, et là en me confirmant que c'est possible tu me rassures, je ne fais pas ça en fonçant d'avance dans le mur dans ce cas

    Là je ne vais pas tarder à me coucher quand même, mais dès que j'aurai testé je dirais ce que ça donne... en attendant je reste tout de même à l'écoute de toute suggestion

    Merci merci merci, à Développez.net et tous ces membres qui sont toujours là pour aider ! C'est vraiment génial

  18. #18
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 104
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 104
    Par défaut
    Un 'tit dernier pour la route,
    Au lieu de foncer tête baissée sur le clavier, tu prends un papier un crayon, tu te poses et tu réfléchis à tout ça :
    • sur un même poste peuvent tourner un client et un serveur (ce sont 2 composants, mais à toi de gérer intelligement leurs propriétés : tu créerais pas 2 boutons au même emplacement, hein ?)
    • tout ton petit monde va devoir échanger des messages de service, ou tu intégreras dans tes messages une partie service et une partie datas_pour_le_jeu.
    Une fois que tu sauras le faire sur papier, le faire au clavier sera facile.
    Les faire communiquer à très bas niveau (TCP) c'est simple (il y a de très bons tutos, de très belles démos) ; ça s'échange aisément des messages, mais au-dessus c'est ton appli qui doit gérer selon qu'elle est cliente ou serveur, et selon qu'elle reçoit ou qu'elle doit émettre, le contenu des messages que tu vas inventer (à base de strings).
    Tout est là.
    --
    jp

  19. #19
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 19
    Par défaut
    Un tit dernier également lol

    Je sais déjà quelles de quelle manière envoyer puis comprendre mes échanges de données. Pour l'instant il n'y a que deux types :
    New/xxxxxx et Coord/xxxxx/X/Y/Z (avec xxxxxxx ce qui me permet d'identifier les membres)

    Ensuite j'ai trouver une fonction assez simple pour transformer ma String en une StringList. En fonction de l'élément 0 de cette dernière je traite les autres éléments d'une manière ou d'une autre.

    Là où je viens de sécher un petit peu c'est lorsque le serveur reçoit un message je sais le renvoyer à tous les clients, par contre je ne sais pas comment le renvoyer à tous les clients SAUF celui qui a envoyé le message au serveur. C'est pas trop trop grave, après avoir cherché en vaint comment faire ça j'ai créé une petite astuce à deux balles, le client ignore les messages contenant son propre identifiant (donc le retour de son message). Mais bon si je pouvais économiser quelques octects de transfert à chaque fois en ne lui envoyant pas son message en retour je suis preneur !

    Là j'ai fini la modif mais j'ai déjà une erreur de Socket lol (adresse non définie)... j'ai lu quelque part dans un sujet sur Développez.net :
    "Si tu ne te plante pas tu ne pousseras pas !".... hélas je ne sais plus où, donc je ne peux indiquer l'auteur de ce proverbe magnifique !


    *****************************************
    J'édite :
    Erreur de Socket résolue ! Au fait dans mon code je recherche les joueurs connectés et sur la même map, ensuite s'il NB > 0 et donc qu'il y a déjà au moins un joueur donc un serveur on est client, et on se connecte à l'ip du joueur faisant office de serveur. Si NB = 0 alors on est le serveur. L'erreur plutôt bête c'est que j'ai écrit :
    NB := mysql_num_fields(Resultat);
    au lieu de ça
    NB := mysql_num_rows(Resultat);

    Du coup NB prend pour valeur le nombre de champ de la table au lieu du nombre de lignes correspondant à ma recherche. Là j'ai corrigé et c'est ok.

    Pour ce qui est du lancement en serveur ou en client au départ c'est bon. Pour les test avec le serveur et un client, deux joueurs, faudra attendre demain que ma marmotte de pote se réveille ! mdr. Encore merci à tous, à demain pour les résultats qui je l'espère seront positifs !!

  20. #20
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Je pense aussi que j'utiliserai TClientSocket et TServerSocket mais avec ICS plutôt car il ya des superbes démos sur leur site. En tous les cas, pour un jeu d'échec ou un tchat, c'est carrément plus simple car les communications se font 2 par 2. Mais je prévois tout de même une alternative aux sockets dans le cas où le membre ne pourrait pas les utiliser...J'ai dernièrement mis au point une solution en http un peu délirante c'est vrai mais qui fonctionne. J'ai hate de tester ça avec un certain nombre de connectés pour voir un peu où sont les limites, malgré tout, ça ne conviendrait pas à un jeu 3D. Bonne nuit à tous

Discussions similaires

  1. Comment passer un ENUM à travers un Socket ?
    Par elmaestro dans le forum Langage
    Réponses: 12
    Dernier message: 21/05/2012, 09h48
  2. Réponses: 2
    Dernier message: 18/05/2008, 19h52
  3. Comment passer un objet à travers le scope session ?
    Par verbose dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 08/02/2008, 12h12
  4. Passer au traver d'un routeur
    Par Guillaume602 dans le forum Développement
    Réponses: 7
    Dernier message: 06/10/2006, 18h34
  5. comment passer de access à MySQL
    Par isa_21 dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/10/2004, 08h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo