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 :

Lecture d'une Socket sous Linux


Sujet :

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 Lecture d'une Socket sous Linux
    bonjour � tous/es,
    je viens de m'inscrire sur ce forum et d�butant en informatique !
    Pour un projet je doit r�cup�rer des trames d'information en UDP, on trouve pas mal de choses un peut partout sur le net.
    J' ai donc �crit ce programme sens� r�cup�rer les trames envoyer par ma machines distante :

    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
    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
     
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    #define INVALID_SOCKET -1   // def de la valeur de defaut qu une fonction peut me renvoyer // pour la comparaison
    #define SOCKET_ERROR -1
    #define closesocket(s) close(s)
    typedef int SOCKET;
    typedef struct sockaddr_in SOCKADDR_IN;
    typedef struct sockaddr SOCKADDR;
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define PORT 6008
     
     
    int main(void)
    {
        SOCKET sock;   //nom de ma socket
        SOCKADDR_IN sin;  // adresse ip
        SOCKET csock;    
        SOCKADDR_IN csin;
        char buffer[360] = "";
        socklen_t recsize = sizeof(csin);
        int sock_err;
        sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
     
     
            if(sock != INVALID_SOCKET)
            {
                printf("La socket %d est maintenant ouverte en mode UDP \n", sock);
     
                // Configuration 
                //sin.sin_addr.s_addr = htonl(INADDR_ANY);  
                sin.sin_addr.s_addr = inet_addr("192.168.1.4");
                sin.sin_family         = AF_INET;             // Protocole(TCP/IP)
                sin.sin_port           = htons(PORT);         // Listage du port 
     
                sock_err = bind(sock, (SOCKADDR*)&sin, sizeof(sin));
                printf("Etat bind %d \n",sock_err);
     
     
                // Si la socket fonctionne
                if(sock_err != SOCKET_ERROR)
                {
                    printf("je suis la \n");
                    int nb_octet = recv(sock, buffer,sizeof(buffer)-1, 0);
                    printf("Recu2 : %s\n", buffer);
     
     
                    printf ("%d octets reçus de %s\n", nb_octet,inet_ntoa(sin.sin_addr));
                    for (int i=0;i<nb_octet;i++)
                    {
                        printf ("%c",buffer[i]);
                    }
                }
     
     
                /* Fermeture de la socket */
                printf("Fermeture de la socket...\n");
                closesocket(sock);
                printf("Fermeture du serveur terminee\n");
            }
     
     
    }
    Mais quand j�ex�cute ce programme celui-ci rester bloqu� sur le recv , je pense alors que ma machine n'envoie pas de caract�re de fin de trames correspondant a la m�thode Socket ou que mon buffer est mal configur�.
    Ma machine distante envoie des trames toutes les 4ms non stop et je ne peut pas modifier la syntaxe �mise, voici �a forme:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ø´j´vâàäD®üEr©zÀ¨À¨zÏx^Ǻ<Rob Type="FANUC"><M_X>1301.135</M_X><M_Y>565.989</M_Y><M_Z>670.154</M_Z><M_W>-173.529938</M_W><M_P>89.417473</M_P><M_R>-173.051483</M_R><F_X>1301.160</F_X><F_Y>565.990</F_Y><F_Z>670.114</F_Z><F_W>-173.575760</F_W><F_P>89.415497</F_P><F_R>-173.097275</F_R><IPOStat>0</IPOStat><BMode>2</BMode><TRG>0</TRG><myRob>1</myRob><IPOC>64</IPOC></Rob>
    Merci !

  2. #2
    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
    Salut,

    pourquoi bind une adresse sp�cifique et non any ? T'es s�r de ton adresse ?
    Si tu es en UDP tu devrais utiliser recvfrom et non recv.
    recv est bloquant par d�faut, si �a bloque c'est qu'il n'y a rien � recevoir.

    Tout ton code est du C, fais-tu vraiment du C++ ou tu t'es tromp� de forum ?

    Pour plus d'informations, tu trouveras un cours dans ma signature que je t'invite � lire.
    https://bousk.developpez.com/cours/r...iers-pas/#LV-D
    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.

  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
    j'utilise une adresse sp�cifique car par la suite je vais devoir envoyer de l'UDP mais dans un autre syst�me avec une adresse diff�rente donc �a me paraissais logique, et c'est sur cette adresse et ce port que ma machine envoi mes trames
    Ok j'essaie de ce pas!
    et je me suis surement tromp� oui !
    et oui j'ai suivit ce tuto ainsi que lui : http://sdz.tdct.org/sdz/les-sockets.html

  4. #4
    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
    voici ma modif mais toujours rien...

    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
     // Si la socket fonctionne
                if(sock_err != SOCKET_ERROR)
                {
     
                    socklen_t fromlen = sizeof(sin);
                    printf("je suis la \n");
                    int nb_octet = recvfrom(sock, buffer, 1500, 0, (SOCKADDR*)&sin, &fromlen);
                    printf("Recu2 : %s\n", buffer);
     
     
                    printf ("%d octets reçus de %s\n", nb_octet,inet_ntoa(sin.sin_addr));
                    for (int i=0;i<nb_octet;i++)
                    {
                        printf ("%c",buffer[i]);
                    }
                    printf ("\n");
                }

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Syst�me] lancer / kill une application sous linux
    Par Antoine NSG dans le forum Langage
    R�ponses: 1
    Dernier message: 31/10/2005, 16h06
  2. pb affichage d'une page sous linux
    Par fessebleu dans le forum Langage
    R�ponses: 6
    Dernier message: 27/09/2005, 14h05
  3. R�ponses: 14
    Dernier message: 09/08/2004, 13h42
  4. Taille d'une console sous linux
    Par Shinjuku dans le forum C
    R�ponses: 7
    Dernier message: 13/06/2003, 12h44
  5. Affichage d'une image sous linux
    Par Braim dans le forum x86 32-bits / 64-bits
    R�ponses: 5
    Dernier message: 25/03/2003, 10h41

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