Après TCP : UDP

Résolu
Signaler
Messages postés
26
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
23 février 2011
-
Messages postés
26
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
23 février 2011
-
Bonjour à tous,

Après de longues années de programmation en C, et d'utilisation des sockets, je suis face à un problème : je dois développer deux programmes (un client et un serveur) qui communiquent entre-eux. La vitesse d'actualisation des données entre les deux programmes est de 4x par seconde. Jusque là pas de problème. Mais il se trouve que ma connexion en TCP est trop lente, et vu le taux d'actualisation, je peux me permettre de perdre un ou deux "paquets" de données et l'ordre des données ne n'importe pas. Je me suis donc essayé à l'UDP. Mais la mise en oeuvre ne m'a pas l'air la même et je n'y arrive pas .

Si vous pouviez m'expliquer comment mettre en oeuvre un serveur et un client en UDP.

Merci d'avance,
Benoît

4 réponses

Messages postés
212
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
23 juin 2011

Salut,
alors voilà:
-------------------------------------------------------------------------- SERVEUR
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <netdb.h>
#include <errno.h>
#include

#define MSGSIZE 500

main(int argc, char **argv)
{
int sockfd, cc, addr_in_size;
u_short portnum = 12345;
struct sockaddr_in *my_addr, *from;
char *msg;
u_long fromaddr;

addr_in_size = sizeof(struct sockaddr_in);

msg = ( char *)malloc(MSGSIZE);
from = (struct sockaddr_in *)malloc(addr_in_size);
my_addr = ( struct sockaddr_in *)malloc(addr_in_size);

memset((char *)my_addr,(char)0,addr_in_size);
my_addr->sin_family = AF_INET;
my_addr->sin_addr.s_addr = htonl(INADDR_ANY);
my_addr->sin_port = portnum;

if ((sockfd = socket (PF_INET, SOCK_DGRAM, 0)) < 0){
fprintf(stderr,"Error %d in socket: %s\n",errno,sys_errlist[errno]);
exit(errno);
};

if(bind(sockfd, (struct sockaddr *)my_addr, addr_in_size) < 0){
fprintf(stderr,"Error %d in bind: %s\n",errno,sys_errlist[errno]);
if(errno != EADDRINUSE) exit(errno);
};

fprintf(stdout,"Ready to receive\n");

while (1){
if((cc = recvfrom (sockfd,msg,MSGSIZE,0,(struct sockaddr *)from,
&addr_in_size)) = = -1){
fprintf(stderr,"Error %d in recvfrom: %s\n",
errno,sys_errlist[errno]);
exit(errno);
};
fromaddr = from->sin_addr.s_addr;
msg[cc] = '\0';
fprintf(stdout,"From %s port %d: %s\n",
(gethostbyaddr(( char *)&fromaddr,
sizeof(fromaddr),
AF_INET))->h_name,
from->sin_port,msg);

}

}

------------------------------------------------------------------CLIENT

#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include

#define MSGSIZE 500

main(int argc,char **argv)
{
int sockfd, ok, addr_in_size;
u_short portnum = 12345;
struct sockaddr_in *to;
struct hostent *toinfo;
char *msg, *htoname = "127.0.0.1";
u_long toaddr;

msg = ( char *)malloc(MSGSIZE);
to = (struct sockaddr_in *)malloc(sizeof(struct sockaddr_in));
if((toinfo gethostbyname(htoname)) NULL){
fprintf(stderr,"Error %d in gethostbyname: %s\n",
errno,sys_errlist[errno]);
exit(errno);
};
toaddr = *(u_long *)toinfo->h_addr_list[0];

addr_in_size = sizeof (struct sockaddr_in);
memset((char *)to,(char)0,addr_in_size);

to->sin_family = AF_INET;
to->sin_addr.s_addr = toaddr;
to->sin_port = /*(htons)*/portnum;
if ((sockfd socket (PF_INET, SOCK_DGRAM, 0)) = -1){
fprintf(stderr,"Error %d in socket: %s\n",errno,sys_errlist[errno]);
exit(errno);
};

ok = 1;
while (ok){
fprintf(stdout,"Message: ");
scanf("%s",msg);
fprintf(stdout,"\n");
ok = (msg[0] != '0');

if (sendto(sockfd,msg,strlen(msg),0,(struct sockaddr *)to,
addr_in_size) == -1){
fprintf(stderr,"Error %d in sendto: %s\n",errno,sys_errlist[errno]);
exit(errno);
}
}
}

Cordialement,
Sébastien.
Messages postés
212
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
23 juin 2011

Des longues année de fumisterie alors ..

Cordialement,
Sébastien.
Messages postés
26
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
23 février 2011
1
Je ne vois pas en quoi ne pas avoir besoin d'utiliser de protocole  UDP est de la fumisterie ...  le plus souvent on me chargeait de chats quand il fallait du réseau.
Messages postés
26
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
23 février 2011
1
Ah, merci beaucoup.