clientedatagrama.c #include #include #include #include #include #include main() { int sfd, n; char mensaje[30]; struct sockaddr_in ser_addr, cli_addr; if((sfd=socket(AF_INET, SOCK_DGRAM, 0))==-1) { perror("fallo socket"); exit(-1); } ser_addr.sin_family=AF_INET; ser_addr.sin_addr.s_addr=inet_addr("127.1.0.0"); ser_addr.sin_port=htons(0); cli_addr.sin_family=AF_INET; cli_addr.sin_addr.s_addr=htonl(INADDR_ANY); cli_addr.sin_port=htons(7000); if(bind(sfd, (struct sockaddr *)&cli_addr, sizeof(cli_addr))==-1) { perror("error bind"); exit(-1); } strcpy(mensaje, ""); gets(mensaje); if(sendto(sfd, mensaje, 30, 0, (struct sockaddr *)&ser_addr, sizeof(ser_addr))!=30) { perror("error sendto"); exit(-1); } n=sizeof(cli_addr); strcpy(mensaje, ""); if(recvfrom(sfd, mensaje, 4, 0, (struct sockaddr *)&cli_addr, &n)==-1) { perror("error recvfrom"); exit(1); } printf("\nRecibio cliente el mensaje: %s", mensaje); close(sfd); exit(0); } servidordatagrama.c #include #include #include #include #include main() { int sfd, n; char mensaje[30]; struct sockaddr_in ser_addr, cli_addr; if((sfd=socket(AF_INET, SOCK_DGRAM,0)) == -1) { perror("fallo socket"); exit(1); } ser_addr.sin_family=AF_INET; ser_addr.sin_addr.s_addr=inet_addr("127.1.0.0"); ser_addr.sin_port=htons(7000); if(bind(sfd, (struct sockaddr *)&ser_addr, sizeof(ser_addr))==-1) { perror("error"); exit(-1); } n=sizeof(cli_addr); if(recvfrom(sfd, mensaje, 30, 0, (struct sockaddr *)&cli_addr, &n) == -1) { perror("error recvfrom"); exit(1); } printf("\nRecibio servidor mensaje: %s lon=%d", mensaje, n); if(sendto(sfd, "hola", 4, 0, (struct sockaddr *)&cli_addr, sizeof(cli_addr))!=4) { perror("error envio"); exit(1); } close(sfd); exit(0); }