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 25-05-2006
nenufer nenufer is offline
Miembro
 
Registrado: dic 2005
Posts: 90
Poder: 19
nenufer Va por buen camino
Question TidTcpServer,TidTcpClient

Buenos dias!!!
Vereis tengo que hacer una pequeña aplicacion y estoy un poco estancada. Tengo que pasar archivos de un ordenador a otro por Tcp.
Un ordenador(servidor) lanza una pregunta por la red:¿Ey tienes archivos? y manda tambien su direccion Ip y los ordenadores(clientes) que esten activos y tengan los archivos se los mandan al primero. Se que tengo que utilizar TidTcpServer y TidTcpClient y rellenar la propiedad de defaultPort y la de host la que me llegue. Pero no se por donde empezar,ni como se mandan mensajes por la red... En mi busqueda por el foro si he encontrado algo se me ha pasao por alto. Ya que es verdad que no tengo ni idea.

Si alguien pude ayudarme, gracias de antemano

Última edición por nenufer fecha: 25-05-2006 a las 13:53:08.
Responder Con Cita
  #2  
Antiguo 25-05-2006
Avatar de Sotrono
Sotrono Sotrono is offline
Miembro
 
Registrado: abr 2004
Ubicación: Buenos Aires - Argentina
Posts: 396
Poder: 21
Sotrono Va por buen camino
Hola, que versión de los componentes Indy usás??.
Porque en la página de los mismos tenes un ejemplo de un chat tcp (es para la version 9).

Bytes!!
Responder Con Cita
  #3  
Antiguo 25-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por nenufer
Un ordenador(servidor) lanza una pregunta por la red:¿Ey tienes archivos? y manda tambien su direccion Ip y los ordenadores(clientes) que esten activos y tengan los archivos se los mandan al primero.
¿A que te refieres con "lanzar una pregunta por la red"? TCP es un protocolo orientado a la conexion, solo puede comunicarse con un equipo a la vez, no puede mandar un mensaje a todos los equipos de la red al mismo tiempo. Quiza lo que estes buscando no sea TCP sino UDP. El protocolo udp si permite mandar un mensaje a toda la red que sera recibido por todos los equipos que esten escuchando.

Yo lo que haria, por ejemplo, seria mandar un mensaje udp usando la direccion de broadcast, dentro del mensaje mandaria mi ip (no seria necesario, pero asi es mas sencillo). Los equipos que estuvieran escuchando obtendria la ip del equipo que "quiere" archivos y se los mandarian, por ejemplo, usando TCP.

No se si te ayude o te lie todavia mas
Responder Con Cita
  #4  
Antiguo 25-05-2006
nenufer nenufer is offline
Miembro
 
Registrado: dic 2005
Posts: 90
Poder: 19
nenufer Va por buen camino
Gracias a los dos por contestar

Buenas!! A sotrono decirle que utilizo version 9. Me e bajao el manual, buscare el ejemplo que me has dicho para tener una idea, muchas gracias

Y a seoane me has dejao las cosas un poco mas claras para empezar(eso es lo que buscaba). Udp ya habia utilizado asi que algo ya se, solo me falta los Tcp. Muchas gracias tambien
Responder Con Cita
  #5  
Antiguo 26-05-2006
nenufer nenufer is offline
Miembro
 
Registrado: dic 2005
Posts: 90
Poder: 19
nenufer Va por buen camino
Smile Buenos dias otra vez

Cita:
Empezado por seoane
Yo lo que haria, por ejemplo, seria mandar un mensaje udp usando la direccion de broadcast, dentro del mensaje mandaria mi ip (no seria necesario, pero asi es mas sencillo). Los equipos que estuvieran escuchando obtendria la ip del equipo que "quiere" archivos y se los mandarian, por ejemplo, usando TCP.
Veras estoy aqui intentandolo y la verdad es que ya no se ni por donde cogerlo, ya que cuando use udp,era udpserver y no tenia client.
Te comento mis dudas:

El udpServer: Es el que tiene los archivos? porque es el que tiene que leer el mensaje que le mandan,no?udpclient no tiene evento para leer.

