Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-10-2007
kakarotv5 kakarotv5 is offline
Miembro
 
Registrado: feb 2007
Posts: 162
Poder: 18
kakarotv5 Va por buen camino
Haciendo un sistema de comunicación por sockets sencillito

He seguido este sencillo tutorial para hacer un cliente servidor, lo he probado bajo locahost y funciona pero me gustaría saber que he de hacer para que funcione entre dos ordenadores que sólo están conectados a través de Internet.

Adjunto el código fuente que he creado yo con la ayuda del tutorial.

Para que funcione primero ejecutad el servidor y luego el cliente. En el cliente según está poneis localhost en el Edit que está a la derecha del Label "Computadora" y escribíd lo que querais en el Memo de arriba del cliente como si fuera un chat.

Saludos.
Archivos Adjuntos
Tipo de Archivo: zip Cliente-Servidor.zip (15,8 KB, 141 visitas)

Última edición por kakarotv5 fecha: 03-10-2007 a las 00:35:21.
Responder Con Cita
  #2  
Antiguo 03-10-2007
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
no necesitas nada adicional si estás directamente conectado a internet.

en el campo de host, pornes tu ip de internet y listo
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 03-10-2007
kakarotv5 kakarotv5 is offline
Miembro
 
Registrado: feb 2007
Posts: 162
Poder: 18
kakarotv5 Va por buen camino
Cita:
Empezado por poliburro Ver Mensaje
no necesitas nada adicional si estás directamente conectado a internet.

en el campo de host, pornes tu ip de internet y listo
Ahora en vez de localhost he puesto mi IP privada y también funciona . Pero si pongo mi IP pública no obtego ningún resultado. Para establecer la comunicación con dos ordenadores que sólo están conectados a través de Internet qué IP debo poner la pública o la privada y qué puerto he de usar.

EDITO: Ahora me ha ocurrido algo muy curioso, he abierto el puerto 9923 (que es el puerto que usa mi programilla por defecto) y al intentar conectarme poniendo mi IP pública me sale el siguiente mensaje de error:

Project Project1.exe raised exception class ESocketError with message 'Asynchronous socket error 10053'. Process stopped. Use Step or Run to continue.'

Es curioso porque si no abro el puerto 9923 no sale ningún mensaje de error (aunque tampoco conecta).

Ayudadme por favor que parece que voy por buen camino, muchas gracias y un saludo.

Última edición por kakarotv5 fecha: 03-10-2007 a las 14:54:24.
Responder Con Cita
  #4  
Antiguo 03-10-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
PC1 IP:80.1.2.3
PC2 IP: 213.1.2.3

La PC1 llama a la PC2 por el puerto 9923. Lo que quiere decir que la PC2 debe tener el puerto 9923 abierto y un programa esperando comunicación.

PC1 IP:80.1.2.3 Port: 1000 (para salir elige un puerto al azar)
PC2 IP:213.1.2.3 Port 9923 esperando

PC1 IP:80.1.2.3 Port: 1000 -----> Port 9923 de PC2 IP:213.1.2.3

A menos que haya un Firewall que no deje salir paquetes (problema para PC1) o un Firewall que no deje recibir paquete por ciertos puertos (problema para PC2) no debería haber problemas.

También hay que decirle al router de PC2 (si no está en monopuesto) que todo lo que llegue para el puerto 9923 lo envía a la direccion interna de PC2 (normalmente 192.168.xxx.yyy o 172.26.xxx.yyy)
Responder Con Cita
  #5  
Antiguo 03-10-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Esto es sobre el error 10053
Cita:
Software caused connection abort.
An established connection was aborted by the software in your host computer, possibly due to a data transmission time-out or protocol error.
O el servidor (o un firewall) abortó la conección, o hubo un time-out.
Responder Con Cita
  #6  
Antiguo 03-10-2007
kakarotv5 kakarotv5 is offline
Miembro
 
Registrado: feb 2007
Posts: 162
Poder: 18
kakarotv5 Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
A menos que haya un Firewall que no deje salir paquetes (problema para PC1) o un Firewall que no deje recibir paquete por ciertos puertos (problema para PC2) no debería haber problemas.
A parte de esto que dices supongo que habrá que habrá que abrir el puerto 1000 en el PC1 y el puerto 9923 en el PC2. ¿Me equivoco?

Cita:
Empezado por duilioisola Ver Mensaje
También hay que decirle al router de PC2 (si no está en monopuesto) que todo lo que llegue para el puerto 9923 lo envía a la direccion interna de PC2 (normalmente 192.168.xxx.yyy o 172.26.xxx.yyy)
Esto no lo entiendo bien. ¿Se hace gestionando el router desde el navegador?

Gracias y un saludo.
Responder Con Cita
  #7  
