FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Idtcpserver puede gestionar varias conexiones simultaneas?
He encontrado algunas personas q preguntan algo parecido pero tras leer no parece que pregunten lo mismo que yo o no lo entiendo.
Estoy haciendo un programa P2P los usuarios mandan y reciben mensajes, peticiones etc, pero cuando se esta enviando un archivo y la aplicacion lo recibe parece que no deja pasar mas conexiones e impide recibir mas mensajes o archivos simultaneamente, alguien sabe como solucionarlo. Esta es la zona del evento onexecute del idtcpserver donde parece que esta el problema, listenqueue y maxconnections tienen el varlor de 100 y tengo puesto un componente idantifreeze. "partes son los trozos que va a recibir del cliente, ya que si hacia sendstream directamente desde el cliente sin enviarlo en partes antes metia toda la stream en memoria" partes:=tam div bufferenvio; fStream:=TFileStream.Create(compruebabarrita(downdir)+s,fmCreate); for x:=0 to partes do begin //Hasta que no sale bloquea las nuevas Athread.Connection.ReadStream(fStream); AThread.Connection.WriteLn(respuesta);//Confirmo al cliente recepcion del trozo end; |
#2
|
|||
|
|||
Saludos.
Lo que te ha de faltar es un manejador de hilos, que vienen con los componentes Indy. Revisa los ejemplos de Indy y veras que tiene un manejador de Hilos, asi como el AntiFree. Yo cree una aplicacion que copiaba toda una base de datos a otra, tabla por tabla y lo que hice es usar un componente Indy TCP Server para recibir la peticiones y un manejador de hilos que asociaba al TCPServer y ademas al momento de recibir una peticion creaba un subhilo de proceso para crear una nueva conexion y procesar los datos. Espero te sirva: TCPServer + Manejador de Hilos + AntiFreeze y creas una clase para manejo de SubProcesos o SubHilos |
#3
|
|||
|
|||
Perdona mi ignorancia, pero sabes donde podria sacar esa informacion o algunos ejemplos para que yo lo entienda, ya probe enlazar el tcpserver a un threadpool o threadmanager pero realmente no se si hay q implementar algo mas pq sigo teniendo el mismo problema.
De momento al menos se que se puede y me has orientado bastante pero si puedes darme un poco mas de informacion como se hace esto te estaria muy agradecido. Saludos |
#4
|
|||
|
|||
Revisa los demos que vienen con Delphi principalmente el que crea un CHAT
C:\Archivos de programa\Borland\Delphi7\Demos\Internet\NetChat Este demo trabaja con TCPServer y TCPClient, pero lo interesante de esto es que hace uso de un subproceso o subhilo. Para trabajar. Bueno luego descarga los demos de Indy, los cuales traen un buen de ejemplos muy buenos. Revisalos y junta las 2 formas de hacer los chat y podras obtener un programa P2P como lo necesitas. http://www.projectindy.org/DemoDownl...os_26Oct04.zip Suerte. La cuestion es leer, si no se entiende a la primera, pues volver a leer. |
#5
|
|||
|
|||
La version de delphi 7 que uso no contiene la carpeta demos, hace años cuando usaba delphi 5 si que recuerdo que venian.
He estado dandole vueltas a las demos de Indy pero realmente no se que tengo que hacer, en el Onconnect del idtcpserver de estas demos utiliza una clase que por lo que parece simplifica luego la extraccion de datos del cliente pero no parece que tenga que ver nada con los hilos. Elopez estoy enganchado en esta parte y necesito algo mas de ayuda. No se si el componente idtcpserver bloquea las conexiones entrantes hasta que finaliza la que esta dentro o que es lo que ocurre pq recibiendo mensajes no parece bloquearse pero recibiendo un archivo si que lo hace aunque alguna vez si que lo recibe. Basicamente en el execute ocurre esto... 1-Si la ip del cliente esta registrada en la base de datos da paso (If Ttable.locate...) 2-Lee la cadena que puede ser un mensaje o una orden de envio de archivo 3-Si el cliente envia un archivo entra en un bucle Readstream hasta que se completa el tamaño del archivo, el tamaño lo se pq el cliente se lo ha dicho en la orden. El cliente lo envia en trozos de 32k aunque me he fijado que si envio en trozos mas pequeños la probabilidad de que llegue un mensaje mientras se envia es mayor. Llevo 6 meses con este programa estoy bastante ilusionado pero no encuentro la forma de avanzar, tampoco se aun para que se usa iohandler o intercept y como usar el componente de limitacion de ancho sin que me salte una excepcion. Gracias. *Uso Indy9 Última edición por Playwithfire fecha: 03-03-2008 a las 16:09:26. |
#6
|
|||
|
|||
Aun no he dado con la formula para solucionar el problema, si alguien lo lee y lo sabe por favor que responda, gracias
|
#7
|
||||
|
||||
Los servidores INDY son multihilos por herencia, y funcionan perfectamente, siempre que sepas lo que estas haciendo.
Con todo respeto, creo que antes de plantearte el desarrollo de un software muy ambicioso, debes tener cierto dominio sobre las tecnologías/técnicas/lenguajes/componentes que formarán el corazón de tu sistema. Dado que es una pregunta frecuente en los foros, he preparado un ejemplo simple con un servidor y un cliente que te ayudarán a comprobar el funcionamiento multi-hilos de indy. El proyecto usa INDY 10. Lo he hecho con Delphi 2007, pero no debiera presentar mayores problemas para compilar con versiones anteriores de delphi, siempre que tengas instalada INDY 10. El entorno para realizar la prueba es muy simple:
La aplicación está en la sección de Ejemplos del ftp y se llama INDY 10-prueba multihilos.zip Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#8
|
|||
|
|||
Gracias por el interes, voy a pasarme de Indy 9 a 10 para probarlo.
|
#9
|
||||
|
||||
Si tenes otras (muchas) aplicaciones que usen INDY, será mas sencillo, rápido y económico que trabajes en "bajar de versión" el demo que he hecho, y de paso podrías compartirlo para aquellos que aún usen INDY 9.
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Gestionar un Proyecto por varias personas | belpab | Varios | 33 | 16-09-2008 15:39:09 |
grillas simultaneas | nikotina | Varios | 1 | 24-07-2007 18:55:44 |
Conexiones simultaneas a un equipo | Nasio | Windows | 6 | 23-07-2007 22:32:03 |
ventanas simultaneas | ale21alito | Varios | 3 | 08-04-2005 17:58:50 |
DBGrid con varias querys ¿se puede? | Walterdf | Conexión con bases de datos | 5 | 16-03-2005 12:18:56 |
|