/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Funciona en LAN pero no en Internet

 
      Índice del Foro elrincondelc.com -> Programación en Servidores
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
oruko



Registrado: 28 May 2008
Mensajes: 1

MensajePublicado: 28/05/2008 3:07 pm
Título: Funciona en LAN pero no en Internet

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:
#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.
Volver arriba
alopezf1987



Registrado: 12 Mar 2012
Mensajes: 2

MensajePublicado: 12/03/2012 12:09 pm
Título: Puerto 55000

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.
Volver arriba
      Índice del Foro elrincondelc.com -> Programación en Servidores
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com