El udpClient : Es el que manda el mensaje, con el broadCast? El host: que pongo es el host del ordenador que manda el mensaje? porque si es el del servidor, no se como leerlo. He visto el metodo receivedString(); Si es con este en el broadcast el string tendre que poner la direccion ip?

y el broadCast los parametros son un string y un integer. Q el integer pone Aport. Tengo que poner mi direccion ip o el host.?la ip no es string? si es mi direccion ip, hay alguna forma de conseguirla o tengo que ponerla estaticamente??

Como ves estoy llena de dudas.
Cuando parece que me cuadra una cosa la otra que tenia clara se descoloca.
No se si te habre liao,espero que no

Gracias

Gracias

Última edición por nenufer fecha: 26-05-2006 a las 09:57:33.
Responder Con Cita
  #6  
Antiguo 26-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Supongo que estas usando los componentes Indy (si no es asi corrigeme), yo no controlo mucho el funcionamiento de estos componentes pero no parece muy complicado. En el IdUDPServer en la propiedad DefaultPort colocas el puerto que quieres usar, Active = TRUE y BroadcastEnable = TRUE. Y en el IdUDPClient colocas tambien el valor del puerto y BroadcastEnable = TRUE.

Para mandar un mensage:
Código Delphi [-]
  idUDPClient1.Send('Hola mundo');


Y para recibirlo en el evento OnUDPRead del UDPServer
Código Delphi [-]
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TBytes;
  ABinding: TIdSocketHandle);
begin
  // Mostramos el mensage
  ShowMessage(String(PChar(AData)));
end;

De todas formas haber si te responde alguien con mas experiencia con estos componentes, yo cuando he trabajado con UDP ha sido utilizando directamente funciones de la API y no tengo mucha experiencia con Indy.
Responder Con Cita
  #7  
Antiguo 26-05-2006
nenufer nenufer is offline
Miembro
 
Registrado: dic 2005
Posts: 90
Poder: 19
nenufer Va por buen camino
Buenas. Gracias por conestar otra vez!! Utilizo las indy. Las propiedades mas o menos era lo que tenia mas claro . He conseguido centrarme un poco mas. Lo explico por si a alguien le interesa :

El udpclient es el que manda un mensaje por la red con broadCast(Ip,puerto);
La ip la optengo mediante gethostname,gethostbyname,inet_ntoa que estan api de windows.
el udpserver lee este mensaje y se lo asigna a la propiedad host del TCPClient:

Eso es hasta ahora lo que tengo. Luego para conectarme y que consiga las imagenes ya veremos pero me imagino que quedara poco.(eso espero )

Muchisimas gracias por tu ayuda.

Última edición por nenufer fecha: 29-05-2006 a las 16:36:25.
Responder Con Cita
  #8  
Antiguo 29-05-2006
nenufer nenufer is offline
Miembro
 
Registrado: dic 2005
Posts: 90
Poder: 19
nenufer Va por buen camino
Cita:
Empezado por nenufer
El udpclient es el que manda un mensaje por la red con broadCast(Ip,puerto);
La ip la optengo mediante gethostname,gethostbyname,inet_ntoa que estan api de windows.
el udpserver lee este mensaje y se lo asigna a la propiedad host del TCPClient:
Buenas otra vez!! Esto me lleva de cabeza. Quiero pasar imagenes por Tcp, lo tengo todo montado pero no consigo averiguar como pasar imagenes o stream porque para poder pasar imagenes lo que hago es asignar las imagenes a un TmemoryStream.
He buscado mucho y encontre un hilo escrito por madman que buscaba lo mismo que yo,el problema es que cuando pasa las imagenes,asignadas en el stream, ahi ya me pierdo y ni te digo ya en la otra aplicacion para que las lea.
Ese es mi problema.

Si alguien me puede ayudar otra vez,muchiiiiiiiiiiiisimas gracias .
Responder Con Cita
  #9  
Antiguo 31-05-2006
vespita vespita is offline
Registrado
 
Registrado: may 2006
Posts: 3
Poder: 0
vespita Va por buen camino
Talking a ver

