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!

david duarte 26-09-2005 17:39:27

ok, Muchas gracias.

ya me pude conectar y fue por lo que me dijiste, baje el socketserver de la pagina de borland y por lo que veo esa version es la mas nueva y yo estoy trabajando con delphi 5, corri el que viene con esa version y tadaaaa!!!! como magia me aparecio el nombre del servidor y la propiedad coneccted esta en true, ahora voy a hacer las pruebas de mandar alguna cosa al servidor.

Muchas gracias, no sabes como te lo agradezco.

Y en caso de que tengo alguna otra duda, espero que me puedas ayudar...
Thanx

david duarte 26-09-2005 17:45:16

y ahora, ya deberia de funcionar, para agregar y quitar datos de las tablas es normal, verdad??

con el applyupdates. insert, append... etc..

Cómo te sientes hoy?

david duarte 26-09-2005 18:03:55

sip, ya hice la pruebaa y si funciona asi, si me inserto los datos, Oye y abusando de tu amabilidad, en caso de que tenga varios clientes, todos se pueden conectar por el mismo puerto?? o como funcionaria en ese caso???

Gracias.

jmariano 26-09-2005 18:34:09

Pues sip, es más, si no pudieran conectar a través de ese puerto, entonces, no funcionaría (ya que socketserver espera oir las peticiones de los clientes a través de dicho puerto), aunque puedes configurar socketserver para que utilice otro puerto si el actual estuviera bloqueado (lo que te conllevará a hacer modificaciones en los componentes de conexión del Cliente para especificar el nuevo puerto. En estos casos, lo mejor es tener un .ini a parte con la configuración de la conexión y cargar los datos al ejecutar el Cliente). Otra cosa, no se si te habrás fijado pero socketserver permite, además, saber que clientes están conectados (fíjate en la pestaña "Users").

Saludos!

david duarte 26-09-2005 19:45:14

sip, lo verifique desde el momento que me pude conectar, y eso es muy bueno, tambien puedes hacer un historial ( en un archivo) para saber quien estuvo o esta conectado, y si pasa algo malo, pues ya sabe quien lo hizo (bueno, la computadora desde la que hicieron. =) Muchas gracias por tu ayuda.

En el borland socket server, tengo dados de alta 3 puertos.

Y como saber si el puerto esta bloqueado??

Gracias

Cómo te sientes hoy?

david duarte 29-09-2005 16:06:21

Hola!!!

En la parte del cliente, ahora me marca un error en el archivo val : "xxxx.val is out of date", y la verdad no he encontrado como recuperar o reparar ese archivo, y no se que hacer.

Gracias..

david duarte 05-10-2005 16:58:19

Hola!!!!

Otra vez yo, oigan, cuando quiero conectar el cliente al servidor de sockets, me sigue marcando ErrorSocket on 'API' connected (10061 ). Alguien sabe a que se debe???

ya le intente cambiar muchas veces, pero no funciona nada

Se supone que ese error te lo marca cuando no te puedes conectar al servidor, pero no entiendo porque.

Me urge muchisismo.Muchas Gracias

Lo mas raro es que si me conecto desde la misma computadora donde esta el servidor, no me marca ningun error.

dec 05-10-2005 17:06:58

Hola,

A través de esta búsqueda en Google llegué al siguiente Hilo de estos Foros. La referida búsqueda obtiene resultados únicamante en español: esta otra búsqueda los proporciona también en otros idiomas. Acaso pueda servirte de algo. ;)

david duarte 05-10-2005 17:27:47

ok, muchas gracias, ya habia visto esos hilos y buscado en google, pero no encuentro porque. voy a seguir buscando a ver si encuentro algo. Gracias.

Cómo te sientes hoy??

jachguate 05-10-2005 18:29:51

Se que es algo tarde, y no se si alguien lo mencionó ya antes, pero al usar midas, también se tendrá que pagar una licencia (si un data packet viaja de una máquina a otra por cualquier medio).

Recomiendo leer:

