Skip to content
Snippets Groups Projects
Commit de16916f authored by KOLESNIKOV KIRILL's avatar KOLESNIKOV KIRILL
Browse files

Exo 4 fait

parent aa7dc904
Branches
No related merge requests found
No preview for this file type
No preview for this file type
......@@ -32,7 +32,12 @@ int main (int argc, char *argv [])
/* complete sockaddr struct */
int error;
struct addrinfo *res;
error =getaddrinfo(IP,argv[1],NULL,&res);
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_protocol = IPPROTO_UDP;
error =getaddrinfo(IP,argv[1],&hints,&res);
if(error!=0){
perror("getaddrinfo\n");
exit(EXIT_FAILURE);
......@@ -49,7 +54,7 @@ int main (int argc, char *argv [])
exit(EXIT_FAILURE);
}
}
CHECK(sendto(new_socket,phrase,strlen(phrase),0,res->ai_addr,res->ai_addrlen));
CHECK(sendto(new_socket,phrase,strlen(phrase),0,list_udp->ai_addr,list_udp->ai_addrlen));
/* close socket */
close(new_socket);
/* free memory */
......
No preview for this file type
No preview for this file type
No preview for this file type
......@@ -32,7 +32,12 @@ int main (int argc, char *argv [])
CHECK(new_socket);
int error;
struct addrinfo *res;
error =getaddrinfo(IP,argv[1],NULL,&res);
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_protocol = IPPROTO_UDP;
error =getaddrinfo(IP,argv[1],&hints,&res);
if(error!=0){
perror("getaddrinfo\n");
exit(EXIT_FAILURE);
......@@ -51,7 +56,7 @@ int main (int argc, char *argv [])
}
}
/* link socket to local IP and PORT */
CHECK(bind(new_socket,res->ai_addr,res->ai_addrlen));
CHECK(bind(new_socket,list_udp->ai_addr,list_udp->ai_addrlen));
/* wait for incoming message */
char buffer[SIZE];
CHECK(recvfrom(new_socket,buffer,SIZE,0,NULL,NULL));
......
No preview for this file type
File added
File added
......@@ -5,7 +5,8 @@
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netdb.h>
#include <netdb.h>
#include <errno.h>
#define CHECK(op) do { if ( (op) == -1) { perror (#op); exit (EXIT_FAILURE); } \
} while (0)
......@@ -16,22 +17,60 @@
int main (int argc, char *argv [1])
{
/* test arg number */
if(argc != 2)
{
perror("Invalid argument's number\n");
exit(EXIT_FAILURE);
}
/* convert and check port number */
int port_number = atoi(argv[1]);
if(port_number < 10000 || port_number > 65000){
perror("Invalid port number\n");
exit(EXIT_FAILURE);
}
/* create socket */
int new_socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
CHECK(new_socket);
int error;
struct addrinfo *res;
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_protocol = IPPROTO_UDP;
error =getaddrinfo(IP,argv[1],&hints,&res);
if(error!=0){
perror("getaddrinfo\n");
exit(EXIT_FAILURE);
}
/* complete struct sockaddr */
struct addrinfo *list_udp=res;
while (list_udp->ai_protocol != IPPROTO_UDP)
{
list_udp = list_udp->ai_next;
if (list_udp == NULL)
{
perror("Problème pas de protocole UDP");
exit(EXIT_FAILURE);
}
}
/* link socket to local IP and PORT */
CHECK(bind(new_socket,list_udp->ai_addr,list_udp->ai_addrlen));
/* wait for incoming message */
char buffer[SIZE],ip[SIZE],port[SIZE];
struct sockaddr_storage socket_storage;
socklen_t socket_len = sizeof(socket_storage);
int result =recvfrom(new_socket,buffer,SIZE,0,(struct sockaddr*)&socket_storage,&socket_len);
CHECK(result);
/* print sender addr and port */
if(getnameinfo((struct sockaddr*)&socket_storage,socket_len,ip,SIZE,port,SIZE,NI_NUMERICHOST | NI_NUMERICSERV)==0){
fprintf(stdout,"hello world\n");
fprintf(stdout,"%s %s\n",ip,port);
}
/* close socket */
close(new_socket);
/* free memory */
freeaddrinfo(res);
return 0;
}
File added
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment