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 :

Probleme du bind de des sockets en c


Sujet :

Développement

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Par défaut Probleme du bind de des sockets en c
    Bonjour, je programme un sender et un receiver et entre eux j'ai un midum qui fait le bind entre ces deux..
    le medium ce lance comme suite: ./medium port_medium ip_receiver port_receiver ip_sende port_send err1 err2 err3

    err1, ..3 c la probabilité de toucher les données qui passe dans le medium.


    le medium crée deux bind pour ces deux sockets de communucation.
    mon probleme est le suivant:

    comme mon sender et receiver peur recevoir et enoyer des données sur leurs deux sockets,
    donc j'ai crée deux bind un dans le sender et un autre dans le receiver.

    quand je lance le sender: ./ port_sender ip_medium port_medium message

    il me dit erreur dans le bind, alors qu'il faut avoir le même (port sender) chez le medium et le send , et c'est pareil avec le receiver..
    donc je ne comprend pas ce refus d'attacher les sockets sender et receiver.
    merci

    exemple
    sender.c
    Code C : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    int main(int argc, char **argv)
    {
      int ReadFile, taille,sockfd;
      char message[MAX_MESSAGE];
      char  *ip = "127.0.0.1";
     
      struct sockaddr_in medium,sender;
     
      // taille d'une structure sockaddr_in utile pour la fonction recvfrom
     
      socklen_t fromlen = sizeof(struct sockaddr_in);
     
     
      if(argc != 5)
        {
          printf("Usage : %s porr_sender ip_medium port_medium message à envoyer\n", argv[0]);
          exit(-1);
        }
     
      // creat the socket
      sockfd = socket(AF_INET, SOCK_DGRAM, 0);
      sender.sin_port =htons(atoi(argv[1]));
     
     
       //Initialised the structure sender
      sender.sin_family =AF_INET;
     
      sender.sin_port =htons(atoi(argv[1])) ;
     
      inet_aton(ip, &(sender.sin_addr));
     
      //Initialised the structure medium
      medium.sin_family = AF_INET;
      inet_aton(argv[2], &(medium.sin_addr));
      medium.sin_port =htons(atoi(argv[3]));
     
        // association de la socket et des param reseaux du recepteur
     
     
      if(bind(sockfd, (struct sockaddr *)&sender,fromlen)==-1)
     
     
     
        {
     
          perror("erreur lors de l'appel a bind -> ");
     
          exit(-2);
     
        }
     
      printf("L'envoyeur est pret...\n");
     
      //-- Transmission  of data
     
     
      if(SendScureUDP(sockfd,argv[4],strlen(argv[4]), medium)!=0)
      {
    	perror("erreur à l'appel de la fonction SendSecure -> ");
    	exit(-2);
      }
     
      //-- End of transmission
     
     
          printf("Emission terminee.\n");
          //DisconnectRequest(desc_sock, adresse_dist);
     
     
      //close(desc_sock);
      return 0;
    }

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 223
    Par défaut
    hummm, je suis desolez mais :
    - de 1 c'est mal écris...
    - de 2 c'est pas très clair!

    Si tu veux faire un sender/receiver il y a deux façon

    ## 1 ##
    Connection direct (p2p):

    a. Le receiver écoute (BIND) sur une socket (rcv_port_local=A,rcv_port_remote=ANY)
    b. Le sender envois sur la socket du receiver (snd_port_local=ANY,snd_port_remote=A) (il faut juste faire open pour celle du sender)

    ## 2 ##
    Connexion avec un medium (pour éviter les problèmes de sockets qui écoutent si il y a un NAT).
    Le médium est l'unique a utiliser la commande bind() (c.a.d a écouter sur un port). Imagine que pour simplifier il ouvre deux ports (R,S).

    a. Le receiver se connecte au medium sur le port R (IPMEDIUM:R).
    b. Le medium regarde l'IP et le port source du paquet qui vient d'arriver, et garde ses information pour pouvoir lui répondre.
    c. Le sender se connecte au medium sur le port S (IPMEDIUM:S).
    d. Le medium reçois un packet sur son socket S, et le transmet au receiver en utilisant son socket R.


    -------

    Pour conclure je pense que ton problème est que tu ouvres plusieurs fois le même port sur la même machine (c'est une opération impossible).

    Je te conseil de lire (ou relire) le tutorial expliqué par http://broux.developpez.com/articles/c/sockets/

Discussions similaires

  1. Probleme d'utilisation des sockets avec Swing
    Par tuxman dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 09/11/2008, 11h57
  2. [Socket]probleme de debit avec des socketssl
    Par Invité dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 22/05/2007, 15h38
  3. Problemes des Sockets
    Par hinda dans le forum MFC
    Réponses: 1
    Dernier message: 14/06/2006, 16h03
  4. Probleme avec des socket !
    Par Ptimath44 dans le forum Réseau
    Réponses: 11
    Dernier message: 31/10/2005, 18h11
  5. probleme de gestion de clients avec des sockets....
    Par ludvo dans le forum Réseau
    Réponses: 6
    Dernier message: 25/09/2003, 12h37

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