Funciona en LAN pero no en Internet

Temas relacionados con la programación de aplicaciones que funcionan sobre un servidor.
Responder
Mensaje
Autor
oruko
Mensajes: 1
Registrado: 28/05/2008 2:55 pm

Funciona en LAN pero no en Internet

#1 Mensaje por oruko » 28/05/2008 3:07 pm

Hola, estoy haciendo mis primeros pinitos en sockets y he hecho un programa muy sencillo:

Se puede ejecutar como cliente o servidor, el cliente envia un 3 al servidor y este lo muestra por el terminal.

Pero solo me funciona en LAN y no lo entiendo ¿Alguien me puede ayudar?

Este es el codigo, programado en C bajo Windows XP usando CodeBlocks:

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>

#define IP_DESTINO "000.000.000.000" //La voy cambiando dependiendo de a quien se lo mande para probarlo


void cliente () {

    int s;
    struct sockaddr_in server_addr, client_addr;
    int dato = 3;

    memset ((char *)&client_addr,0, sizeof (client_addr));
    client_addr.sin_family = AF_INET;
    client_addr.sin_port =  htons(0);
    client_addr.sin_addr.s_addr = INADDR_ANY;

    s = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);

    memset ((char *)&server_addr,0, sizeof (server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port =  htons (55000);
    server_addr.sin_addr.s_addr = inet_addr(IP_DESTINO);

    connect (s, (struct sockaddr *) &server_addr, sizeof(server_addr));

    send(s,(char *)&dato,sizeof(int),0);

    printf ("Hecho.\n");

    close(s);
}

void servidor () {

    int msock, ssock, dato, client_len;
    struct sockaddr_in server_addr, client_addr;
    memset ((char *)&client_addr,0, sizeof (client_addr));

    msock = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);

    memset ((char *)&server_addr,0, sizeof (server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port =  htons (55000);
    server_addr.sin_addr.s_addr = INADDR_ANY;

    bind (msock, (struct sockaddr *) &server_addr, sizeof(server_addr));

    listen(msock, 5);

    printf ("Ejecutandose...\n");

    while (1) {

        printf ("Esperando cliente...\n");

        client_len = sizeof(client_addr);

        ssock = accept (msock, (struct sockaddr *) &client_addr,  &client_len);

        printf ("Conexion aceptada.\n");

        recv(ssock, &dato, sizeof(int), 0);

        printf ("Dato: %d\n", dato);

        close(ssock);
    }
}



int main() {

    int opcion = 0;

    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,2), &WSAData);

    printf ("Elije aplicacion:\n1) Cliente\n2) Servidor\n>");
    scanf ("%d", &opcion);

    if (opcion == 1){
        cliente();
    }
    else {
        servidor();
    }



    return 0;
}
Gracias.

alopezf1987
Mensajes: 2
Registrado: 12/03/2012 12:02 pm

Puerto 55000

#2 Mensaje por alopezf1987 » 12/03/2012 12:09 pm

Creo que es más un tema de redes que de programación, el servidor escucha un puerto, que es el 55000.

Bueno, tienes que habilitar una regla NAT en tu router para que todo el tráfico que vaya por el 55000 lo redirija a tu máquina servidor.

Es normal que solo te funcione en LAN.

Un saludo.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados