[ubuntu-ar] Protocolo de comando remoto.

Maxi maximiliano.duarte at gmail.com
Thu Aug 18 14:54:45 UTC 2011


El día 18 de agosto de 2011 10:17, Silvio Quadri <silvioq en gmail.com> escribió:
> El día 17 de agosto de 2011 13:21, Listas Mattware
> <listas en mattware.com.ar> escribió:
>> Buenas tardes lista.
>> Un amigo me consultó por algún aplicativo q trabje con las librerias de
>> socket bsd. Debería ser un cliente/servidor de comandos remotos, simple,
>> nada del otro mundo, pero ando perdido.
>> Alguien puede orientarme con el protocolo q usa y algun ejemplo de sitaxis?
>> Gran saludo!
>
>
> Hola! No voy a darte una explicación detallada, simplemente porque la
> desconozco, pero sí, acercarte una mano al asunto ...
>
> Socket, como figura en la wikipedia
> http://es.wikipedia.org/wiki/Socket_de_Internet   es un concepto
> abstracto. Las computadoras se conectan entre sí (o distintos procesos
> en la misma o en distintas computadoras), implementando protocolos de
> transmisión, los cuales se "montan" sobre un par de socket. Dicho de
> otra forma, la forma habitual para implementar protocolos, como TCP ó
> UDP, es a través de sockets con determinadas propiedades.
>
>
> Si en realidad lo que buscás es implementar algún tipo de programa
> cliente / servidor entre dos PC, fijate que al pie de la página de
> wikipedia hay un vínculo con algunos ejemplos ... o buscá en google
> "socket c examples" (ó socket [mi lenguaje de programación favorito]
> example) y vas a encontrar muchas cosas.
>
> También podés ejecutar comandos remotos desde una pc, tenés mil
> maneras ... la más sencilla es hacer algo como
>
> $ ssh usuario en puestoremoto "/home/user/mi-comando.sh"
>
> y listo ... te cuento que "por debajo" utilizará un par de sockets
> (uno en tu máquina y otro en la remota) para comunicarse y ejecutar el
> programa.
>
>
> PD:
> Pido a algún listero que corrija el concepto de socket, si estoy equivocado.
>
> --
> Silvio
>
> --
> Ubuntu-ar lista de correo
> Ubuntu-ar en lists.ubuntu.com
> Modifica tus opciones o desuscribite en: https://lists.ubuntu.com/mailman/listinfo/ubuntu-ar
> Siempre leer, comprender y aplicar nuestra etiqueta: https://wiki.ubuntu.com/ArgentinaTeam/EtiquetaML
>
>
Con Lazarus tenes componentes para implementar una comunicacion tcp,
udp, socket, que viendolo como analogia al puerto serie envia una
serie de bytes o una estructura de datos pero por la placa de red.
En el master envias el bloque y el cliente recive y procesa lo
recibido, que llevas y traes es tu cuestion.

Ejemplo de un mini web server con socket

{
  The Micro Pascal WebServer

  This is a very simple example webserver implemented with the Synapse library.

  It works with blocking sockets and a single thread, so it
  can only handle one request at a given time.

  It will write the headers that it receives from the browser
  to the standard output.

  It serves a fixed webpage for the / URI
  For any other URI it will return 504 not found
}
program upserver;

{$ifdef fpc}
  {$mode delphi}
{$endif}

{$apptype console}

uses
  Classes, blcksock, sockets, Synautil, SysUtils;

{@@
  Attends a connection. Reads the headers and gives an
  appropriate response
}
procedure AttendConnection(ASocket: TTCPBlockSocket);
var
  timeout: integer;
  s: string;
  method, uri, protocol: string;
  OutputDataString: string;
  ResultCode: integer;
begin
  timeout := 120000;

  WriteLn('Received headers+document from browser:');

  //read request line
  s := ASocket.RecvString(timeout);
  WriteLn(s);
  method := fetch(s, ' ');
  uri := fetch(s, ' ');
  protocol := fetch(s, ' ');

  //read request headers
  repeat
    s := ASocket.RecvString(Timeout);
    WriteLn(s);
  until s = '';

  // Now write the document to the output stream

  if uri = '/' then
  begin
    // Write the output document to the stream
    OutputDataString :=
      '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'
      + ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' + CRLF
      + '<html><h1>Teste</h1></html>' + CRLF;

    // Write the headers back to the client
    ASocket.SendString('HTTP/1.0 200' + CRLF);
    ASocket.SendString('Content-type: Text/Html' + CRLF);
    ASocket.SendString('Content-length: ' +
IntTostr(Length(OutputDataString)) + CRLF);
    ASocket.SendString('Connection: close' + CRLF);
    ASocket.SendString('Date: ' + Rfc822DateTime(now) + CRLF);
    ASocket.SendString('Server: Servidor do Felipe usando Synapse' + CRLF);
    ASocket.SendString('' + CRLF);

  //  if ASocket.lasterror <> 0 then HandleError;

    // Write the document back to the browser
    ASocket.SendString(OutputDataString);
  end
  else
    ASocket.SendString('HTTP/1.0 504' + CRLF);
end;

var
  ListenerSocket, ConnectionSocket: TTCPBlockSocket;
begin
  ListenerSocket := TTCPBlockSocket.Create;
  ConnectionSocket := TTCPBlockSocket.Create;

  ListenerSocket.CreateSocket;
  ListenerSocket.setLinger(true,10);
  ListenerSocket.bind('0.0.0.0','1500');
  ListenerSocket.listen;

  repeat
    if ListenerSocket.canread(1000) then
    begin
      ConnectionSocket.Socket := ListenerSocket.accept;
      WriteLn('Attending Connection. Error code (0=Success): ',
ConnectionSocket.lasterror);
      AttendConnection(ConnectionSocket);
    end;
  until false;

  ListenerSocket.Free;
  ConnectionSocket.Free;
end.



-- 
No a la obsolecencia programada:
http://dimensionargentina.blogspot.com/2011/01/todo-esta-disenado-para-romperse.html

Twitter: @nenunocomar
Identi.ca: @nenuno
Linux User #495070
Ubuntu User #28504
http://miexperiencialinux.blogspot.com/

El que pregunta aprende, y el que contesta aprende a responder.



More information about the Ubuntu-ar mailing list