Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   sockets en cliente servidor (https://www.clubdelphi.com/foros/showthread.php?t=65100)

marareta 20-11-2009 05:52:33

sockets en cliente servidor
 
buenas amigos de club delphi, aqui de nuevo molestandolos, saben, tengo 2 aplicaciones, una cliente y otra servidor, y con ellas manejo sockets, lo que estoy haciendo es que por medio de una aplicacion me conecto por medio de sockets a la otra y le doy la orden de que se bloquee el administrador de tareas, el escritorio y la barra de tareas, abriendo las 2 aplicaciones en mi compu y ejecutandolas al mismo tiempo si me obedecen y se conectan correctamente, el problema es cuando las tengo en diferente computadora, no se si sea que tengo equivocados los valores del clientsocket y del serversocket.
Los valores del client socket son:
active: true
address:127.0.0.1 (aqui la verdad no se cual ip poner)
client type: ctNonBlocking
port: 4141 (lo tengo exactamente igual en el server socket)

y los valores en el serversocket son:
active: true
port:4141
server type: stNonBlocking

no se si tenga algun error aqui.
ahora les pongo el codigo de las aplicaciones:
en la aplicacion principal que es donde tengo el clientsocket y mando bloquear a la otra aplicacion tengo el siguiente codigo, que lo tengo funcionando con radiobuttons:

Código Delphi [-]
 
procedure TMenuPrincipal.RadioButton1Click(Sender: TObject);
begin
clientsocket1.socket.SendText('1');
end;
procedure TMenuPrincipal.RadioButton2Click(Sender: TObject);
begin
clientsocket1.socket.SendText('2');
end;
procedure TMenuPrincipal.RadioButton3Click(Sender: TObject);
begin
clientsocket1.socket.SendText('3');
end;
procedure TMenuPrincipal.RadioButton4Click(Sender: TObject);
begin
clientsocket1.socket.SendText('4');

lo que hago aqui es mandarle al serversocket un numero y cuando lo reciba va a ejecutar un case, que es el siguiente.
Este es el codigo del server socket en la propiedad onclientread:

Código Delphi [-]
 
procedure TMenuPrincipal.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
  var
  reg: TRegistry;
  begin
    case (strtoint(Socket.ReceiveText)) of
      1:   begin
            label1.caption:='El administrador de tareas está desactivado';
            reg := TRegistry.Create;
            reg.RootKey := HKEY_CURRENT_USER;
            reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System', True);
            reg.WriteString('DisableTaskMgr', '1');
            reg.CloseKey;
            reg.Free;
           end;
      2:   begin
            label1.caption:='El administrador de tareas está activado';
            reg := TRegistry.Create;
            reg.RootKey := HKEY_CURRENT_USER;
            reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\System', True);
            reg.DeleteValue('DisableTaskMgr');
            reg.CloseKey;
            reg.Free;
           end;
      3:   begin
            timer1.Enabled:=true;
            label2.caption:='El barra de tareas y el escritorio están ' +
              'activados';
           end;
      4:   
           begin
              label2.caption:='El barra de tareas y el escritorio están ' +
              'desactivados';
              Timer1.Enabled:= false;
              ShellExecute(MenuPrincipal.Handle,nil,('explorer.exe'),'','',SW_HIDE);
              registro(Hkey_Current_User, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\',
                                'DisableTaskMgr',ParamStr(1));
           end;
 
    end;
end;


las opciones 3 y 4 en el case utilizan un timer, el codigo es el siguiente:
Código Delphi [-]
procedure TMenuPrincipal.Timer1Timer(Sender: TObject);
begin
//Con Shellexecute cerramos el proceso "explorer" osea el explorador de windows
   ShellExecute(Handle, nil, 'tskill', 'explorer', nil, sw_hide);
   //Aquí accedemos al registro y bloqueamos al acceso al TaskMgr osea el (ctrl+alt+supr)
   registro(Hkey_Current_User, 'SOFTWARE\Microsoft\Windows    \CurrentVersion ' +
     'Policies\System\', 'DisableTaskMgr',IntToStr(1));
end;

como ya les comente mi verdadero problema esta en la conexion de los sockets, si me pudieran ayudar lo antes posible se los agradeceria mucho
un saludo

Alzheimer 16-12-2009 04:37:04

estas trabajando directamente con los objetos sockets....

te ahorrarias mucho kodigo y problemas de korreccion de kodigo si utilizaras los TIdTCP de INDY o simplemente los TTCP de la paleta internet.

son mucho mas faciles de usar.

sergiovalp 16-12-2009 13:40:00

Te recomiendo que en la aplicación cliente pongas un edit para escribir ahi en tiempo de ejecucion la direccion IP de la maquina servidor.

luego pone un boton conectar que le pasará esta IP al socket cliente, y desactivas y activas el socket.

La IP que tienes que poner en el cliente es la IP del servidor.

no uses address, basta con usar la propiedad host:

SocketCliente.active:= false;
SocketCliente.Host := 192.168.1.50 (IP de tu servidor)
SocketCliente.Port := 4141
SocketCliente.active:= true;


saludos
Sergio
chile


La franja horaria es GMT +2. Ahora son las 07:17:21.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi