Conectar 2 programas por medio de internet

Iniciado por Krnl64, 18 Abril 2006, 17:43 PM

0 Miembros y 1 Visitante están viendo este tema.

Cuasar

hola bueno primero confirmame como te conectas a internet...
osea...   vos tenes una lan, perfecto.

estas pc como se conectan a internet?.

el tema es asi ?

                                           pc1
internet-------------router       pc2
                                           pc3

o asi?


                                                              pc2
internet---------------pc1 --------- router     pc3



te cuento existe un sistema de traduccion llamado NAT este sistema se usa para compartir internet en una red pero se puede hacer de muchas formas distinta.

los routers (algunos) traen esta opcion de hacer NAT.

si tu conexión es la primera que intente graficar mas arriba el que esta haciendo NAT es el router esto significa que cuando tu clinte llama a la ip el que contesta es el ruter y el ruter por mas que tenga el puerto 1066 a la escucha, no tiene nada que responderle a tu cliente ya que no tiene en soft de tu aplicacion respondiendo.

solucion a esto?

entras en la configuracion de tu router y depende que router sea te fijas en la opcion de port forwarding  capaz que en tu ruter tenga algun otro titulo pero el sentido de la frase es = osea traspado de peticiones de puertos.
con esto el router cuando escucha que alguien llama a su puerto 1066 lo que hace es chiflarle a la pc que vos espesifiques osea le dice... che... tengo un fulano que me pide no se que a mi puerto 1066, te lo paso y atendelo vos).
jeje fue la forma mas facil que se me ocurrio para que entiendas de que se trata. 
si no le configuras esto a tu router lo que hace es desechar el pedido ya que no puede responderlo.

"Ahora" si tu configuracion es la segunda seguramente que existe algun problema en la aplicacion. pero si por LAN funciona fijate que protocolo usas para la conexión si en una lan en protocolo UDP puede funcionar bien pero en internet te conviene TCP/IP ya que el UDP no controla la entrega y si algun frame se pierde en el camino nadie se entera.

bueno espero que puedas solucionar tu problema
salu2


Krnl64

#11
Citar
Creo que no se me entiende

Conexion Servidor ------> Cliente
Mas conocida como conexion inversa lo que hace es que el cliente abre un puerto y el server se conecta atreves de ese puerto con una ip definida antes de enviarse el server


El esquema de conexion es este:


-----             -------          ------
LAN1----------NO-IP--------LAN2

Como se consigue la conexion ?

El server se conecta a NO-IP y el cliente tambien ?

Gracias por el interes










RED_HORSE

  no lo que se conecta al no ip es el cliente y otra cosa que puede ser es que pusiste mal tus datos en el duc

Cuasar

Krnl64  aver si nos entendemos.

olvidate por un segundo de no-ip y de tu aplicacion.

por lo que veo esto es un problema de comunicacion en lo que se denomina capa 2 del modelo OSI

voy a tratar de ser bien claro, cuando vos montas tu aplicacion de server en una pc, esta lo que hace es poner el puerto 1066 "(SOLO DE ESA PC)" a la escucha de peticiones. esto significa que solo en puerto 1066 "(DE ESTA PC)" responde a tu cliente.  si esta pc tiene una direccion IP privada (osea que pertenese a una red interna) no es visible desde internet. por eso es importante que describas de que forma te conectas a internet.

si te conectas con una PC con la que compartis internet a otras tenes que montar tu server en esa pc que es la que tiene la IP publica.
IP Publica = es visible en internet. ej 201.xxx.xxx.xxx
IP Privada = no es visible en internet. ej 192.168.0.1/2/3/4/5etc

para poder ayudarte decime como esta armada tu red, osea...
tenes una pc a la cual le conectas el modem ADSL o CABLEMODEM y la linea de telefono va a este modem?

o la linea de telefono va conectada a un router a donde conectas las demas pc?

por mas que pienses que no es importante esto es un punto clave para lograr la comunicacion por internet.

espero tu respuesta.
salu2

Krnl64

Citar
A ver si nos entendemos
Parece que lo voy pillando

Perdona por ser tan duro de moyera, pero es que segun he leido, la conexion inversa atraviesa routers, firewalls, etc

Mi objetivo es poder conectar ambos programas por internet desconociendo como estan montadas ambas redes

Pero dejo claras mis intenciones, NO ES 1 TROYANO

Quiero conectar ambas aplicaciones para poder manipular una base de datos.

Ahora, la red esta montada de esta manera:

-------          ------           ----------          ---------        -------
Router------- LAN1--------INTERNET--------Router--------LAN2

Son los Router quien proveen a las LAN  de INTERNET


Como bien dices, cada equipo posee 1 ip publica (Visible desde internet) y otra ip privada (ip de LAN)

Bien, ahora el problema de la conexion.

Quiero conectar 1 equipo de LAN1 a otro de LAN2.

Lo que debo hacer es conectar ambas IPs publicas (eso creo que has intentado explicarme) y creo que ya se donde tengo el problema.


Lo intento hacer asi:


Server:

Se conecta a mi dominio de no-ip ( por ej: xxx.no-ip.org)
Por el puerto x
(Creo que esto esta bien, porque se conecta a mi IP publica)



Cliente:

Lo pongo en escucha por el puerto x
Le digo que acepte cualquier solicitud entrante

Creo que el problema esta aqui.

Tengo puesto este code:



Private Sub client_ConnectionRequest (ByVal requestID As Long)
  ' Comprueba si el estado del control es cerrado.
  ' De lo contrario, cierra la conexión antes de
  ' aceptar la nueva conexión.
  If client.State <> sckClosed Then
   Client.Close
   Client.Accept requestID
   end if
end sub



¿Que he de hacer para que el cliente vea la peticion de fuera de LAN y la acepte ?

