Saludo
Envio desde Server a Clientes [Componentes INDY][DUDA]
#1
Escrito 11 julio 2012 - 03:37
Saludo
#2
Escrito 12 julio 2012 - 02:09
#3
Escrito 12 julio 2012 - 04:44
Hola Fakedo0r. Ten paciencia, si alguien no te ha respondido no quiere decir que no sepa o que no quiera sino que no ha tenido el tiempo de responder.Por lo que veo la gente esta igual que yo, gracias de todos modos
Este sitio está hecho por personas que saben como también las que quieren aprender, pero debes entender que ellos también tienen sus obligaciones y por que no... sus complicaciones.
Espera por favor a que alguien que tenga algo más de manejo y conocimiento sobre Indy responda.
Apenas ha pasado un día. Aquí las prisas y las respuestas de urgencias no están permitidas, se ayuda en la medida en que uno puede y cuando puede.
Te invito a conocer las normas de la comunidad y las sugerencias sobre los modos al postear.
Muchas gracias.
Saludos,
#4
Escrito 12 julio 2012 - 05:24
Hola Fakedo0r. Ten paciencia, si alguien no te ha respondido no quiere decir que no sepa o que no quiera sino que no ha tenido el tiempo de responder.
Por lo que veo la gente esta igual que yo, gracias de todos modos
Este sitio está hecho por personas que saben como también las que quieren aprender, pero debes entender que ellos también tienen sus obligaciones y por que no... sus complicaciones.
Espera por favor a que alguien que tenga algo más de manejo y conocimiento sobre Indy responda.
Apenas ha pasado un día. Aquí las prisas y las respuestas de urgencias no están permitidas, se ayuda en la medida en que uno puede y cuando puede.
Te invito a conocer las normas de la comunidad y las sugerencias sobre los modos al postear.
Muchas gracias.
Saludos,
Disculpa pero no se a que viene tu comentario. A caso te has sentido ofendido ¿? Yo se que la gente tiene sus obligaciones y no esta obligado a responderme pero yo en ningún momento he insistido ni he obligado a nadie a que me responda. Tampoco he metido prisa a nadie, aun así suena absurdo e patético esa norma/frase "Aquí las prisas y las respuestas de urgencias no están permitidas". A parte no se figura nada de eso en "las normas del foro" y tampoco veo alguna infracción de normas por mi parte. De todos modos no te sientas ofendido, no era mi intensión.
Saludo
#5
Escrito 12 julio 2012 - 06:57
Por lo que veo la gente esta igual que yo, gracias de todos modos
Se entiende como "Gracias por no responderme, ya me las arreglaré solo, no se preocupen". Es decir, sarcasmo.
Y déjame decirte que "gracias de todos modos" es precisamente la manera más fina de ocultar un comentario despectivo, algo muy habitual en los foros. Si no ha sido tu intención, mil disculpas. Y en vista a que tan sólo ha pasado un día y ya pongas algo como eso salta nuestras alarmas.
Por cierto, lo de prisas y urgencias si está contemplado; el punto 6 sobre sugerencias lo dice:
6. Pequeños detalles que a veces se olvidan
Decir "por favor", "disculpa", y "gracias" son palabras que alientan a brindar mejores respuestas, Delphiaccess se construye con la colaboración altruista de muchas personas y no todos están disponibles las 24 horas. Se respetuoso y no desesperes si no recibes respuesta de forma rápida, te podemos asegurar que las respuestas llegarán de un momento a otro ya que cada día hay mas amigos registrados y por consiguiente más personas con ánimo de ayudar.
Vuelvo a repetir, tranquilidad. Porque el modo en como tu has reaccionado a mis comentarios no son del todo buenos, y ha no desesperarte si no hay respuestas en menos de 24 hrs.
Es un llamado que hacemos en general a todo usuario nuevo que entra.
Espero que ahora entremos con mejor pie.
Saludos,
#6
Escrito 13 julio 2012 - 04:11
#7
Escrito 15 julio 2012 - 02:06
Procedure TFRM_Main.CMD_EscucharClick(Sender: TObject); Var Bindings: TIdSocketHandles; Begin Bindings := TIdSocketHandles.Create(ID_Sock); If ID_Sock.Active Then ID_Sock.Active := False Else Begin Bindings.Clear; Bindings.Add.IP := '127.0.0.1'; Bindings.Add.Port := StrToInt(TXT_Puerto.Text); ID_Sock.Bindings := Bindings; ID_Sock.Active := True; TXT_Log.Lines.Add('Server iniciado: 127.0.0.1'); TXT_Log.Lines.Add('Esperando conecciones...'); Bindings.Free; End; End; Procedure TFRM_Main.ID_SockConnect(AContext: TIdContext); Begin AContext.Data := TObject(AContext.Binding.Handle); LB_SockID.Items.Add(IntToStr(Integer(AContext.Data))); TXT_Log.Lines.Add('Nueva coneccion: ' + AContext.Binding.PeerIP + ':' + IntToStr(AContext.Binding.Port)); End; Procedure TFRM_Main.ID_SockDisconnect(AContext: TIdContext); Var sSock: String; I: Integer; Begin sSock := IntToStr(Integer(AContext.Data)); TXT_Log.Lines.Add('Se desconecto: ' + AContext.Binding.PeerIP + ':' + IntToStr(AContext.Binding.Port)); For I := LB_SockID.Count - 1 DownTo 0 Do If sSock = LB_SockID.Items.Strings[I] Then Begin LB_SockID.Items.Delete(I); AContext.Data := Nil; End; End; Procedure TFRM_Main.ID_SockExecute(AContext: TIdContext); Var sResponse: String; iSize: Integer; tArrRes: TStringList; Begin If AContext.Connection.Connected Then Begin iSize := AContext.Connection.IOHandler.ReadLongInt(True); sResponse := AContext.Connection.IOHandler.ReadString(iSize); TXT_Chat.Lines.Add(IntToStr(AContext.Binding.Handle) + ': ' + sResponse); End; End;
Una breve explicacion, es un pequeño chat, cada vez que acepto conexiones guardo el handle en listbox para luego asi eliminar de la lista los clientes que se desconectan. Hasta ahi todo perfecto, el problema es que no puedo enviar datos desde server a un cliente en concreto.
Con TServerSocket era realmente sencillo:
if LST_Clientes.Selected[LST_Clientes.ItemIndex] then begin Sock.Socket.Connections[LST_Clientes.ItemIndex].SendText(TXT_Texto.Text); end;
Pero con Indy al parecer es muy diferente. Si alguien pudiera ayudarme, le agradeceria muchisimo.
Perdon por el mal entendido que tuve con el Delphius.
Saludo.
#8
Escrito 20 julio 2012 - 12:47
#9
Escrito 21 julio 2012 - 12:32
Var tArrCl: TList; Begin tArrCl := ID_Sock.Contexts.LockList; If LB_SockID.Selected[LB_SockID.ItemIndex] Then Begin TIdContext(tArrCl[LB_SockID.ItemIndex]).Connection.IOHandler.WriteBufferOpen; TIdContext(tArrCl[LB_SockID.ItemIndex]).Connection.IOHandler.Write(Integer(Length(TXT_Texto.Text))); TIdContext(tArrCl[LB_SockID.ItemIndex]).Connection.IOHandler.Write(TXT_Texto.Text); TIdContext(tArrCl[LB_SockID.ItemIndex]).Connection.IOHandler.WriteBufferClose; TXT_Chat.Lines.Add('Yo: ' + TXT_Texto.Text); TXT_Texto.Clear; End; ID_Sock.Contexts.UnlockList;
Si alguien no entiende el código, avisad y comento las lineas. En todo caso gracias a todas aquellas personas que han pasado por mi post.
Un saludo.
#10
Escrito 21 julio 2012 - 12:59
Saludos¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
#11
Escrito 21 julio 2012 - 01:03
Mil disculpas si alguien no se pudo dar tiempo, yo se que hay gente en el foro que entiende Indy.
Por lo que he visto estos días, resulta que cada uno está con mucho papelerío de UML (mi caso), y mucho código que picar (el del resto). Y además, justamente se da el caso de que en algunos lugares se dan vacaciones a mitad de año y es posible que quieran tomarse un respiro.
Yo de Indy muy poco se, estoy prácticamente nulo. Si bien vi algunos ejemplos y demos nunca con total dedicación al tema como para saber por donde entrarle a tu duda. Y además hay un punto en contra de Indy. Es una "suite" muy volátil, con cambios que hasta resultan radicales de una versión a otra... por ejemplo la 10 y la 11 tienen sus diferencias y hasta se le conocen algunos bugs.
Si no es una obligación irte por Indy, podrías considerar otras opciones. Aquí los compañeros del foro te pueden recomendar. No estoy totalmente seguro pero he estado viendo que se habla mucho de Curl; pero no estoy muy al tanto de si Curl es sólo para el envio de correo electrónico o si es algo más completo y ofrece un amplio abanico como los componentes Indy.
Por otro lado, edité tu solución para ponerle la etiqueta de delphi. Tu le pusiste la de Pascal
Lo que me llama la atención es que la solución pase por hacer un cast mediante el tipo TidContext. Creería, así viendo tu código, que tranquilamente se podría disponer de una variable de dicho tipo y utilizarla:
var MyIdContext: TidContext;
Posiblemente los componente indy tenga una propiedad o un método que regrese el TidContext para el caso.
Saludos,
#12
Escrito 21 julio 2012 - 02:38
El "MyIdContext: TidContext" lo había probado pero por alguna razón no me daba si no directamente poniendo TidContext(....)...
Tengo un proyecto usando los componentes TServerSocket / TClientSocket y la verdad, es demasiado código y no hay estabilidad, por eso pensé cambiar los componentes por el de Indy porque he leido por ahi que el Indy tiene mucha más estabilidad. Bueno, gracias nuevamente. Cualquier cosa, comentad.
Un saludo
#13
Escrito 17 julio 2013 - 09:19
si me pudieras ilustrar sera genial.
de antemano gracias por su ayuda









