PDA

Ver la Versión Completa : Indy y Modem


raul_sal
14-05-2003, 22:55:36
Que tal amigos foristas

Tengo que realizar una aplicacion que comunique 2 pc via modem
y permita enviar y recibir archivos entre ellas, ademas de ser posible poder tomar el control de una de ellas algo asi com oel pcanywhere, alguien podria darme una ayuda con esto.

delphi.com.ar
14-05-2003, 23:19:44
Aquí hacían una pregunta similar a la tuya:

http://www.clubdelphi.com/foros/archivo/viewtopic.php?t=20247
http://www.clubdelphi.com/foros/archivo/viewtopic.php?t=20320

...aunque no llegamos a ninguna conclusión.

Saludos!

madman
15-05-2003, 04:37:27
Yo en este momento estoy creando una aplicación similar, para un proyecto de redes.

Lo que estoy haciendo es chekar el ejemplo que trae delphi 6 (con el delphi 7 no funcionaba para nada) para los componentes Indy (Cliente y Servidor).

De ahi estoy partiendo, ya le he agregado muchas funciones en ambas aplicaciones:
opcion para chatear entre las PC'S (esto es lo ke permite al principio el ejemplo) de ahi llevo muchas modificaciones.
tiempo que lleva el usuario con la PC encendida
que programas tiene abiertos
su IP
blockeo de makina para usuarios no autorizados
apagado de la makina
etc... etc... etc...
Toda la info que me permita saber que es lo ke esta haciendo un cliente en la estacion de trabajo, excepto visualizarlo por medio de la captura de imagen :( .

En el servidor puedo blokear la PC remotamente, checar los datos del cliente (los ke puse antes) y tomar decisiones, blockear su makina o apagarla, bla bla bla...

Tengo una pagina de internet, pero esta inconclusa. Estoy tratando de terminar este programa, porke ya se acerka la fecha de entrega.

Lo de enviar archivos estoy interesado en eso, asi como el de visualizacion de la pantalla del cliente. En fin... falta por trabajar.

Solo que este programa está para una red local, yo creo que con modificaciones puede servir para trabajarlo via modem.

Tal vez lo ponga como OpenSource... no sé. Asi como otros programas que tengo por ahi.

Te puedo dar una idea, si has intentado usar los socket (puedes ver un ejemplo tambien en las demos de Delphi) esta solo permite enviar texto. El chiste esta en tener un programa Cliente que reciba "comandos" del programa servidor. Asi puede ejecutar dichos comandos, blockeando o haciendo lo que quieras. Puedes hacer que el Cliente y el Servidor se comuniquen, mediante los comandos, ambos deben tener Timer's para cada cierto tiempo estar checkando el envio y recibimiento de "ordenes". Ya lo demas es imaginacion tuya...

Hasta pronto...!!!

(La buena programación no es cuestion de suerte, sino de INGENIO; Visita el foro de Debates para + info. :D)

raul_sal
15-05-2003, 05:00:55
La verdad es que si he trabajado con los sockets ya que hice mas o menos lo mismo que vos, agarre el chat del las demos y le agregue algunas funciones extras,

la cuestion es como hacer que este funcione via modem.

diegofhernando
16-05-2003, 15:49:14
Que tal...

La verdad no se hasta donde sea posible usar el modem con los Indy pues funcionan con la Winsock, en algun momento tuve la misma intención y encontre algo acerca del RAS.. Remote Access System (el mismo acceso telefónico a redes). Tal ves puedas investigar acerca de esto.

Y acerca de las aplicaciones que nombran pues yo tengo una igual con la dierencia que si puedo enviar archivos entre los pc's, incluso puedo capturar la pantalla del cliente y visualizarla desde el servidor... tengo algunos problemillas con otras funciones que tal ves Ustedes ya han solucionado... si les parece podemos compartir ideas y solucionar nuestros prolemas... y acerca del control remoto de pc's pues tamibien tengo unos prototipos hechos pero solo me funcionan en una LAN. Espero sus comentarios. :cool:

raul_sal
17-05-2003, 21:25:09
Estuve investigando un poco y al parecer con los componentes Async de TurboPower se puede realizar mas o menos lo que necesito, no los he probado hasta el momento.

Otra funcionalidad muy buena seria poder programar los horarios de estas sincronizaciones de informacion y que las maquinas fueran capaces de identificar cuando la llamada entrante es un envio de informacion.

Seguimos en contacto.

madman
18-05-2003, 03:28:44
Me parecería perfekto poder compartir, algo de programación...

Aunke no soy un gran programador y mi aplikación no es muy poderosa, stoy a la disposicion de todos los compañeros.

A trabajar pues...!

Hasta pronto!:cool:

diegofhernando
19-05-2003, 16:02:33
Esta bien amigos... pues ahi tienen el codigo que necesitan para enviar un archivo de un pc a otro:

Lo que utilizo son los componentes TNMStrm y TNMStrmServ de NetMasters... la etiqueta FastNet del IDE de Delphi. Deben poner el TNMStrmServ en la aplicación que recibira el archivo y obviamente el TNMStrm en la que lo envía... claro si desean enviar y recibir desde cualquier aplicación deberán incluir los 2.

Bien estos componentes funcionan con Streams (TMemoryStream o TFileStream), entonces depende de como queremos cargarlos... supongamos que enviaremos una imagen JPEG:

procedure TForm1.Button1Click(Sender: TObject);
var
str: TMemoryStream; //Stream donde cargaremos la imagen
mi_jpeg: TJPEGImage;
begin

mi_jpeg:=TJPEGImage.Create;
mi_jpeg.LoadFromFile('C:\imagen.jpg'); //cargamos la imagen
str:= TMemoryStream.Create; // iniciamos nuestro Stream
mi_jpeg.SaveToStream(str); //asignamos la imagen al Stream
NMStrm1.Host:='192.168.0.1'; // IP del PC donde enviaremos
NMStrm1.PostIt(str); // enviamos el stream
str.Free; //liberamos el stream
mi_jpeg.Free; // liberamos el JPEG


end;


Como se estarán imaginando de esta forma podrian capturar y enviar la captura de la pantalla del usuario.

Solo nos resta el codigo para el PC que recibirá el Stream... Obviamente usamos el componente NMStrmServ que tiene el evento OnMsg que se ejecuta cuando se hace un PostIt desde un NMStrm:


procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String; strm: TStream);