Antiguo 03-10-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
En el PC1 no es necesario abrir el puerto 1000. Normalmente los Firewalls y los routers dejan salir por cualquier puerto, pero solo entrar por algunos (80 http, 21 ftp, etc.)

La segunda parte es los que se llama NAT.
- Supongamos tu router tiene la IP pública 80.1.2.3.
- Supongamos que tu pc tiene la IP privada 192.168.1.2.

Pues: debes entrar al router, ir a la parte de NAT y decirle:
Todo lo que entre desde el PUERTO 9923 hasta el PUERTO 9923 se lo mandas a la IP 192.168.1.2.

Nota: si está en monopuesto, todo esto no vale. Funciona como si guera un modem y todo lo que entra al router entra directamente a tu PC.
Responder Con Cita
  #8  
Antiguo 03-10-2007
kakarotv5 kakarotv5 is offline
Miembro
 
Registrado: feb 2007
Posts: 162
Poder: 18
kakarotv5 Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
En el PC1 no es necesario abrir el puerto 1000. Normalmente los Firewalls y los routers dejan salir por cualquier puerto, pero solo entrar por algunos (80 http, 21 ftp, etc.)
¿En vez del puerto 1000 puedo usar el 9923?

Mi idea es usar el mismo puerto tanto para el cliente como para el servidor.

Cita:
Empezado por duilioisola Ver Mensaje
Pues: debes entrar al router, ir a la parte de NAT y decirle:
Todo lo que entre desde el PUERTO 9923 hasta el PUERTO 9923 se lo mandas a la IP 192.168.1.2.
Tengo esto
Responder Con Cita
  #9  
Antiguo 03-10-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Del puerto por el que sale se encarta el sistema operativo. Lo que hace es ver el primero que tiene libre y usarlo.

Si quieres probarlo has lo siguiente:
- te conectas a una página (www.google.es por ejemplo)
sin cerrar el navegador haces lo siguiente en una consola (inicio-->ejecutar-->cmd) y escribes netstat o netstat -n.
En la columna de Direccion Local verás tu IP y por qué puerto está saliendo.
En la columna de Direccion Remota verás la dirección IP a la que estás conectado y el puerto.

Código:
C:\>netstat -n

Conexiones activas

  Proto  Dirección local        Dirección remota       Estado
  TCP    127.0.0.1:4378         127.0.0.1:4379         ESTABLISHED
  TCP    127.0.0.1:4379         127.0.0.1:4378         ESTABLISHED
  TCP    127.0.0.1:4380         127.0.0.1:4381         ESTABLISHED
  TCP    127.0.0.1:4381         127.0.0.1:4380         ESTABLISHED
  TCP    127.0.0.1:4386         127.0.0.1:4387         ESTABLISHED
  TCP    127.0.0.1:4387         127.0.0.1:4386         ESTABLISHED
  TCP    127.0.0.1:4394         127.0.0.1:4395         ESTABLISHED
  TCP    127.0.0.1:4395         127.0.0.1:4394         ESTABLISHED
  TCP    127.0.0.1:9999         127.0.0.1:2509         TIME_WAIT
  TCP    192.168.152.200:1797   209.85.137.18:80       ESTABLISHED
  TCP    192.168.152.200:1964   192.168.152.252:445    ESTABLISHED
  TCP    192.168.152.200:1966   192.168.152.252:3050   ESTABLISHED
  TCP    192.168.152.200:2511   66.249.91.83:80        ESTABLISHED
  TCP    192.168.152.200:4130   192.168.152.252:445    ESTABLISHED
  TCP    192.168.152.200:4443   66.249.91.19:80        ESTABLISHED
  TCP    192.168.152.200:4810   64.233.183.147:80      CLOSE_WAIT
Código:
C:\Documents and Settings\Duilio>netstat

Conexiones activas

  Proto  Dirección local        Dirección remota       Estado
  TCP    PC-Duilio:4378         localhost:4379         ESTABLISHED
  TCP    PC-Duilio:4379         localhost:4378         ESTABLISHED
  TCP    PC-Duilio:4380         localhost:4381         ESTABLISHED
  TCP    PC-Duilio:4381         localhost:4380         ESTABLISHED
  TCP    PC-Duilio:4386         localhost:4387         ESTABLISHED
  TCP    PC-Duilio:4387         localhost:4386         ESTABLISHED
  TCP    PC-Duilio:4394         localhost:4395         ESTABLISHED
  TCP    PC-Duilio:4395         localhost:4394         ESTABLISHED
  TCP    PC-Duilio:1797         mg-in-f18.google.com:http  ESTABLISHED
  TCP    PC-Duilio:1964         192.168.152.252:microsoft-ds  ESTABLISHED
  TCP    PC-Duilio:1966         192.168.152.252:3050   ESTABLISHED
  TCP    PC-Duilio:2511         ik-in-f83.google.com:http  ESTABLISHED
  TCP    PC-Duilio:4130         192.168.152.252:microsoft-ds  ESTABLISHED
  TCP    PC-Duilio:4443         ik-in-f19.google.com:http  ESTABLISHED
  TCP    PC-Duilio:4810         nf-in-f147.google.com:http  CLOSE_WAIT