Espero que se me haya entendido o haberlo entendido yo lo que se me queria decir

Muchas Gracias


















Gangrel

valla que desmadre. Aver si no ago esto mas rebuelto.

scrngs tiene reazon en todo lo que te a dicho pero puede ser que por que usa muchos terminos tecnicos no le entiendas bien.

1-La conexion Inversa NO brica los routers

estoy casi seguro que tu problema es ese. Has lo que te diga y te conectaras con exito.

Primero la estructura de la conexion.

Pc1deLan1---RouterdeLan1---INTERNET---RouterdeLan2---Pc1deLan2

Direcciones IP en la LAN
Pc1deLan1       127.1.0.2
RouterdeLan1   127.1.0.1
Pc1deLan2        127.1.0.2
RouterdeLan2   127.1.0.1

Direcciones IP en Internet
RouterdeLan1    200.65.87.201
RouterdeLan2    200.65.98.187

Suponiendo que tenemos el Servidor de tu aplicacion en Pc1deLan1 y el cliente en pc1deLan2.

En el cliente (Pc1deLan2) no hay ningun problema simplemente en tu codigo de visual le dices que se conecte a la direccion IP publica de RouterdeLan1 (200.65.87.201) o tu dominio de No-IP eso parece que esta claro.

En el servidor es donde esta el truco.
1-Con tu codigo de visual pones a Pc1deLan1 a la escucha en el puerto 1066.
2-Como el cliente no esta conectando directamente a Pc1deLan1 sino a RouterdeLan1 (200.65.87.201) le tienes que decir al router que todas las conexiones que le lleguen de internet al puerto 1066 se las pase a Pc1deLan1.

A esto se le llama Mapear/Redireccionar puertos y para lograrlo tienes que hacer lo siguiente.

En la maquina Pc1deLan1 le das click a "Menu Inicio" despues le das click a "Ejecutar" escrives cmd (en windows XP/2000) o command (en windows 98/95) ya en la consola de comandos del MS-Dos escrives "ipconfig" (xp/2000) o winipcfg (98/95) te apareceran una lista de direcciones IP, buscas el termino que diga "puerta de enlace" o algo similar y anotas la direccion IP que aparezca como dicha puerta de enlase.

Esa es la direccion ip en la LAN del RouterdeLan1 suponiendo en este ejemplo 127.1.0.1.

Despues te vas a tu navegador IE o Mozilla o el que tengas instalado y en la barra de direcciones escrives la ip del router.

Si todo a salido bien estaras en la configuracion del RouterLan1 tienes que buscar alguna opcion de mapeo de puerto o redireccionamiento de puertos donde le tienes que configurar que todo paquete y peticion de conecion sobre el puerto 1066 lo redireccione a Pc1deLan1 (127.1.0.2) Los pasos de configuracion del router no los pongo por que varian dependiendo del router.

Con el RouterdeLan1 configurado para que redireccione el puerto 1066 la conexion debe funcionar.

Cualquier duda posteala
La educacion no es un privilegio, es un derecho.

http://www.usuarios.lycos.es/protg

moe88

una cosita, tienes puesto el conexion request en el cliente????

el que acepta la conexion deberia ser el server... o es que a tu server le llamas client??

Private Sub client_ConnectionRequest (ByVal requestID As Long)
  ' Comprueba si el estado del control es cerrado.
  ' De lo contrario, cierra la conexión antes de
  ' aceptar la nueva conexión.
  If client.State <> sckClosed Then
   Client.Close
   Client.Accept requestID
   end if
end sub


por otro lado ese " if "  ahi, nu se nu se.. yo no lo pondria

Krnl64


DIOS QUE LIO !!


Les voy a postear el code y todo lo que he hecho hasta ahora

a ver si por fin consigo que esto funcione.

Les agradezco toda su ayuda.


Bueno, al grano.

Lo 1º que he hecho a sido mapear el puerto 1066 de mi router
(creo que se refiere a abrirlo)

2º corro el DUC

3º Ejecuto ambos programas

Los codes son estos:

Servidor:



Private Sub Command1_Click()
End
End Sub

Private Sub Form_Load()
Ws.LocalPort = 1066
Ws.RemoteHost = "xxx.no-ip.org"
Ws.Listen
End Sub

Private Sub Timer1_Timer()
If Ws.State <> 7 Then
Label1.Caption = "Desconectado"
Ws.Close
Ws.Connect
Else
Label1.Caption = "Conectado"
End If
End Sub


Private Sub Ws_ConnectionRequest(ByVal requestID As Long)
   Client.Close
   Client.Accept requestID
End Sub




Cliente



Private Sub Command1_Click()
End
End Sub

Private Sub Form_Load()
Ws.RemotePort = 1066
Ws.RemoteHost = "xxx.no-ip.org"
Ws.Connect
End Sub


Private Sub Timer1_Timer()
If Ws.State <> 7 Then
Ws.Close
Ws.Connect
End If
End Sub



Al correr ambos programas me sale que el estado de la conexion es SYN_SENT

En ambos routers esta mapeado el puerto 1066

¿Que es lo que falla ?
















moe88

Private Sub Form_LOad()
ws.close
ws.localport = 1066
ws.listen
End sub

Private Sub ws_Connect()
label1.caption = "conectado"
End Sub



Cliente:

Private Sub Form_Load()
Ws.RemotePort = 1066
Ws.RemoteHost = "xxx.no-ip.org" '(que es la no-ip del server)
Ws.Connect
End Sub

y en todo caso, si quieres que si falla se reconecte en ws_error pon
ws.close
ws.connect


Krnl64


Moe88 donde estan ahora los fallos ?

Sigo sin poder conectar.

Por favor algun ejemplo de Conexion inversa que rule por internet

Gracias