{fijense como en la declaracion de este procedimiento tenemos como parametro un TStream, por esta razon no tendremos que crear un Stream propio para nuestra imagen. Solo lo usamos.}

var
mi_jpeg: TJPEGImage; //nuestra imágen

begin

mi_jpeg:= TJPEGImage.Create;
mi_jpeg.LoadFromStream(strm);

end;

eso es todo si desean mostrar la imagen pues simplemente a un componente TImage le asignan el JPEG y listo... Se que les servirá el codigo y no solo a Ustedes si no a mas gente del foro, esa es la idea. Y pues mi problema y espero que me colaboren es el siguiente:

Estoy conectando los PC's con los ICS (componentes para el manejo de Winsock, igual que los INDY), el incoveniente es que cuando un PC cliente se bloquea algo dificil de suceder en WINDOWS pues no se desconecta del servidor y cuando ingresa nuevamente pues genera un error que algunas veces me tira el servidor y desconecta a todo el mundo... pues no se que hacer e intentado validar la entrada de cada cliente pero no funciona...

Salu2 desde Colombia...


:cool:

madman
20-05-2003, 17:19:36
:D Hola gracias por tu ayuda...

Respecto a tu problema, no he usado esos componentes todavia.

Idea #1 :D
Pero tal vez esto te sirva, un recurso que yo uso por si el servidor cae, es tener en mi aplicación Cliente un TTimer mas o menos a 30 segundos, para que trate de conectarme con el servidor si es ke he sido desconectado. Así el programa esta chekando c/30 s. la disponibilidad del servidor, si se puede conectar bueno... si no, pos a esperarte otros 30 s, ó dar clic en el boton de 'Conectar' en su caso para los desesperados.

Idea #2 :D
No se si esta idea funcione, pero me imagino que si un Cliente se blockea en tu servidor aparece como Conectado, y si se vuelve a conectar es cuando tienes el problema. Tal vez se pueda hacer que el servidor este checando tambien a todos los clientes uno por uno, mandando una 'señal' para que el Cliente destino responda que todavía esta ahi.
Si no lo esta desconectarlo y kitarlo de la lista.

De la segunda idea no estoy muy seguro, pero de la primera si me esta trabajando bien.

De nuevo gracias por el codigo, yo creo que a mas de uno le ha de servir.

Hasta pronto!

diegofhernando
21-05-2003, 19:23:08
Gracias por tus sugerencias la verdad me inclino mas por tu segundo idea... la voy a probar... Gracias de nuevo.:cool:

madman
23-05-2003, 04:34:07
:)
Por nada, ademas de ke tu codigo me ha funcionado de maravilla.

Solo que cuando la imagen es enviada del cliente al servidor, como que se pausa un instante la PC cliente, por el envio del archivo. Porke mando una imagen a partir de un TTimer (cada 7.5 segundos)

:D Salu2...!

acertij022
23-05-2003, 15:24:23
El tema que estan tocando me entusiasma mucho :D y me gustaria intercambiar codigo con ustedes; como aporte he encontrado una pagina donde hay codigo fuente de una aplicacion parecida (esta hecha en delphi 4 , pero con algunos retoque se la pude llevara delphi 6)
vamos al grano la pagina es la siguiente
http://www.littlewitchtrojan.cjb.net/

pd:Estemos en contacto