PDA

Ver la Versión Completa : Uso de sockets


vejerf
13-11-2007, 16:40:27
Hola, estoy realizando una aplicacion que es un servidor que acepta conexiones de uno o varios clientes. Estoy usando el componente Indy TIdTCPServer. Me gustaria saber si hay forma de averiguar (q supongo q debe haberla) el host del cliente asi como otros datos que puedan ser de interes.
Si sabeis algo ayudadme please :rolleyes:
Gracias a todos...

fide
14-11-2007, 05:34:24
Oyeme, por que al conectarte no le envias al servidor todas las informaciones que el necesite mediante la intruccion WriteLn??

Asi le enviarias todos los datos ya directamente!

Ejemplo:

Insertas un idTCPClient y un idTCPServer.

Esto lo pones en el OnClick de un Boton u otro evento...


procedure TForm1.Button1Click(Sender: TObject);
var
vIp, vName, vCommand: String;
begin

vIp := '127.0.0.1';
vName := 'localhost';
vCommand := 'logoff';

with IdTCPClient1 do
begin
Host := '127.0.0.1';
Port := 7099;
Connect;
end;

if IdTCPClient1.Connected then
begin
IdTCPClient1.WriteLn(vIp);
IdTCPClient1.WriteLn(vName);
IdTCPClient1.WriteLn(vCommand);
IdTCPClient1.Disconnect;
end;

end;


Esto lo pones en el OnExecute del idTCPServer


procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
vIp, vName, vCommand: String;
begin

vIp := AThread.Connection.ReadLn;
vName := AThread.Connection.ReadLn;
vCommand := AThread.Connection.ReadLn;

AThread.Connection.Disconnet;

ShowMessage(vIp + #10 + vName + #10 + vCommand);

end;


Esto es solo una idea. Pero puedes continuar preguntando si necesitas algo okas...

vejerf
14-11-2007, 11:15:38
Pero puedes continuar preguntando si necesitas algo okas...
Pues te tomo la palabra jeje... Ante todo muchas gracias por tu respuesta... pero no puedo hacer lo q me planteas... el por qué es muy facil y es que yo no controlo el cliente... yo solo estoy realizando el servidor... los clientes serán una serie de localizadores fabricados por sabe Dios que fabricante y eso... Por eso pregunto si es posible averiguar el host del cliente una vez se ha conectado... Estos clientes se conectan encima por GPRS aunque supongo q al fin y al cabo el tratamiento del socket será el mismo digo yo :p... Otra pregunta: ¿El metodo OnExecute cuando se ejecuta?
Muchas gracias por todo fide ;)

tefots
15-11-2007, 21:44:16
se puede

cuando recibas el onconnect
accedes a athread.Connection.Socket.Binding.PeerIP y athread.Connection.Socket.Binding.PeerIP, y ya tienes la ip remota del cliente y el puerto que usa para conectar.

tambien puedes resolver el nombre , creo que con gstack , o con dnsresolver no estoy seguro

saludos.