Foros del Web » Programación para mayores de 30 ;) » C/C++ »

problema con programacion de sockets

Estas en el tema de problema con programacion de sockets en el foro de C/C++ en Foros del Web. El problema que tengo es que al implementar los sockets sin conexion (datagrama) el cliente no es capaz de recibir el mensaje. El codigo es ...
  #1 (permalink)  
Antiguo 19/12/2010, 06:40
 
Fecha de Ingreso: marzo-2010
Mensajes: 18
Antigüedad: 14 años, 1 mes
Puntos: 0
Exclamación problema con programacion de sockets

El problema que tengo es que al implementar los sockets sin conexion (datagrama) el cliente no es capaz de recibir el mensaje. El codigo es el siguiente:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#define MAX 100
/*
*
*/

void recepcion(){

int socket1;
struct sockaddr_in socketPropio;
struct sockaddr_in socketRemoto;
socklen_t tam;
int num;
char mensaje[MAX];

if ((socket1 = socket(PF_INET, SOCK_DGRAM, 0)) == -1){
perror("Error\n");
exit(1);
}
socketPropio.sin_family = AF_INET;
socketPropio.sin_port = htons(9010);
socketPropio.sin_addr.s_addr = htonl(INADDR_ANY); //direccion IP propia
//bzero(&(socketPropio.sin_zero), 8);

if (bind(socket1, (struct sockaddr *)&socketPropio, sizeof(struct
sockaddr)) == -1){
perror("Error\n");
exit(1);
}
tam = sizeof(struct sockaddr);
if ((num=(recvfrom(socket1, mensaje, strlen(mensaje), 0, NULL, NULL))) == -1){
perror("Error\n");
exit(1);
}
printf("Paquete proveniente de: %s\n", inet_ntoa(socketRemoto.sin_addr));
printf("Longitud del paquete en bytes: %d\n", num);
mensaje[num] ='\0';
printf("El paquete contiene : %s\n",mensaje);
close(socket1);

}


void envio(){
int socket1;
struct sockaddr_in socketRemoto;
struct sockaddr_in socketPropio;
struct hostent *host;
int num;
char mensaje[MAX]="Hola mundo.\0";

/*if ((host=gethostbyname("www.elpais.es")) == NULL){
printf("Error\n");
exit(1);
}*/
if ((socket1 = socket(PF_INET, SOCK_DGRAM, 0)) == -1)
{
perror("Error\n");
exit(1);
}

socketPropio.sin_family = AF_INET;
socketPropio.sin_port = htons(9011);
socketPropio.sin_addr.s_addr = INADDR_ANY;

socketRemoto.sin_family = AF_INET;
socketRemoto.sin_port = htons(9011); //numeros de puerto distintos
socketRemoto.sin_addr.s_addr = inet_addr("127.0.0.1"); //direccion IP remota (mismo ordenador)
//bzero(&(socketRemoto.sin_zero), 8);
if (bind(socket1, (struct sockaddr *)&socketRemoto, sizeof(struct
sockaddr)) == -1){
perror("Error\n");
exit(1);
}
if ((num=sendto(socket1, mensaje, strlen(mensaje),
0, (struct sockaddr *)&socketPropio,sizeof(struct sockaddr))) == -1){
perror("Error\n");
exit(1);
}
printf("Enviados %d bytes hacia %s\n", num, inet_ntoa(socketRemoto.sin_addr));

close(socket1);

}

int main(int argc, char** argv) {
int opcion;
printf("Teclee opcion: ");
printf("\n\t1-envio");
printf("\n\t2-recepcion");
printf("\n\t3-salir\n");
scanf("%d", &opcion);
do{
if(opcion==1)
envio();
else if (opcion == 2)
recepcion();
}while (opcion != 3);

return (EXIT_SUCCESS);
}
  #2 (permalink)  
Antiguo 19/12/2010, 08:47
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 13 años, 9 meses
Puntos: 4
Respuesta: problema con programacion de sockets

no te puedo ayudar por que no se sockets, pero si te puedo decir que este bucle esta mal programado:

Código:
printf("Teclee opcion: ");
printf("\n\t1-envio");
printf("\n\t2-recepcion");
printf("\n\t3-salir\n");
scanf("%d", &opcion);
do{
     if(opcion==1)
          envio();
     else if (opcion == 2)
          recepcion();
}while (opcion != 3);
si metes un 4:

opcion=4

4!=3 => while se repite siempre: bucle infinito. no puedes salir de el, estaria todo el rato comparando opcion con 1 y con 2.


por cierto, me interesa aprender sockets, me puedes decir si lo que has programado es para linux o para windows?
  #3 (permalink)  
Antiguo 19/12/2010, 09:15
 
Fecha de Ingreso: marzo-2010
Mensajes: 18
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: problema con programacion de sockets

bueno, lo del main no es el problema pero gracias
el programa es para linux, porque alguna de las funciones windows no las reconoce

Etiquetas: programacion, sockets
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:39.