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 !