...no es exactameente lo que pides...pero te puede ayudar muxo...es para mandar ficheros con UDP pero no hace ninguna pregunta inicial...cargas el archivo y lo envias a toda la gente q ste conectada en la red... exale un vistazo....(archivo adjunto)


ALGUIEN TIENE EL CODIGO DEL ALGORITMO DE HUFFMANN EN DELPHI????? nos salvariais la vidaaaaaaaaaaaaaaa!!!!
Responder Con Cita
  #10  
Antiguo 05-06-2006
nenufer nenufer is offline
Miembro
 
Registrado: dic 2005
Posts: 90
Poder: 19
nenufer Va por buen camino
Unhappy Hola de nuevo

Vespita, ya lo solucione, gracias. Se ve que el ultimo mensaje se colo. De todas formas me gustaria ver ese adjunto, pero no aparece .

Pero ahora vuelvo a solicitar ayuda. Gracias a seoane consegui pasar el stream, pero ahora ademas me gustaria enviar un string. He utilizado writeln,writeBuffer y no me funciona. No llega el mensaje, pero el stream tampoco. Si lo hago con el writebuffer lo abro y lo cierro pero nada. No entiendo porque no me lo envia.
si alguien me lo puede explicar gracias de antemano

Última edición por nenufer fecha: 05-06-2006 a las 13:47:43.
Responder Con Cita
  #11  
Antiguo 09-06-2006
kwanbis kwanbis is offline
Registrado
 
Registrado: ene 2006
Posts: 5
Poder: 0
kwanbis Va por buen camino
Cita:
Empezado por vespita
ALGUIEN TIENE EL CODIGO DEL ALGORITMO DE HUFFMANN EN DELPHI????? nos salvariais la vidaaaaaaaaaaaaaaa!!!!
tenes que gritar tanto? google es tu amigo

http://www.greatchief.plus.com/chieflz3.zip
Responder Con Cita
  #12  
Antiguo 14-06-2006
nenufer nenufer is offline
Miembro
 
Registrado: dic 2005
Posts: 90
Poder: 19
nenufer Va por buen camino
Hola

Sigo intentando pasar un string por tcp. Y no lo he conseguido. He buscado por el foro y por internet, y he encontrado algo el problema es que lo q hago no me funciona. Si alguien me puede ayudar con el codigo gracias de antemano.

En el tcpclient envio todos los datos. una imagen y un string. Si solo envio la imagen no hay ningun problema, este surge cuando intento pasar el string.

Código Delphi [-]
  try
    if TcpClient.Connected = true  then
      TcpClient.Disconnect;
    TcpClient.Host := Ip;
    TcpClient.Connect();
    TcpClient.WriteLn('Hola');
    TcpClient.WriteStream(ImgStream);
    TcpClient.Disconnect;
  finally
    ImgStream.Free;
  end;

y he probado tambien con write y nada.

Y para leerlo en el tcpserver hago:

Código Delphi [-]
Nombre := AThread.Connection.ReadLn();
showmessage(Nombre)

o he probado tambien
Código Delphi [-]
AThread.Connection.Readln(Nombre);

incluso con readstring.
Con esta ultima me muestra la ventana del showmessage pero vacio.

Con estas lineas el programa no sigue cuando lee el string finaliza y no sigue con todo el codigo que tiene por debajo.
Bueno espero q me pueda ayudar alguien, gracias.

Última edición por nenufer fecha: 14-06-2006 a las 13:13:08.
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
Problema con TIdTCPClient liadsoft Internet 2 12-05-2006 08:39:52
Cambiar Puerto en TIdTcpServer jabim Internet 0 03-02-2006 10:48:00
Escuchar con TIdTCPServer (indy), por varios IP en una misma maquina fabianbbg Internet 1 31-01-2006 01:27:04
Propiedad Intercept del componente TIdTCPServer JoseBozzano Internet 0 25-08-2004 21:39:34
Urgente tidTcpServer Indy Pally Internet 2 30-08-2003 01:01:11


La franja horaria es GMT +2. Ahora son las 07:27:15.


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