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

Développement Discussion :

code c pour sockets (udp vers tcp et inversement)


Sujet :

Développement

  1. #1
    HiT
    HiT est déconnecté
    Débutant
    Inscrit en
    Juillet 2004
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 74
    Points : 20
    Points
    20
    Par défaut code c pour sockets (udp vers tcp et inversement)
    Bonjour,
    J'ai déjà fait des sockets (client et serveur) udp qui communiquent entre elles et tcp qui communiquent entre elles.
    Mais là, je cherche du code en C qui me permettrait de faire communiquer via des sockets un client udp avec un serveur tcp par exemple ou bien un client tcp avec un serveur udp... Qui pourrait m'aider?
    merci d'avance.

  2. #2
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Salut,

    Sauf erreur de ma part, ça n'est pas possible sauf si tu codes un truc qui prend les paquets UDP, les examine, et envoie un paquet TCP apres au serveur TCP.

    Rappel : UDP mode non connecte / TCP mode connecte
    donc pour moi cette manipulation n'est pas possible, en tout cas, si elle l'est je vois pas dans quelles conditions elle est utile...

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: code c pour sockets (udp vers tcp et inversement)
    Citation Envoyé par HiT
    je cherche du code en C qui me permettrait de faire communiquer via des sockets un client udp avec un serveur tcp par exemple ou bien un client tcp avec un serveur udp...

    Il faut probablement faire un routeur. Il faut au moins 2 acces réseau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                             passerelle  IP (routeur)
    serveur UDP <---connexion UDP connexion TCP <---> Client TCP

    Mais si tu as une machine Linux avec 2 cartes Ethernet, ça se fait en quelques lignes de configuration de IProute...

    [EDIT]
    C'est complètement idiot de faire comme ça, et ça ne marchera pas.

    Il faut en fait faire une 'boucle applicative' avec 2 serveurs
    • TCP -> UDP

      Créer une connexion 'serveur' TCP
      Lorsqu'on recoit des données (recv), les réémettre en UDP à qui de droit (sendto)
    • UDP -> TCP

      Créer un serveur UDP

      a chaque trame UDP reçue (recvfrom), se connecter en TCP, emettre la trame (send), se deconnecter.

    Le tout peut être fait avec un seul process grace à select() qui peut surveiller plusieurs sockets à la fois (y compris stdin pour quitter ou passer des commandes...)

    Ca peut aussi être un daemon muet et invisible...

    .
    Pas de Wi-Fi à la maison : CPL

  4. #4
    HiT
    HiT est déconnecté
    Débutant
    Inscrit en
    Juillet 2004
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 74
    Points : 20
    Points
    20
    Par défaut
    je pense que tu as raison, il faut faire un code qui prend les packets tcp et les renvoie en udp ou inversement. Mais je ne vois pas comment faire, donc si qq'un a deja faite ca.... ca serait cool de me faire partager du code loool... parce que je galere la...
    merci

  5. #5
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    Je te conseille surtout de faire un bout de code, le peaufiner et le soumettre ensuite, s'il reste des bugs, des interrogations

    On veut bien aider mais on est pas la pour faire à la place
    Grave urgent !!!

  6. #6
    Membre expérimenté
    Avatar de Aramis
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 493
    Points : 1 638
    Points
    1 638
    Par défaut
    Bonsoir,

    ce projet est totallement utopique. L'une des raisons pour lesquelles ces deux protocoles sont si differents c'est parce que ils doivent permettre la mise en place d'applications dont la nature de fonctionnement est fondamentalement differente. Si un server DNS utilise UDP sur le port 53 ce n'est pas pour rien c'est parce que ca serai trop difficile (voir meme impossible) d'obtenir le meme resultat avec TCP. Meme en passant par une "passerelle IP" tel que la propose Emmanuel Delahaye car il faudra des lors mettre en place un systeme de conversion de packet ainsi que les numeros de sequences (absent en UDP), les numeros de recu et etc..... au final, tout est faisable en logiciel seulement je suis septique sur la faisabilite en terme de temps, de ressources et etc et surtout sur l'utilite! il y a t il un besoin pour une tel chose?

    En tout cas bon courrage si l'auteur persiste.

    A.
    Avant de Poster Lire les Regles! Merci
    -------------------------------------------------
    "The only Way for Evils to Triumph is for Good Men to Do Nothing"
    Edmund Burke (1729 - 1797)

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Aramis
    Meme en passant par une "passerelle IP" tel que la propose Emmanuel Delahaye <...>
    Absolument, voir la correction.
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Membre expérimenté
    Avatar de Aramis
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 493
    Points : 1 638
    Points
    1 638
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Absolument, voir la correction.
    Re,

    je ne suis pas du tout convaincu au contraire meme. Par exemple, lorsque l'on envoie un packet en TCP l'emetteur attent un numero de reception...or si l'on transforme le message en un format qui n'a que faire si le message a ete recu ou pas.... ca marche comment votre histoire? Qui plus est, tous les parametres du model ISO sont determines par les systemes en cours de communication... comment est ce que le system intermedaire va t il faire pour immiter ces comportements sans que les nodes s'en appercoivent?

    Ah oui... apres lecture sur le protocol TCP je me suis appercu que si l'on faire le socket (comme suggere pour envoye 1 trame UDP cf. ci dessus) eh bien la fois suivante l'espace memoire n'est pas le meme. En clair? eh bien un message qui necessite plusieurs trames arrivent en tant que "plusieurs" trames alors qu'il aurai du etre reconstituer.

    Maintenant, je ne mets pas en doute que d'un point de vue theorique ce serai possible MAIS le programmeur n'a pas le control sur tous les aspects de la communication et surtout sur le comportement des elements communiquants....

    A.
    Avant de Poster Lire les Regles! Merci
    -------------------------------------------------
    "The only Way for Evils to Triumph is for Good Men to Do Nothing"
    Edmund Burke (1729 - 1797)

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Aramis
    Citation Envoyé par Emmanuel Delahaye
    Absolument, voir la correction.
    Ah oui... apres lecture sur le protocol TCP je me suis appercu que si l'on faire le socket (comme suggere pour envoye 1 trame UDP cf. ci dessus) eh bien la fois suivante l'espace memoire n'est pas le meme. En clair? eh bien un message qui necessite plusieurs trames arrivent en tant que "plusieurs" trames alors qu'il aurai du etre reconstituer.

    Maintenant, je ne mets pas en doute que d'un point de vue theorique ce serai possible MAIS le programmeur n'a pas le control sur tous les aspects de la communication et surtout sur le comportement des elements communiquants....
    A partir du moment où un paquet TCP est recu, il est complet et valide. Il suffit alors de le renvoyer en UDP. Ca ne pose pas de problèmes particulier. Evidemment ce n'est pas très efficace, car on ne peut pas anticiper, mais ça marche...

    Ce n'est pas du relayage de trame, ni du routage IP, mais une sorte de relayage de niveau 4 (TCP/UDP) (il doit y avoir un nom technique que je ne connais pas).

    Dans l'autre sens, c'est pareil. Chaque paquet UDP reçu est réémis en TCP.

    C'est facile à mettre en oeuvre avec 2 sockets et une adresse IP interne.
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Membre expérimenté
    Avatar de Aramis
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 493
    Points : 1 638
    Points
    1 638
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    A partir du moment où un paquet TCP est recu, il est complet et valide. Il suffit alors de le renvoyer en UDP. Ca ne pose pas de problèmes particulier. Evidemment ce n'est pas très efficace, car on ne peut pas anticiper, mais ça marche...
    Certes pour 1 paquet. Mais 1 paquet est different d'un message! Et comme le model OSI repose sur un model de transparence c'est le message qui est important pour que tout foncitonne.

    Citation Envoyé par Emmanuel Delahaye
    Ce n'est pas du relayage de trame, ni du routage IP, mais une sorte de relayage de niveau 4 (TCP/UDP) (il doit y avoir un nom technique que je ne connais pas).
    Faire du relayage a plus bas niveau du model OSI est du gateau. Si il existe tant de problemes avec les par-feux, systeme de detection d'intrusions, et autre proxy cela a du a quoi a votre avis? C'est tout bete mais ces appareils ont tendance a travailler a partir de la couche 3/4 et au dessus.

    Citation Envoyé par Emmanuel Delahaye
    Dans l'autre sens, c'est pareil. Chaque paquet UDP reçu est réémis en TCP.
    Encore une fois le message serai perdu

    Citation Envoyé par Emmanuel Delahaye
    C'est facile à mettre en oeuvre avec 2 sockets et une adresse IP interne.
    Je demande a voir mais je ne dispute pas la faisabilite a bas-niveau cependant faire de la traduction au niveau de l'UDP et TCP (et cela avec respect total des normes), qui sont indicatifs des services appeles dans les couches superieures du model, est une chose que je ne peux pas comprendre. Cela n'a rien a voir avec la programmation mais plutot avec les notions fundamental de communication reseaux et d'utilisation de resources distribuees.

    A.
    Avant de Poster Lire les Regles! Merci
    -------------------------------------------------
    "The only Way for Evils to Triumph is for Good Men to Do Nothing"
    Edmund Burke (1729 - 1797)

  11. #11
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 75
    Points : 73
    Points
    73
    Par défaut
    bonsoir,
    Je me range du coté de Emmanuel Delahaye
    Pour moi si tu crée un programme qui réceptionne des paquet TCP sur une socket et envoie les donnée sur une autre socket udp cela ne cause aucun problème.
    Sur la socket tcp tout les contrôle tcp (num séquences, ack) se feront sans problème
    Il reste plus qu’à prendre le champs data et l envoyer sur la socket UDP (sans contrôle).
    Et c’est la même chose dans le sens inverse

    Mais il est vrai qu UDP n’a pas de control ce qui pourrait causé de gros problème si un paquet udp est attendu et ne parvient jamais il faut alors cree un timer pour prévenir le client du coté socket TCP que la réponse est impossible ce qui est a définir dans le protocole applicatif.
    Voilà mon point de vue

  12. #12
    Membre du Club Avatar de Aristote
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 56
    Points : 68
    Points
    68
    Par défaut
    Dans le cadre d'une application client serveur , c'est ridicule sachant
    que les applications qui communiquent doivent se situer sur la même couche et utiliser les mêmes protocoles.

    Si je ne m'abuse un client UDP se connecte à un serveur via UDP
    il faut donc qu'il soit tous les deux sous UDP, pour établir une primo connection.A l'identique en TCP.

    Cordialement

Discussions similaires

  1. code tcl pour creer un agent tcp liée à plusieurs sinks
    Par hamidoucha dans le forum Tcl/Tk
    Réponses: 1
    Dernier message: 06/05/2013, 08h23
  2. Timeout pour socket UDP
    Par parabole33 dans le forum C++
    Réponses: 5
    Dernier message: 15/10/2010, 20h22
  3. différence entre socket udp et tcp
    Par Kevin12 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 23/02/2009, 22h14
  4. Réponses: 3
    Dernier message: 06/01/2007, 17h44
  5. Socket : UDP ou TCP
    Par lafracas dans le forum Développement
    Réponses: 2
    Dernier message: 10/04/2006, 22h43

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