Creando un dummy Server con idTCPServer (Indy 9)
Para crear un pequeño servidor para poder realizar nuestras pruebas utilizando paquetes TCP, podemos crear una aplicación utilizando el componente TidTCPServer para crear un servidor TCP al cuál podremos hacer diversas peticiones y que nos devuelva un valor por defecto y así poder hacer nuestras pruebas. De ésta manera podremos utilizar otros dispositivos para ver si realmente existe una comunicación entre éstos y poder controlar bien los datos enviados y recibidos. Para éste ejemplo utilizaré los componentes de Indy 9 ya que es bastante diferente que utilizar Indy 10. Para Indy 10, ya realizé una herramienta de xat la cuál la podréis encontrar aquí, en el siguiente enlace: Herramienta de xat con Indy 10.Solo tenemos que crear una nueva aplicación, y utilizar los siguientes componentes:
TidTCPServer y TidAntiFreeze, los cuáles podremos encontrar en la librería de Indy. Una vez hecho esto, tenemos que configurar la aplicación con el siguiente código fuente:procedure TForm3.ConnectClick(Sender: TObject);
var
idSocket: TIdSocketHandle;
begin
idSocket := IdTcpServer1.Bindings.Add;
idSocket.IP := Edit2.text;
idSocket.Port := StrToInt(Edit1.text);
Log('Binding IP: ' + Edit2.text + ':' + Edit1.text);
IdTcpServer1.Active := true;
end;
procedure TForm3.DisconnectClick(Sender: TObject);
begin
IdTcpServer1.Bindings.Clear;
IdTcpServer1.Active := false;
Log('Disconnected');
end;
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DisconnectClick(Sender);
end;
procedure TForm3.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
Log('Connected at : ' + AThread.Connection.Socket.Binding.PeerIP + ':' + IntToStr(AThread.Connection.Socket.Binding.Port));
end;
procedure TForm3.IdTCPServer1Disconnect(AThread: TIdPeerThread);
begin
Log('Disconnected from : ' + AThread.Connection.LocalName + ':' + IntToStr(AThread.Connection.Socket.Binding.Port));
end;
procedure TForm3.IdTCPServer1Execute(AThread: TIdPeerThread);
var
CommBlock: string;
begin
if not AThread.Terminated and AThread.Connection.Connected then
begin
AThread.Connection.WriteLn(1000); //default value
CommBlock := AThread.Connection.ReadLn; //read from client
Log('Received : ' + CommBlock + ' Sending value: ' + IntToStr(1000));
end;
end;
procedure TForm3.Log(s: string);
begin
Memo1.Lines.Add(DateTimeToStr(now) + ' ' + s);
end;
Una vez hecho ésto y asignados los eventos en el componente, podemos iniciar nuestro servidor y darle al botón conectar para iniciar el servidor. Aqui tenemos que utilizar la IP que hará de servidora y su puerto.
Si iniciamos una comunicación por ejemplo con Firefox (poniendo la IP y el puerto en la barra de navegación xxx.xxx.xxx.xxx : xxxx (en mi caso 192.168.1.1:8080) entonces recibiremos la siguiente respuesta en nuestra aplicación:
08/09/2009 15:33:24 Binding IP: 192.168.1.1:8080 08/09/2009 15:33:28 Connected at : 192.168.1.1:8080 08/09/2009 15:33:28 Received : GET / HTTP/1.1 Sending : 1000 08/09/2009 15:33:28 Received : Via: 1.1 SRVISA01 Sending : 1000 08/09/2009 15:33:28 Received : User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13 Sending : 1000 08/09/2009 15:33:28 Received : Host: 192.168.1.1:8080 Sending : 1000 08/09/2009 15:33:28 Received : Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Sending : 1000 08/09/2009 15:33:28 Received : Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Sending : 1000 08/09/2009 15:33:28 Received : Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Sending : 1000 08/09/2009 15:33:28 Received : Keep-Alive: 300 Sending : 1000 08/09/2009 15:33:28 Received : Connection: Keep-Alive Sending : 1000 08/09/2009 15:33:28 Received : Sending : 1000
%20applied%20to%20Transformer%20models%20in%20machine%20learning.%20The%20image%20shows%20a%20neural%20networ.webp)

Sabes como mandar una imagen al navegador?
ReplyDeleteTienes que enviar un Stream. Hay varias maneras de hacerlo.
DeleteJordi
Hola amigo, se puede ejecutar una acción al momento de que reciba texto?. Por ejemplo mostrar el texto por medio de un showMessage
ReplyDeleteHola Hugo,
Deletesi que se puede, solo tienes que usar la unidad del showMessage y mostrar el mensaje.
Jordi