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:
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:
ø´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 !:lol: