Problemas con la libreria SDL_Net

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

Problemas con la libreria SDL_Net

Notapor vib » Lun May 30, 2011 7:39 pm

Hola a todos! como veis soy nuevo en el foro... pero no tanto en la web que me ha servido de mucha ayuda!

Llevo unas semanas trabajando con mi projecto final de curso y lo tengo realmente muy muy guapo..
un juego 2d en c++ online.

El juego ya esta echo y todo funciona de maravilla.... ahora el tema esque de hacerlo localhost.. me va de maravilla el problema lo tengo cuando quiero assignarlo para que puedas entrar desde la ip publica....

No entiendo muy bien.
Cuando conecto el servidor utilizando
SDLNet_ResolveHost(&serverIP, NULL, GAME_PORT);
no me contecta al puerto libre que le digo...
ejemplo:
En el ruter he abierto el puerto 30,000 .
game_port 30,000
le digo que se conecte
devuelvo el valor de serverIP.port y me devuelve un puerto diferente... siempre que conecto con el 30,000 me devuelve un puerto diferente pero siempre el mismo...
Me conecto a X puerto, y me devuelve un puerto diferente pero al asignar siempre el mismo...

Eso ya no lo entiendo.

2n
Los clientes.. simplemente les digo que se conecte al servidor... de momento uso la ip privada...
y el puerto que se conecta los clientes es el 0... siempre.

Estoy a cuadros....

Haber si me podeis echar un cablecito para poder conectarme al servidor con ip publica...
Pq si intento conectar directamente a mi ip publica... paff fallo de segmentacion " me imagino que es porque no ve un puerto o algo"
ni idea

gracias!
vib
 
Mensajes: 9
Registrado: Lun May 30, 2011 7:30 pm

Re: Problemas con la libreria SDL_Net

Notapor kaiser » Mar May 31, 2011 11:05 am

Hola vib. Nunca he utilizado SDL_Net así que no entiendo muy bien todo lo que dices en tu post, pero hace un tiempo programé un pequeño chat con las librerías de sockets de python y me funcionaba perfectamente si lo ejecutaba todo dentro de un solo equipo (IP:127.0.0.1 ) o si lo ejecutaba todo dentro de la red local utilizando IPs privadas (192.168.1.X) pero fallaba en el momento en que uno de los clientes se intentaba conectar desde otra red y por lo tanto tenia que utilizar la IP pública. Creo que ésto es lo que te ocurre a ti así que te comento.

Cuando utilizas un router tienes dos redes: de router para adentro tienes tu red privada con tus ordenadores de casa y usando IPs 192.168.1.X, y de router para afuera tienes la red pública que básicamente es Internet. Los router utilizan un sistema llamado NAT que hace lo siguiente: el equipo PC1 quiere enviar un paquete, éste llevará por ejemplo la siguiente información <IPorigen=PC1 ; PORTorigen=2000> el router recibe ese paquete y lo modifica dejándolo así <IPorigen=Router ; PORTorigen=3400> y en una tabla interna apunta que todos los paquetes que reciba dirigidos al puerto 3400 debe reenviarlos a PC1 ; 2000.

Verás entonces que cuando deseas utilizar la red pública los paquetes no llevan ni la IP correcta ni el PORT correcto, sino que ambos han sido modificados.

Ésto no supone un problema cuando la comunicación se produce con un servidor de Internet, ya que éstos no utilizan NAT. En éste caso si te quieres comunicar con el servidor con IP=SERVER1 en el puerto 80 simplemente incluirás éstos datos en los campos de IPdestino y PORTdestino y puesto que el NAT solo modifica los campos de origen el paquete llegará correctamente a su destino. A su vez el servidor responderá a los datos de origen que aparezcan en el paquete, éstos si han sido modificados pero en cualquier caso se corresponden con la IP de tu router y el puerto que él halla decidido asignar por lo tanto los paquetes de respuesta llegarán correctamente a tu router y el sabrá reenviarlos a tu PC.

El problema viene a la hora de comunicar dos equipos que usen NAT ya que ninguno de los dos sabrá a que IP y puerto debe dirigirse realmente.

Para solucionar ésto la mayoría de aplicaciones P2P (peer to peer) como Skype utilizan intermediarios no NATeados de tal manera que la comunicación no se produce realmente de forma directa entre los dos clientes sino a través de una especie de servidor.

De forma más casera algunos routers permiten configurar manualmente el NAT, es decir, configurar manualmente que puerto asignará el router a un determinado proceso ejecutándose en una determinada IP. Ésto hay que hacerlo para poder jugar a algunos juegos en red así que a lo mejor te suena el proceso.

Espero haberte ayudado.

Un Saludo!
De la API al IDE y del IDE a la API.
Avatar de Usuario
kaiser
 
Mensajes: 121
Registrado: Mié Nov 24, 2010 7:47 pm
Ubicación: Madrid (España)

Re: Problemas con la libreria SDL_Net

Notapor vib » Mar May 31, 2011 6:39 pm

vale me sirve de ayuda.. lo que me comentas aunque ahora esto de internet lo dejo de banda veo que tengo un problemas mas gordo...

estoy intentando solucionarlo.. os dejo el caso por si a alguien se le ocurre algo...

Mi juego es un hibrido... se conecta tcp a un servidor.. el cliente crea una linia udp que el servidor la recibe y se la envia al cliente.. osea cada cliente se conecta tcp con el servidor y udp con 1 linea de escuchca a cada cliente...

el caso esque si los clientes son localhost way.. al ser por lan no se ven.

veo que la IPaddress que creo siempre me da como host=0; osea no me da la ip me sale el 0.. creo que ahi esta el problema que nose porque me da 0 al crear esa variable.
vib
 
Mensajes: 9
Registrado: Lun May 30, 2011 7:30 pm


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado