Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Haciendo un sistema de comunicación por sockets sencillito (https://www.clubdelphi.com/foros/showthread.php?t=48736)

kakarotv5 03-10-2007 00:30:03

Haciendo un sistema de comunicación por sockets sencillito
 
1 Archivos Adjunto(s)
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.

poliburro 03-10-2007 03:01:37

no necesitas nada adicional si estás directamente conectado a internet.

en el campo de host, pornes tu ip de internet y listo :)

kakarotv5 03-10-2007 13:27:22

Cita:

Empezado por poliburro (Mensaje 235744)
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.

duilioisola 03-10-2007 15:03:58

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)

duilioisola 03-10-2007 15:06:59

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.

kakarotv5 03-10-2007 15:29:21

Cita:

Empezado por duilioisola (Mensaje 235816)
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 (Mensaje 235816)
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.

duilioisola 03-10-2007 15:43:08

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.

kakarotv5 03-10-2007 16:01:34

Cita:

Empezado por duilioisola (Mensaje 235832)
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 (Mensaje 235832)
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

duilioisola 03-10-2007 16:38:02

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

duilioisola 03-10-2007 16:45:27

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

Kipow 03-10-2007 19:38:00

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

kakarotv5 03-10-2007 21:57:20

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.

duilioisola 04-10-2007 08:55:35

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.

kakarotv5 20-11-2007 02:44:33

¿Dónde podría encontrar adicinal sobre sockets para Delphi?

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

Saludos.

Caral 20-11-2007 02:58:32

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

kakarotv5 20-11-2007 14:24:50

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.


La franja horaria es GMT +2. Ahora son las 05:43:03.

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