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

C# Discussion :

Aide Socket C#


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2012
    Messages : 30
    Points : 11
    Points
    11
    Par défaut Aide Socket C#
    Aujourd'hui je suis au milieu de mon projet et il avance plutôt bien pour la partie client.

    Je veux donc mettre au point un jeu flash de gestion de petit personnages et d'espace (tel qu'une ville, ect...) mais en plus vivant avec des petits bonhommes à déplacer. (Style Habbo, mais en mieux).

    La partie Flash est faite, j'ai tout mes systèmes qui fonctionnent et tout le reste.

    Il y a donc nécessité de "dialogue intensif" avec un serveur socket, en C# ainsi qu'une gestion de "paquet" (référencement des actions). Il me faut donc un serveur pouvant gérer beaucoup de connectés en simultanée, quelque chose pas forcément léger et 100% optimisé mais qui marche. Qui marche plutôt bien !

    Quelqu'un aurait des idées à me faire parvenir ? Des script déjà tout fais ? (Voilà 2 semaines que je patoges, je m'en sort pas avec les Async... truc)

    Merci de votre aide futur

  2. #2
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424

  3. #3
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2012
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    TcpListener n'est pas obsolète ? Oo

  4. #4
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    à mes connaissance non, les Sockets ne sont pas un très très bonne idée, personnellement j'opte pour les web services. Pour ton cas un Web Service Rest /JSon une bonne idée, tu peux même faire des TCP/IP avec WCF et toujours avec le format de données de ton choix (bytes ).

    plus de details ca peux aider.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2012
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    Ces méthodes la, je n'y accroche pas vraiment et je veux juste me servir du C#.

    En tout cas merci de tes réponses !

  6. #6
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Citation Envoyé par azstar Voir le message
    à mes connaissance non, les Sockets ne sont pas un très très bonne idée, personnellement j'opte pour les web services. Pour ton cas un Web Service Rest /JSon une bonne idée, tu peux même faire des TCP/IP avec WCF et toujours avec le format de données de ton choix (bytes ).

    plus de details ca peux aider.
    Tu devrais suivre son conseil .
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  7. #7
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 640
    Points : 2 149
    Points
    2 149
    Par défaut
    Un webservice ne serait pas une bonne idée pour un jeu en temps réel.

    Tu devrais plutôt te poser la question : packets TCP ou UDP ?

    Si tu veux un code tout fait , tu peux prendre un peu n'importe quel type de serveur , la structure reste la même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Un thread qui écoute les connexions entrantes.
    Un thread qui update et communique avec les connexions existantes.
    Tu peux aussi découpé la communication en plusieurs threads mais cela dépends de la puissance de la machine ou sera le serveur.

    TcpListener est une bonne option si tu pars sur TCP , ce que je te recommanderai pour ce type de jeu. Tu gardes en mémoire une liste de TcpClient , qui représente tes joueurs et tu leur envoies ce qu'il faut , quand il faut.

  8. #8
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Citation Envoyé par PixelJuice Voir le message
    Un webservice ne serait pas une bonne idée pour un jeu en temps réel.

    Tu devrais plutôt te poser la question : packets TCP ou UDP ?

    Si tu veux un code tout fait , tu peux prendre un peu n'importe quel type de serveur , la structure reste la même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Un thread qui écoute les connexions entrantes.
    Un thread qui update et communique avec les connexions existantes.
    Tu peux aussi découpé la communication en plusieurs threads mais cela dépends de la puissance de la machine ou sera le serveur.

    TcpListener est une bonne option si tu pars sur TCP , ce que je te recommanderai pour ce type de jeu. Tu gardes en mémoire une liste de TcpClient , qui représente tes joueurs et tu leur envoies ce qu'il faut , quand il faut.

    Ha bon et en quoi en web service ne serais pas une bonne idée?

    Tu ne confondrais pas : moyen d’héberger, protocole et transport?

    On peut faire du tcp/ip, udp, pipe en wcf, qu'il soient hébergé par un service local ou en WAS, qui plus est tu peut faire du duplex (websocket par exemple )

    Si tu part sur un TCP listener tu réinvente la roue, car WCF te permet de t'abstraire non seulement de la façon d’hébergé, mais également du protocole et moyen de transport, c'est juste la moitié du temps de dev gagné.

    Je sis ça, je dis rien.
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2012
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par PixelJuice Voir le message
    Un webservice ne serait pas une bonne idée pour un jeu en temps réel.

    Tu devrais plutôt te poser la question : packets TCP ou UDP ?

    Si tu veux un code tout fait , tu peux prendre un peu n'importe quel type de serveur , la structure reste la même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Un thread qui écoute les connexions entrantes.
    Un thread qui update et communique avec les connexions existantes.
    Tu peux aussi découpé la communication en plusieurs threads mais cela dépends de la puissance de la machine ou sera le serveur.

    TcpListener est une bonne option si tu pars sur TCP , ce que je te recommanderai pour ce type de jeu. Tu gardes en mémoire une liste de TcpClient , qui représente tes joueurs et tu leur envoies ce qu'il faut , quand il faut.
    Voilà !! Tu as absolument tout compris !
    Merci aussi aux autres !

    Par contre juste une question: Tu parles bien de ça http://msdn.microsoft.com/en-us/libr...v=vs.110).aspx ??
    Si oui, comment mettre en place l'enregistrement des utilisateurs ?

  10. #10
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Salut

    avec les sockets (TCP ou UDP), le principe est simple:

    Sur le serveur:

    Un thread qui écoute les demandes de connexion et qui sur reception d'une demande, créer un thread de communication avec celui ci.
    Un thread (crée lors d'une demande de communication) qui gère la communication entrant avec le client connecté...

    Une liste des personnes (IP/ login joueur) connecté..

    Ensuite, l'enregistrement (login) du joueur, peut se faire via les échanges que tu fais avec des trames TCP...

    Il y a une librairie qui pourrait grandement t'aider... lidgren tcp library... (à chercher sur google)... je pense que cette librairie
    te facilitera grandement le taff.


    Après, à la question : pourquoi pas les Web services...

    Je réponds : parce que le web service n'est pas dans les deux sens... donc, soit le client fait du pooling pour tout le temps demander si il y a des
    actions à prendre en compte... soit dans l'appel du web service, on envoie info et on récupère données de suite...

    Mais je pense qu'en terme de performance, le web service est un peu plus lent que TCP car les requêtes sont encapsulés avec les données
    échangés dans le contrat du web service d'ou beaucoup plus d'info émises sur le réseau que réellement nécessaires..
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  11. #11
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    Salut


    Après, à la question : pourquoi pas les Web services...

    Je réponds : parce que le web service n'est pas dans les deux sens... donc, soit le client fait du pooling pour tout le temps demander si il y a des
    actions à prendre en compte... soit dans l'appel du web service, on envoie info et on récupère données de suite...

    Mais je pense qu'en terme de performance, le web service est un peu plus lent que TCP car les requêtes sont encapsulés avec les données
    échangés dans le contrat du web service d'ou beaucoup plus d'info émises sur le réseau que réellement nécessaires..
    Moi je rebondissait surtout sur le fait d'utiliser WCF.
    En WCF tu peux faire du duplex donc communication dans les deux sens.

    Ensuite concernant les performances, effectivement même en "tunnant" au maximum WCF tu ne pourra pas atteindre le niveau d'un transport de type pipe, mais vu que de toute façon il va passer par le réseau, donc cet argument n'est pas valide, le plus couteux est surtout la sérialisation et désérialisation ainsi que le cout inéluctable de l'appel (mais ça se joue à 50ms près sur ce dernier point).

    Après qu'il fasse du WAS ou local service, qu'il fasse du http, tcp ect.... c'est a lui de choisir, c'est une question de trois lignes de code et d'un Binding WCF.

    Et pour être plus crédible je te renvois à la MSDN
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  12. #12
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 34
    Points : 43
    Points
    43
    Par défaut
    Certains jeux font du TCP et de l'UDP.
    Utilise TCP pour les données dont il est indispensable de n'avoir aucune perte( données qui sont envoyées de maniere événementielle par exemple)
    Utilise UDP pour les données envoyées périodiquement , avec en tête l'idée que ton client ne vas pas en recevoir parfois. Mais comme c'est périodique, il v les récupérer dans quelques demis secondes.

    Par exemple si tu fais un FPS tu peux transmettre les couples (position vitesse) des personnes toutes les 300 mes par udp et utiliser TCP pour le chat et les tirs de munition

Discussions similaires

  1. Besoin d'aide (Socket/Serveur)
    Par Sh4dounet dans le forum Langage
    Réponses: 3
    Dernier message: 02/06/2007, 10h29
  2. Besoin d'aide sur les sockets
    Par cryptorchild dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 03/04/2006, 17h27
  3. [Socket] Communication à l'aide de sockets (théorie)
    Par nicolas.pied dans le forum C++
    Réponses: 1
    Dernier message: 29/11/2005, 17h33
  4. [Kylix] Aide por les sockets
    Par nabs dans le forum EDI
    Réponses: 1
    Dernier message: 03/04/2004, 12h35

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