http://bdn.borland.com/article/0,1410,20870,00.html

Hasta luego.

;)

david duarte 05-10-2005 18:35:52

Y entonces como puedo hacer mi aplicacion para que no ocupe licencias???

Estoy cambiando el sistema para usar sockets, pero de todos modos utilizo el ClientDataset.

Como le puedo hacer??
Este sistema se va a utilizar por un tiempo definido ya que se va a migrar a Visual Basic( gracias a la empresa =( )

Gracias.

Cómo te sientes hoy?

david duarte 05-10-2005 23:39:55

oigan!!!!

y cuando utilizo sockets, el sistema puede funcionar para varios dominios, o es universal, con esto me refiero a que si es como el visibroker, que no importa si perteneces a un dominio o no.

Gracias

Hice la prueba de mi sistema con las computadoras de mi dominio, y todas accesan y se registran en el borland server socket, pero creo que en las que no son del dominio no entra, me marca el error ESocketError del api 'connect' 10061.

No se si sea por esa cuestion, solamente estoy suponiendo.

Si alguien sabe, agradeceria que me lo hicieran saber

Acabo de Investigar y por lo que vi, los socket funcionan por dominios, se puede declarar un socket que no tenga dominio( que sea global o general) y se pueda utilizar todos los dominios???

Gracias.

Cómo te sientes hoy?

Hola!!!!!!!!!!!1 alguien me puede ayudar????

hice un proyecto de prueba y lo corri en otras computadoras que no son del dominio y si se conectaron, pero el proyecto que ya tenia(lo tenia en Visibroker), simplemente lo pase a sockets y no me deja conectar desde las computadoras de otro dominio.

Gracias.
Cómo te sientes hoy?

lazaro 06-10-2005 20:54:29

Necesito Saber Como
 
Hola ley unos de tus mensaje donde dices que hiciste una aplicacion y utilizaste corba para la comunicacion cliente servidor. A mi me pidio un maestro de la universidad hacer una aplicacion que utilize cliente servidor para la manipulacion de bases de datos mi sistema ya esta hecho solo necesito saber como se hace la comunicacion para actualizar, consultar, modificar dichas bases de datos podrias ayudarme pero no conosco corba o como se crean componentes Gracias

david duarte 07-10-2005 15:08:46

Oye primero necesito ver como tienes tu sistema??
ya esta en corba o en que lo hiciste??
o como haces la comunicacion cliente/servidor??

Cómo te sientes hoy??

david duarte 07-10-2005 15:13:04

Oigan!!!!

Alguien sabe cuantas conexiones por medio de sockets puede aceptar el servidor antes de que el rendimiento de la red baje o en caso de que se quede pasmada???

No se si hice bien la pregunta??

Gracias
Cómo te siente hoy?

jachguate 07-10-2005 18:52:50

Cita:

Empezado por david duarte
Acabo de Investigar y por lo que vi, los socket funcionan por dominios

Esto no es cierto. Tengo instalaciones donde máquinas (o usuarios) que no están en el dominio pueden entrar a un socket server sin problemas.

El prerrequisito es que haya transporte de red (pertenezcan a la misma subred tcp/ip o tengan una pasarela de red entre las distintas subredes).

Hasta luego.

;)

david duarte 11-10-2005 19:00:04

Gracias.

Fijate que cosas pasan.

Primero que nada, hice una pruebita de conectar las maquinas con sockets, era un programa que nada mas se conectaba y guardaban unos datos en la base de datos, y ese programita lo corri en la computadora que les digo que no corre el otro, y si se conecto sin problemas, entonces como si se conecto, le hice cambio a mi otro sistema que ya esta mas grande, en ese uso clientdatasets, y como 20 ventanillas, y cuando corro ese sistema, no me deja conectar, me manda el error del 'api' connected 10061, quien sabe porque???, y nada mas son en esas maquinas(son 2), esta raro el error

Gracias.
Cómo te sientes hoy?


La franja horaria es GMT +2. Ahora son las 06:01:09.

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