Nota: netstat -n no traduce las direcciones. te muestea los numeros IP y los numeros de puerto.
- http = 80
- ftp = 21
- mg-in-f18.google.com = 209.85.137.18
Responder Con Cita
  #10  
Antiguo 03-10-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Creo que puede andar por ahí, pero no es NAT.

Creo que eso es para que de una dirección y un puerto dado se conecten a una dirección y un puerto especícico.

De todas formas debería funcionar si lo configuras bien.

El NAT es solo enviar lo que entre por un puerto enviarlo a una dirección especificada (por ese mismo puerto)

Para que leas un poco más sobre el tema:
http://www.monografias.com/trabajos2...ctor-nat.shtml
Responder Con Cita
  #11  
Antiguo 03-10-2007
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 19
Kipow Va por buen camino
Precisamente lo que necesitas hacer es que todas las peticiones al puerto de tu aplicacion sean direccionadas a la ip local (donde se ejecuta el server). eso lo debes de hacer directamente en tu router. aca puedes darte una idea de como hacerlo www.portforward.com

Slds
Responder Con Cita
  #12  
Antiguo 03-10-2007
kakarotv5 kakarotv5 is offline
Miembro
 
Registrado: feb 2007
Posts: 162
Poder: 18
kakarotv5 Va por buen camino
Al final lo he conseguido

Al final lo he conseguido.

He conseguido establecer una comunicación entre dos ordenadores que sólo están conectados a través de Internet, únicamente he hecho lo siguiente:

En el ordenador PC1 se ejecuta el servidor, que lo único que hace es escuchar por el puerto 9923. He abierto el puerto 9923 en el router de este PC.

Luego en el ordenador PC2 se ejecuta el cliente, se pone la IP pública o real del PC2 en el Edit que está a la derecha del Label "Computadora" y luego se escribe lo que se quiera en el Memo de arriba como si fuera un chat. También he abierto el puerto 9923 en el router de este PC.

El servidor recibirá las cadenas de texto inmediatamente.

De esta forma la comunicación es unilateral, por lo que además he ejecutado en el PC1 el cliente y en el PC2 el servidor y he realizado la misma operación, con lo que se consigue una comunicación bilateral estilo chat.

Me doy por satisfecho, sólo tengo que mejorar un poco el programa y seguir trasteando para conseguir mis propósitos.

Al final no he tenido que configurar los routers de modo que todo lo que les llegue por el puerto 9923 lo envíen a la direccion interna de los PC´s.

Supongo que será porque están en monopuesto.

Muchas gracias y un saludo.
Responder Con Cita
  #13  
Antiguo 04-10-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Felicitaciones!

Cuando tengas una aplicación interesante pasate por el club y muéstranosla.

También podrías hacer un pequeño ejemplo de un "micro-mini-chat" y ponerlo en la parte de trucos, por si alquien quiere aprender a hacerlo.
Responder Con Cita
  #14  
Antiguo 20-11-2007
kakarotv5 kakarotv5 is offline
Miembro
 
Registrado: feb 2007
Posts: 162
Poder: 18
kakarotv5 Va por buen camino
¿Dónde podría encontrar adicinal sobre sockets para Delphi?

Busco en el Wiki de esta página pero nunca encuentro nada.

Saludos.
Responder Con Cita
  #15  
Antiguo 20-11-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Aqui hay un ejemplo sencillo de un chat, no me acuerdo si lo saque de los ejemplos del delphi o de donde lo saque, pero funciona.
Saludos

Última edición por Caral fecha: 24-01-2008 a las 22:35:13.
Responder Con Cita
  #16  
Antiguo 20-11-2007
kakarotv5 kakarotv5 is offline
Miembro
 
Registrado: feb 2007
Posts: 162
Poder: 18
kakarotv5 Va por buen camino
Gracias, le echaré un vistazo.

Por cierto Caral, hace unos días me lei un tutorial que dejaste en el Wiki, se llama Conectar Access Ado, es un gran tutorial y me ayudó mucho. Sigue así.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Comunicacion en red (DDE / Sockets) mxoscar Varios 1 20-07-2007 08:48:05
Que estoy haciendo Mal esimon SQL 4 04-07-2006 21:55:25
Haciendo un Sweep AMINOA2R Firebird e Interbase 5 07-07-2005 15:00:36
comunicacion entre sockets Brando Internet 5 27-10-2004 17:20:42
...haciendo negocios... Jure Humor 0 11-10-2004 23:38:24


La franja horaria es GMT +2. Ahora son las 23:34:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi