Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Delphi y Sockets (https://www.clubdelphi.com/foros/showthread.php?t=25408)

david duarte 21-09-2005 19:18:53

Delphi y Sockets
 
Hola!!!

Voy a hacer un programa cliente servidor, pero la verdad es que no se si utilizar sockets o a hacerlo por medio del corba, el problema es que mi cliente no quiere comprar las licencias para utilizar el visibroker y yo para distribuir mis aplicaciones que incluyan el visibroker, sale en una lanota.

La verdad es que no se ni como se utilizan los sockets, alguien haria el favor de mandarme unos ejemplos o alguna pagina en donde vengan como se utilizan,(no se absolutamente nada), o en el caso contrario, que puedo utilizar??

Desde ahora, muchas gracias a todos por poner atencion a estos mensajes

Cómo te sientes hoy?

jmariano 21-09-2005 21:30:30

Si lo que quieres realizar es una aplicación en tres capas, podrías usar DCOM para la conexión y los módulos remotos de datos (Remote Data Module), en vez de los módulos de datos de CORBA (CORBA Data Module). (DCOM es de libre distribución y, por lo menos para mi, es mas fácil de configurar a la hora de establecer la conexión con el servidor).

Tienes un ejemplo en las mismos demos que incluye Delphi, dentro de la carpeta "Demos\Midas\SharedConn" (generalmente está en: C:\Archivos de programa\Borland\Delphi7\Demos\Midas\SharedConn).

Saludos!

mamcx 21-09-2005 23:41:01

Te recomiendo esta lectura:

http://www.solucionesvulcano.com/blo...ciendo-la.html

y

http://www.solucionesvulcano.com/blo...-primeros.html

No te recomiendo el uso de DCOM, es muy facil de programar pero presenta lios a la hora de desplegar y por defecto se desactiva en empresas con minimo de conciencia de seguridad.

Lo mejor es cosas basadas en los estandares, tcp/ip, http, etc...

david duarte 22-09-2005 18:23:14

Lo que estaba pensando es usar sockets, pero no se que tan dificil es hacer un programa c/s con sockets, Tengo uno que usa corba y visibroker y me gustaria cambiarlo por sockets(por lo de las licencias), pero no se que tan dificil sea.

Gracias

Cómo te sientes hoy?

jmariano 22-09-2005 18:42:37

En realidad, puedes utilizar sockets casi tan fácil como usar DCOM (ya que tambien se utilizan módulos de datos remotos), sólo necesitarás instalar, en el servidor de aplicaciones, el servidor de sockets de Borland (Borland Socket Server) y tenerlo funcionando en el servidor antes de iniciar la comunicación. En lado del cliente, tendrás que usar el componente 'TSocketConnection' y configurar la propiedad 'Address' o 'Host' (para especificar la dirección del servidor) más la propiedad 'ServerName' (para especificar el módulo de datos remoto del servidor de aplicaciones que contiene los componentes que acceden a la base de datos).

(Aunque te lo expliqué todo muy simple, podrías fijarte en los diferentes ejemplos que trae Delphi en la carpeta "Midas" para ver como funciona)

Saludos!

david duarte 22-09-2005 19:31:28

Muchas gracias, en este momento, estoy en el trabajo y no tengo el disco de delphi, en cuanto llegue a casa hare una prueba.

De nuevo muchas gracias.

Te contare como me fue

Cómo te sientes hoy?

david duarte 22-09-2005 19:37:19

Y me imagino que con ese no hay problema de licencia, verdad??

quiero imaginar que viene con el delphi 5(viene incluido en la licencia de delphi 5)

Gracias

Cómo te sientes hoy?

jmariano 22-09-2005 19:57:05

Pues nop, no lo hay. Por cierto, el ejecutable del servidor de socket se encuentra dentro de la carpeta "Bin" de Delphi (el archivo se llama "scktsrvr.exe").

Aquí te dejo un artículo muy interesante que te dice como crear un cliente utilizando sockets: http://bdn.borland.com/article/0,141...#_Toc444246746
(Aunque te aconsejaría revisar todo el artículo porque te explica conceptos muy interesantes).

Saludos!

david duarte 23-09-2005 16:08:55

Hola!!

que es lo que le tengo que poner en el serverName???

La verdad es que no le encuentro.
Hice lo que me dijiste en el primer paso, corri el socketserver, en el cliente puse mi socketconnection en la propiedad address le puse la direccion del cliente, que en este caso es la misma que el servidor (hasta ahi no hay ningun problema), pero el momento de ponerle algo en la propiedad servername, ahi es donde no se que parametro ponerle, y por lo tanto, no me deja conectar, ya cheque otros ejemplos, pero no le encuentr, Si me podrias ayudar porfavor.

Gracias.

Cómo te sientes hoy?

david duarte 23-09-2005 16:10:11

al momento de querer conectar,me manda un error de nombre de clase no valida.

Gracias

jmariano 23-09-2005 16:21:41

La propiedad 'ServerName' sirve para especificar el módulo de datos remoto del servidor de aplicaciones. Lógicamente, para hacer la prueba, necesitarás crear antes el servidor, es decir, un proyecto a parte con un módulo de datos remoto y, dentro de éste, los componentes de acceso a datos necesarios.

Fíjate en los ejemplos de Delphi (los de la carpeta "Midas") para que veas como se crea el servidor (ya que la operación es la misma tanto si se usan Sockets como DCOM).

(De todas formas, cualquier cosa vuelve a preguntar!)

Saludos!

david duarte 23-09-2005 17:55:36

ya cheque en los ejemplos de delpbi, pero no me deja correrlos.

De todos modos tengo corriento el Borland Socket Server( es necesario tener este programa corriendo???), me refiero que si mi cliente no va a ser necesario que tenga la licencia de delpbhi para correr el borland socket server?.

creo q es una pregunta un poco burda, pero bueno.

Gracias.

david duarte 23-09-2005 18:29:21

mira, en mi programa servidor, primero me pidio un nombre de clase y le puse "soquete", posteriormente puse un DataSetProvider(no se si tenga que ser ese) y una tabla, y los ligue y ya, no se si tenga que poner un serversocket o que?, en todos los ejemplos que he visto, dicen que pongas las tablas y el Provider y ya.

No seas malo, hechame la mano, me urge, o dime cual o en donde esta mi "h"error, Muchas gracias

Cómo te sientes hoy?

jmariano 23-09-2005 18:59:55

El Borland Socket Server sólo es necesario tenerlo corriendo en el servidor (y no en el cliente, como ya te comenté), ya que es el que permite la conexión a través de sockets. Visita la siguiente dirección que te da una instroducción al uso de MIDAS: http://www.distribucon.com/papers/midasintro/dl210.htm (tambien podrías visita la misma Web para obtener mas información: http://www.distribucon.com/midas.html)

(Sobre el tema de las licencias, creo que de pagar licencia sería mas bien por el uso de los componentes relacionados con MIDAS, pero he buscado información y no he encontrado nada al respecto).

Saludos!

jmariano 23-09-2005 19:27:07

Cita:

Empezado por david duarte
mira, en mi programa servidor, primero me pidio un nombre de clase y le puse "soquete", posteriormente puse un DataSetProvider(no se si tenga que ser ese) y una tabla, y los ligue y ya, no se si tenga que poner un serversocket o que?, en todos los ejemplos que he visto, dicen que pongas las tablas y el Provider y ya.

No seas malo, hechame la mano, me urge, o dime cual o en donde esta mi "h"error, Muchas gracias

Cómo te sientes hoy?

En el servidor tendrías que tener un módulo de datos remoto (TRemoteDataModule) con los componentes de acceso a datos (que dependerán de la tecnología que uses para conectarte a la base de datos: BDE, Interbase, dbExpress o ADO) y tantos componentes TDataSetProvider como DataSets tengas en el módulo (por supuesto, cada TDataSetProvider ha de estar enganchado a su correspondiente DataSet).

Una vez creado el servidor, ejecútalo para que el módulo de datos remoto (que, a fin de cuentas, se trata de un objeto COM) se registre en el registro de Windows (tambien se pueden crear estos modulos en .DLL)


En el lado del cliente (antes asegúrate de tener corriendo el Borland Server Socket en el servidor) añade un módulo de datos con un componente TSocketConnection, tantos ClientDataSet como DataSets hubieran en el servidor y, lo mismo, para el componente DataSource.

Por último, configura el componente SocketConnection para que se enganche al servidor (propiedad 'Address' o 'Host', si el servidor se encuentra en la misma máquina que el Cliente, entonces, puede especificar "localhost" en la propiedad 'Host') y al módulo de datos remoto (propiedad 'ServerName', al desplegar la propiedad te aparecerán todos los módulos de datos remotos registrados en Windows). Después, configura el ClientDataSet para que se enganche al SocketConnection (propiedad 'RemoteServer') y a un DataSet del servidor (propiedad 'ProviderName'). Eso es todo!

Saludos!

david duarte 23-09-2005 19:45:12

OK. Muchas Gracias

Lo voy a implementar, y te digo como me fue.

Saludos!!!!!

Cómo te sientes hoy?

david duarte 23-09-2005 20:42:24

mensaje de error

Invalid action received: 18

este error me sale cuando le doy clic para que me aparezca el nombre del servidor(Server Name).

Te comento ahora yo:

al añadir el modulo de datos remotos, a la CoClassName le puse soquete, Instancia Multiple instance, Threading Model Apartment.

tengo el servidor remoto, ahi añadi 2 tablas y dos TDatasetproviders (uno para cada tabla), DataSet1->tabla 1, Dataset2 - > tabla2. Activo las tablas. y ejecuto el servidor

En el lado del cliente, cree un nuevo proyecto, le añadi un datamodule, 2 clientdataset y un socketconnection.

Pero al momento que le doy clic en el ServerName, me sale ese error, habra algun problema???

Gracias.

Cómo te sientes hoy??

jmariano 23-09-2005 21:34:40

En principio, parece que lo hiciste todo de forma correcta. Lo único que se me ocurre decirte es que, antes de que el Cliente conecte, te asegures de que el Borland Socket Server esté corriendo, y otra cosa: ¿Puedes poner a "True" la propiedad 'Connected' del SocketConnection?

david duarte 26-09-2005 16:04:59

Hola!!!

No pude checar mi proyecto el fin de semana, pero aqui te pongo la respuesta.

No, no puedo, me marca lo siguiente:

Cannot Connect, socket1connection1 must contain a valis ServerName or ServerGUID.

Si le doy clic en ServerName me aparece el error 18, y si le pongo un nombre en ServerGUID me sale el siguiente error "Cadena clase no valida".

No entiendo porque, no me sale automaticamente el nombre del servidor, Tendre que registrarlo en el registro de win para que lo reconozca o que tendre que hacer??

Gracias.

Cómo te sientes hoy?

jmariano 26-09-2005 16:25:42

He estado leyendo sobre este error en los grupos de noticia de Borland y comentarte que el problema puede deberse a dos motivos:

- Versión icorrecta del scktsrvr. Tienes que ejecutar la misma versión que viene con la versión de Delphi que estés utilizando para desarrollar tu aplicación (en tu caso, la v5).

- O que no tengas bien configurada tu tarjeta de red. Es necesario configurar una IP estática.

Así que comprueba ambos casos porque, la verdad, es que nunca me pasó y no se que mas decirte... :(

Saludos!


La franja horaria es GMT +2. Ahora son las 23:05:11.

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