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

R�seau C Discussion :

Ordre d'arriv�e des paquets en UDP /SOCKET


Sujet :

R�seau C

  1. #1
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2020
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 26
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Avril 2020
    Messages : 18
    Par d�faut Ordre d'arriv�e des paquets en UDP /SOCKET
    bonjour!
    Je re�ois des information d'un syst�me externe � mon pc, qui m'envoie une trame (num�rote) toute les 4ms, j'arrive � les recevoir, �a pas de soucis ,mon probl�me qui vas vous para�tre bizarre est que je veut recevoir la derni�re trame �mise et pas les trames dans l'ordre dans lesquelles elles sont envoyer, m�me si je perd des trames c'est "pas grave", je veut juste la derni�re.

    si vous avez des pistes je suis preneur!!

    merci!

  2. #2
    Mod�rateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    F�vrier 2008
    Messages
    7 665
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 7 665
    Par d�faut
    Bonjour,

    comment lis-tu les trames ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2020
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 26
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Avril 2020
    Messages : 18
    Par d�faut
    salut !
    comme �a =
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
     
     
        if(sock !=-1)    // Configuration //
        {   memset((char *)&sinip, 0, sizeof(sinip));
            sinip.sin_addr.s_addr = inet_addr("192.168.1.4");//sin.sin_addr.s_addr = htonl(INADDR_ANY);  
            sinip.sin_family         = AF_INET;             // Protocole(TCP/IP)
            sinip.sin_port           = htons(PORT);         // Listage du port 
            sock_err = bind(sock, (SOCKADDR*)&sinip, sizeof(sinip));
        }
        if (sock_err==-1){if (pass==0){printf("La socket est pas encore connecté \n");pass=+1;}; connectsock=0;} 
        else{printf("La socket est maintenant ouverte en mode UDP \n");connectsock=1;}
     
     
    while(1)
        {
            int nb_octet = recvfrom(sock, buffer, sizeof(buffer), 0, (SOCKADDR*)&sinip, &fromlen); //reception de la data dans buffer
            //   printf("buffer= %s \n",buffer);
            //   printf("nb oct = %d \n",nb_octet);
     
                        char *dataM_X = rech(buffer,"<M_X>");
                        double M_X = atof(dataM_X);
                 ect ..... ect....
     
    if (selectionsujet==1)
        {
     
            printf("choix du sujet a configuré de 1 à 3\n");
            scanf("%d",&choix);
            printf("Entrez dist focus en mm\n");// futur input
            scanf("%d",&distfocus);
                        nb_octet = recvfrom(sock, buffer, sizeof(buffer), 0, (SOCKADDR*)&sinip, &fromlen); //reception de la data dans buffer
                        printf("nb oct = %d \n",nb_octet);
     
                  ect... ect....
         }
        }
    en fonctionnement normale je ne passe pas dans mon if donc j'arrive bien � toujours avoir la derni�re trame car mon programme est plus rapide n'as pas de fonctions bloquantes(� par le recv si rien ne m'es envoyer), mais quand je passe dans dans mon if avec mon scanf je prend du retard et mon recv ne lis que la premi�re trame depuis qu'il est en arr�t...

    en esp�rant que �a sois plus clair
    merci!

  4. #4
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  5. #5
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2020
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 26
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Avril 2020
    Messages : 18
    Par d�faut
    oui j'ai bien un identifiant "IPOC" en fin de trame

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    <Rob Type="FANUC"><M_X>-1049.946</M_X><M_Y>-499.817</M_Y><M_Z>622.130</M_Z><M_W>-175.352966</M_W><M_P>89.161713</M_P><M_R>39.577858</M_R><F_X>-1049.946</F_X><F_Y>-499.817</F_Y><F_Z>622.130</F_Z><F_W>-175.352936</F_W><F_P>89.161720</F_P><F_R>39.577885</F_R><IPOStat>0</IPOStat><BMode>2</BMode><TRG>0</TRG><myRob>1</myRob><IPOC>1853552</IPOC></Rob>
    mais qand je met sur "pause" l'acquisition je stock tout les messages et quand je reprend la lecture je relis dans l'ordre d'arriv� les messages qui on �t� bloqu� par ma pause.

    5>4>3>2>1||Pause||
    ||lecture||1>2>3>4>5
    au lieux e faire
    5>4>3>2>1||Pause||
    ||lecture||5>6>7ect..

  6. #6
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Bien, maintenant il faut lire la seconde partie du message
    Tu dois tout recevoir et ne garder que le plus r�cent � traiter.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    F�vrier 2006
    Messages
    12 841
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 12 841
    Billets dans le blog
    1
    Par d�faut
    Bonjour

    Dans l'absolu, chaque trame que tu re�ois est toujours la "derni�re". Tant que tu n'as pas re�u la suivante, la derni�re � �tre arriv�e est donc la derni�re tout court.

    Donc en les traitant toutes, fatalement � un moment donn�, la derni�re que tu auras trait�e sera celle que tu avais effectivement � traiter...
    Mon Tutoriel sur la programmation �Python�
    Mon Tutoriel sur la programmation �Shell�
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les diff�rentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2020
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 26
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Avril 2020
    Messages : 18
    Par d�faut
    si je v�rifie si ma trame est bien ma derni�re en gros je doit faire un truc du style (ce code est surement faux mais c'est histoire d'expliqu�)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    recvfrom(sock, buffer, sizeof(buffer), 0, (SOCKADDR*)&sinip, &fromlen); //reception de la data dans buffer
    dataIPOCprecedent= rech(buffer,"<IPOC>");//recherche dans la trame la valeur IPOC
    while (x=1)
    {
    recvfrom(sock, buffer, sizeof(buffer), 0, (SOCKADDR*)&sinip, &fromlen); //reception de la data dans buffer
    dataIPOC = rech(buffer,"<IPOC>");
    if (strcmp(dataIPOC,dataIPOCprecedent===0)
    {x=0;}
    else
    {dataIPOCprecedent=dataIPOC;}
    }
    mais si mon programme rester en pause 10min je vais avoir �norm�ment de data a ouvrir et traiter dans mon while
    ce qui est un perte de temps �norme par rapport a quelque chose qui lirais juste la derni�re data arriv� sur le pc..

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    F�vrier 2006
    Messages
    12 841
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 12 841
    Billets dans le blog
    1
    Par d�faut
    Citation Envoy� par leoleo34 Voir le message
    ce qui est un perte de temps �norme par rapport a quelque chose qui lirais juste la derni�re data arriv� sur le pc..
    Informatiquement (et d'ailleurs c'est aussi vrai dans la vie r�elle), tu ne peux pas savoir qu'un �l�ment est le "dernier" si tu ne le compares pas avec un autre. Quand tu lis un livre, tu ne sais que la derni�re page est la derni�re que parce qu'il n'y a pas de page apr�s (en faisant abstraction �videmment de l'histoire qui se termine).
    Donc malheureusement tu es oblig� de traiter tous tes �l�ments pour arriver � d�terminer lequel est vraiment le dernier
    Mon Tutoriel sur la programmation �Python�
    Mon Tutoriel sur la programmation �Shell�
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les diff�rentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2020
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 26
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Avril 2020
    Messages : 18
    Par d�faut
    ok, je comprend le raisonnement, l'algo au dessus serais donc la meilleure solution?

  11. #11
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Tu as un nombre, pourquoi le comparer en string ?
    strcmp va v�rifier qu'ils sont �gaux ou diff�rents, jamais lequel est plus r�cent. Et surtout si ton IPOC est vraiment un identifiant alors il doit incr�menter avec chaque envoi, donc comparer qu'il soit �gale � un pr�c�dent re�u... �a a l'air bien inutile.
    Si tu mets tout dans buffer avant de v�rifier, comment esp�res-tu pouvoir traiter autre chose que le dernier re�u ? Qui peut ne pas �tre le dernier envoy�.
    Tout ce que tu dois savoir pour v�rifier qu'un identifiant est plus r�cent ou non se trouve dans ce cours. Le code est en C++ mais peut tr�s ais�ment �tre traduit en C.
    �a v�rifie qu'ils soit unique, et s'il est plus r�cent. �a d�taille aussi les pi�ges lors de la r�initialisation pour cause d'overflow, si ton programme tourne assez longtemps.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  12. #12
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2020
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 26
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : Avril 2020
    Messages : 18
    Par d�faut
    sinon je viens d'avoir une id�es qui rendrais mon code plus propre, pourquoi pas avoir un thread avec qui l�acquisition qui tourne en permanence et dans mon autre thread je prend quand je le souhaite ma data.
    �a ne serais pas plus simple? avec dans le thread de la r�ception le contr�le de mon ipoc comme dans le cour pour �tre s�cure

  13. #13
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    F�vrier 2006
    Messages
    12 841
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 12 841
    Billets dans le blog
    1
    Par d�faut
    Citation Envoy� par leoleo34 Voir le message
    sinon je viens d'avoir une id�es qui rendrais mon code plus propre
    Donc si tu as eu "une" id�e alors pas de "s" � "id�e". "une" ce n'est pas plusieurs. Et si c'est l'id�e qui rendrait le code plus propre et pas toi alors 3� personne du singulier, par 1�re. Ce n'est pas parce que tu fais de l'informatique qu'il faut oublier les r�gles de grammaire fran�aise.

    Citation Envoy� par leoleo34 Voir le message
    �a ne serais pas plus simple? avec dans le thread de la r�ception le contr�le de mon ipoc comme dans le cour pour �tre s�cure
    Aucune id�e, on ne connait pas ton besoin. On ne sait m�me pas pourquoi tu ne veux traiter que la derni�re data. Accessoirement si c'est "ce" qui "serait" plus simple alors l� aussi la conjugaison se fait � la 3� personne du singulier.
    Mon Tutoriel sur la programmation �Python�
    Mon Tutoriel sur la programmation �Shell�
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les diff�rentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    T'es conscient que tu travailles avec de l'UDP ? Que la premi�re r�gle de l'UDP c'est que les envois sont non fiables ? Et la r�ception potentiellement d�sordonn�e ? Et dupliqu�e ?
    https://bousk.developpez.com/cours/r...iers-pas/#LIII

    Quand � simplifier en ajoutant un thread.. Je suis perplexe pour ton niveau.
    Tu ajoutes un thread, puis faut ajouter un mutex.
    Puis faut de toute fa�on que tu changes ta fa�on de v�rifier que le paquet est plus r�cent ou pas, parce qu'actuellement tout ce que tu v�rifies c'est s'il est diff�rent. Et l� je te renvois vers la premi�re ligne de ce message et le lien donn�.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 21/10/2010, 11h23
  2. ordre d'arriv� des clients chez le socket serveur
    Par yacin87 dans le forum Entr�e/Sortie
    R�ponses: 1
    Dernier message: 19/04/2010, 03h51
  3. Remettre dans l'ordre des paquets UDP
    Par Snooker9 dans le forum C
    R�ponses: 3
    Dernier message: 28/04/2009, 10h27
  4. [UDP][Socket] perte de paquets et arret d'ecoute sur port
    Par Guismo1979 dans le forum D�veloppement
    R�ponses: 6
    Dernier message: 02/01/2003, 12h13

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