Pages : 1
#1 Le 29/12/2013, à 12:07
- dhoomh
Server et Client en UDP
Bonjour a tous et a toute,
Apres avoir trouvé le code en C du Server UDP et Client UDP, j'ai décider de relier mes 2 PC avec un câble croisé.
Sur un PC j'ai mis l'adresse 127.0.0.1 255.0.0.0 et sur l'autre 127.0.0.2 255.0.0.0
Voici le code du Server UDP :
/*
Simple udp server
*/
#include<stdio.h> //printf
#include<string.h> //memset
#include<stdlib.h> //exit(0);
#include<arpa/inet.h>
#include<sys/socket.h>
#define BUFLEN 512 //Max length of buffer
#define PORT 8888 //The port on which to listen for incoming data
void die(char *s)
{
perror(s);
exit(1);
}
int main(void)
{
struct sockaddr_in si_me, si_other;
int s, i, slen = sizeof(si_other) , recv_len;
char buf[BUFLEN];
//create a UDP socket
if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
{
die("socket");
}
// zero out the structure
memset((char *) &si_me, 0, sizeof(si_me));
si_me.sin_family = AF_INET;
si_me.sin_port = htons(PORT);
si_me.sin_addr.s_addr = htonl(INADDR_ANY);
//bind socket to port
if( bind(s , (struct sockaddr*)&si_me, sizeof(si_me) ) == -1)
{
die("bind");
}
//keep listening for data
while(1)
{
printf("Waiting for data...");
fflush(stdout);
//try to receive some data, this is a blocking call
if ((recv_len = recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slen)) == -1)
{
die("recvfrom()");
}
//print details of the client/peer and the data received
printf("Received packet from %s:%d\n", inet_ntoa(si_other.sin_addr), ntohs(si_other.sin_port));
printf("Data: %s\n" , buf);
//now reply the client with the same data
if (sendto(s, buf, recv_len, 0, (struct sockaddr*) &si_other, slen) == -1)
{
die("sendto()");
}
}
close(s);
return 0;
}
Voici le Client UDP :
/*
Simple udp client
*/
#include<stdio.h> //printf
#include<string.h> //memset
#include<stdlib.h> //exit(0);
#include<arpa/inet.h>
#include<sys/socket.h>
#define SERVER "127.0.0.1"
#define BUFLEN 512 //Max length of buffer
#define PORT 8888 //The port on which to send data
void die(char *s)
{
perror(s);
exit(1);
}
int main(void)
{
struct sockaddr_in si_other;
int s, i, slen=sizeof(si_other);
char buf[BUFLEN];
char message[BUFLEN];
if ( (s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
{
die("socket");
}
memset((char *) &si_other, 0, sizeof(si_other));
si_other.sin_family = AF_INET;
si_other.sin_port = htons(PORT);
if (inet_aton(SERVER , &si_other.sin_addr) == 0)
{
fprintf(stderr, "inet_aton() failed\n");
exit(1);
}
while(1)
{
printf("Enter message : ");
gets(message);
//send the message
if (sendto(s, message, strlen(message) , 0 , (struct sockaddr *) &si_other, slen)==-1)
{
die("sendto()");
}
//receive a reply and print it
//clear the buffer by filling null, it might have previously received data
memset(buf,'\0', BUFLEN);
//try to receive some data, this is a blocking call
if (recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slen) == -1)
{
die("recvfrom()");
}
puts(buf);
}
close(s);
return 0;
}
Voila je ne comprend pas pourquoi je ne reçoit pas le message sur le PC server.
Merci d'avance pour votre aide.
dhoomh
Hors ligne
#2 Le 29/12/2013, à 12:19
- slasher-fun
Re : Server et Client en UDP
Bonjour,
127.0.0.1 est une adresse IP locale (loopback), elle ne risque donc pas de recevoir de données de 127.0.0.2.
Il est plus simple d'utiliser une IP de la RFC 1918, à savoir entre :
* 192.168.0.0 et 192.168.255.255
* 172.16.0.0 et 172.31.255.255
* 10.0.0.0 et 10.255.255.255
Attention en choisissant la plage à tenir compte de l'adresse désignant le réseau (la première) et de celle de broadcast (la dernière)
Dernière modification par slasher-fun (Le 29/12/2013, à 12:20)
Hors ligne
#3 Le 29/12/2013, à 13:26
- dhoomh
Re : Server et Client en UDP
Ha ok merci pour ta réponse.
J'ai des warning lors de la compilation du code client, je n'arrive pas a comprendre. Les voici :
client.c: In function ‘main’:
client.c:46:3: warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]
gets(message);
^
/tmp/cccDk2H8.o: In function `main':
client.c:(.text+0x10b): warning: the `gets' function is dangerous and should not be used.
Merci pour votre réponse.
dhoomh
Hors ligne
#4 Le 29/12/2013, à 13:32
- slasher-fun
Re : Server et Client en UDP
Tu compiles en demandant l'affichage d'avertissements sur les fonctions dépréciées (-Wdeprecated-declarations), et il t'est répondu que gets en est une.
Hors ligne
#5 Le 29/12/2013, à 18:36
- dhoomh
Re : Server et Client en UDP
Donc pas d'erreur dans le code ?
dhoomh.
Hors ligne
#6 Le 29/12/2013, à 23:29
- slasher-fun
Re : Server et Client en UDP
A priori non, il ne s'agit que d'avertissements.
Hors ligne
#7 Le 30/12/2013, à 01:42
- pires57
Re : Server et Client en UDP
J'ai regarder vite fait ton code, normalement les deux m'ont l'air correct, si il ne font pas ce que tu veut, alors il faudra donner des détails.
Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn
Hors ligne
#8 Le 30/12/2013, à 18:26
- dhoomh
Re : Server et Client en UDP
J'ai mis comme @IP sur le client : 192.168.0.2 et @IP du server : 192.168.0.1 avec un masque 255.255.255.0
Après avoir exécuter, sur le client j'ai "Enter message" et sur le Server j'ai "Waiting for data..."
Au final le message n'apparait pas sur le PC server.
Avez-vous des idées? Ou est-ce-que quelqu'un l'a déjà exécuter ?
Merci d'avance,
dhoomh
Hors ligne
#9 Le 09/01/2014, à 22:34
- pires57
Re : Server et Client en UDP
je ne l'ai pas executé non, je regarderais plus tard, la je ne suis pas sur mon pc ...
Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn
Hors ligne
Pages : 1