Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Duda en Sockets MultiThread (https://www.clubdelphi.com/foros/showthread.php?t=69424)

JesusRamirez 17-08-2010 14:04:35

Duda en Sockets MultiThread
 
Hola,

Llevo varios dias atascado con un problema, he dado bastantes vueltas por internet sin encontrar solucion a lo que quiero realmente hacer.

Estoy trabajando en un Proxy Redirector, basicamente todo el trafico que le llega por un puerto de escucha, lo redireccione a otra IP & Port.

Funciona perfectamente para conexiones de 1 - Proxy - Servidor.

Pero cuando hay varias conexiones se hace un lio y sé perfectamente porque ocurre, pero no encuentro el parametro que me diga cual es la conexion realmente activa en ese momento para responderle por ese thread.

Código Delphi [-]
procedure TForm1.OnClientRead1(Sender: TObject; Socket: TCustomWinSocket);
var pakete:string;
Athread:integer;
begin

  try
  contador:=contador+1;
  pakete:=Socket.ReceiveText;
  ClientSocket1.Socket.SendText(pakete);
  //ServerSocket1.Socket.Connections[AThread].SendText(pakete);
  form2.richedit1.text:=form2.richedit1.text+#13+DateToStr(Date) +'  ' +FormatDateTime('hh:nn:ss:zzz', Time)+' From Client: '+(Socket.RemoteHost)+#13+pakete+#13;

  except
     on E : Exception do
     begin
       ShowMessage('Exception class name = '+E.ClassName);
       ShowMessage('Exception message = '+E.Message);
     end;
  end;
  end;


procedure TForm1.OnRead1(Sender: TObject; Socket: TCustomWinSocket);
var
l:string;
begin
  l:=Socket.ReceiveText;
  Asocket1.SendText(l);
 form2.richedit1.text:=form2.richedit1.text+#13+DateToStr(Date) +'  ' +FormatDateTime('hh:nn:ss:zzz', Time)+' From Server: '+(Socket.RemoteHost)+#13+l+#13;
 end;

ServerSocket1.Socket.Connections[AThread].SendText(pakete); <---- ahora mismo estaria respondiendo a todas las conexiones activas por el bucle, pero mi pregunta es como deberia realizarlo para responder al que me ha escrito? Socket.Connections[PARAMETRO QUE NECESIO CONOCER].SendText

Muchas gracias!

dreamermx 20-08-2010 22:47:42

Hola Jesus:
Cada socket que atiende el servidor tiene un id unico, es cuestion de que lo identifiques, en el parametro (Socket:TCustomWinSocket)
Socket.SocketHandle.
Al ejecutar el metodo OnClientRead del Servidor y el parametro Socket.
Determinan que conexion cliente es atendida en ese momento por el servidor.
Para saber que cliente en particular es, lo determinas con el valor Socket.SocketHandle.

Espero te sea de ayuda.

Enan0 21-08-2010 01:13:40

por lo que yo pude enteder esta haciendo una especie de proxy.

Etonces Tiene..

un Cliente
Un server.

Con Su navegador Se conecta al Server y hace la peticion de Algo a la red...
Luego pasa la informacion al cliente y ejecuta dicha peticion...
La informacion llega y el cliente se la devuelve al Server...

En conexiones 1 a 1 le funciona bien ya que el server solo tiene un cliente activo..

El problema recide cuando tiene multiples Conexiones al Server (es decir por ejemplo un navegador y el MSN (por ejemplo).

el tema es que no sabe diferenciar que paquete va a cada conexion...

una buena opcion seria almacenar la Ip Origen y la Destino (esa informacion creo que esta disponible.. (origen seguro) destino.. habria que ver si ya esta convertida o se envia el host...

ahi cargarlas en un Array.. y por ultima buscar a quien corresponde..

ojo es lago medio descolgado. pero por el momento no se me ocurre otra cosa

dreamermx 21-08-2010 06:54:13

Tienes razón Enan0.


La franja horaria es GMT +2. Ahora son las 12:04:16.

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