Gb.net En Redes Locales


Objetivo: Gb.net En Redes Locales
Estoy tratando de utilizar el componente gb.net para realizar una conexión entre dos programas gambas por internet.
He leido el capítulo del manual y estoy utilizando una conexión tcp. Además, he probado desde una terminal con telnet y el programa responde correctamente.
El problema viene cuando intento lo mismo desde otro ordenador en una red local. Primero, no sé exactamente que poner en "IP del servidor" en el cliente. He probado con la IP interna, pero no me funciona. No sé como se podría hacer.

Perfil MP  
Objetivo: Re: Gb.net En Redes Locales
Hola
Según entiendo estas queriendo usar un socket para conectar dos ordenadores.. En el que va a escuchar tienes que poner un serversocket e indicar un puerto (p. ej. el 40000). Anotas cual es su ip y ahí tienes que hacer listen para que se ponga a la escucha y ahora te vas al que va a enviar y le pones un socket que envie a la ip con el puerto 40000 y usas el connect.

Aquí tienes un ejemplo de código para usar un socket. Si tienes mas dudas pregunta

Enlace


última edición por soplo el Martes, 18 Enero 2011, 16:40; editado 1 vez
Perfil MP  
Objetivo: Re: Gb.net En Redes Locales
soplo escribió: [Ver mensaje]
Hola
Según entiendo estas queriendo usar un socket para conectar dos ordenadores.. En el que va a escuchar tienes que poner un serversocket e indicar un puerto (p. ej. el 40000). Anotas cual es su ip y ahí tienes que hacer listen para que se ponga a la escucha y ahora te vas al que va a enviar y le pones un socket que envie a la ip con el puerto 40000 y usas el connect.

Aquí tienes un ejemplo de código para usar un socket. Si tienes mas dudas pregunta

Enlace



Sí, creo que esa parte ya la tengo hecha y funcionando (al menos eso creo, como digo con telnet me funciona) pero a la hora de conectar dos ordenadores en la misma red, en mi red local, he probado con la ip privada y no me funciona. Y como la ip pública es igual para ambos ordenadores, al estar ambos en la misma red, pues no me funciona tampoco con ella.

Perfil MP  
Objetivo: Re: Gb.net En Redes Locales
Octavio, deberías proveer más información.

¿Cuáles son las IP de las pc que intentas conectar?

¿Tienes firewalls bloqueando puertos en alguna de esas pc?

¿Podrías mostrar tu código para ver si es ahí donde está el problema? Considera que si te conectas via telnet, tal vez la parte del servidor está correcta pero la parte del cliente no.

Objetivo: Re: Gb.net En Redes Locales
Vale, voy a intentar enseñar el código.

De un lado, en el servidor, hay un botón para crear una partida y luego un evento Socket_Read que hace el trabajo.

PUBLIC SUB crearpartida_Click()

Servidor = NEW ServerSocket AS "Servidor"
Servidor.Type = Net.Internet
Servidor.Port = CInt(Puerto.Text)
TRY Servidor.Listen()

IF ERROR THEN
informacion.text = informacion.text & "Error en la creación del servidor."
ELSE
informacion.text = informacion.text & "Servidor creado. Esperando cliente. Escuchando en el puerto " & Servidor.Port & " ."
ENDIF

unirseapartida.enabled = FALSE
crearpartida.enabled = FALSE

END

PUBLIC SUB Servidor_Connection(RemoteHostIP AS String)


informacion.text = informacion.text & "\nLa IP " & RemoteHostIP & " trata de conectarse. Pulse iniciar partida."
Remoto = Servidor.Accept()
EstadoRed = "servidor"
iniciarpartida.enabled = TRUE
iniciarpartida_click

PUBLIC SUB Socket_Read()

'SERVIDOR

DIM RemoteX AS Integer
DIM RemoteY AS Integer

TRY INPUT #LAST, RemoteX, RemoteY

FMain.B2.X = RemoteX
FMain.B2.Y = RemoteY



PRINT #LAST, FMain.B1.X & " " & FMain.B1.Y

END

PUBLIC SUB Socket_Close()
Message.Error("Se ha cerrado la conexión. Cerrando Programa...")
ME.Close
END


Por otro lado, en el cliente hay un botón para unirse y un timer que controla cada cuanto tiempo envía o recibe los datos.
PUBLIC SUB unirseapartida_Click()
DIM spuerto AS Integer
DIM sIP AS String


IF Cliente = NULL THEN
TRY spuerto = Val(Puerto.text)
IF ERROR THEN
Message.Error("Número de puerto inválido")
RETURN
ENDIF
IF spuerto < 1 OR spuerto > 65535
Message.Error("Numero de puerto inválido")
RETURN
ENDIF

sIP = Net.Format(IP.Text)
IF sIP = "" THEN
Message.Error("IP inválida")
RETURN
ENDIF
Cliente = NEW socket AS "Cliente"
Cliente.Host = sIP
Cliente.port = spuerto
Cliente.Connect()
informacion.text = informacion.text & "\nIntentando la conexión, espere..."

ENDIF
END

PUBLIC SUB Cliente_Ready()
informacion.text = informacion.text & "\nConexión Establecida. Espere un momento."
Control.Enabled = TRUE
EstadoRed = "cliente"
iniciarpartida_click



END

PUBLIC SUB Control_Timer()
DIM Info AS String
DIM RemoteX AS Integer
DIM RemoteY AS Integer


TRY INPUT #Cliente, RemoteX, RemoteY

PRINT #Cliente, FMain.B2.X & " " & FMain.B2.Y

FMain.B1.X = RemoteX
FMain.B1.Y = RemoteY

END


Bueno, realmente el servidor y el cliente es el mismo programa y provee las opciones para ser servidor o cliente.
En fin, también he probado a abrir dos veces el programa en el mismo ordenador , crear una partida en uno y unirme con el otro y funciona.
Respecto a que IP tiene el ordenador al que quiero conectar... En este caso sería 192.168.1.101, me refiero a la privada.

Respecto a los cortafuegos, pues la verdad es que no lo sé. Pero me imagino que los puertos altos, como 6000 o cosas así no deberían estar bloqueados por defecto, ¿no?

última edición por 4octavio4 el Martes, 18 Enero 2011, 20:33; editado 1 vez
Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1535s (PHP: -12% SQL: 112%)
Consultas SQL: 25 - Debug off - GZIP Activado