Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как послать команду и получить ответ? может это и было, но все таки... 
:(
    Опции темы
Rock
Дата 14.2.2005, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 13.1.2005
Где: Краснодар

Репутация: нет
Всего: 1



Объясните чайнику... просто в инете не могу нигде найти... видимо уже заработался, но:
нуна сделать так, чтоб клиент послал запрос серверу и получил ответ... как?
плиззз smile
PM MAIL ICQ   Вверх
scriptcoder
Дата 14.2.2005, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 8.6.2004

Репутация: нет
Всего: нет



Вот посмотри - клиент соединяется с сервером посылает ему команду, тот в ответ посылает, что команда принятв, выполняет определенные действия. Delphi 6. Использованы TserverSocket и TClientSocket. Думаю разберешься. Ничего сложного.



Код

unit cli_main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ScktComp, Buttons;

type
 TfrmMain = class(TForm)
   CSock: TClientSocket;
   btnShutdown: TSpeedButton;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure btnShutdownClick(Sender: TObject);
   procedure CSockError(Sender: TObject; Socket: TCustomWinSocket;
     ErrorEvent: TErrorEvent; var ErrorCode: Integer);
   procedure CSockRead(Sender: TObject; Socket: TCustomWinSocket);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.FormCreate(Sender: TObject);
begin
 try
   CSock.Open;
 except
   ShowMessage ('Не удалось соединиться с удаленным компом');
   Close;
 end;
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
 if CSock.Active then CSock.Close;
end;

procedure TfrmMain.btnShutdownClick(Sender: TObject);
begin
 try
   CSock.Socket.SendText('#shutdown');
 except
   ShowMessage ('Не удалось послать удаленному компу сообщение');
   Close;
 end;
end;

procedure TfrmMain.CSockError(Sender: TObject; Socket: TCustomWinSocket;
 ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
 ErrorCode:=0;
end;

procedure TfrmMain.CSockRead(Sender: TObject; Socket: TCustomWinSocket);
var
 cmd: string;
begin
 cmd:=Socket.ReceiveText;
 if cmd = '#S' then Close;
end;

end.




Код


unit serv_main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ScktComp;

type
 TfrmMain = class(TForm)
   mMessages: TMemo;
   CSock: TServerSocket;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure CSockClientRead(Sender: TObject; Socket: TCustomWinSocket);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 frmMain: TfrmMain;

implementation

{$R *.dfm}

function SetPrivilege(aPrivilegeName: string;
 aEnabled: boolean): boolean;
var
 TPPrev,
 TP: TTokenPrivileges;
 Token: THandle;
 dwRetLen: DWord;
begin
 Result := False;
 OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES
   or TOKEN_QUERY, Token);

 TP.PrivilegeCount := 1;
 if (LookupPrivilegeValue(nil, PChar(aPrivilegeName),
   TP.Privileges[0].LUID)) then
 begin
   if (aEnabled) then
     TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
   else
     TP.Privileges[0].Attributes := 0;

   dwRetLen := 0;
   Result := AdjustTokenPrivileges(Token, False, TP,
     SizeOf(TPPrev),
     TPPrev, dwRetLen);
 end;
 CloseHandle(Token);
end;

function WinExit(iFlags: integer): boolean;
//   EWX_LOGOFF
//   EWX_REBOOT
//   EWX_SHUTDOWN
begin
 Result := True;
 if (SetPrivilege('SeShutdownPrivilege', true)) then
 begin
   if (not ExitWindowsEx(iFlags, 0)) then
   begin
     Result := False;
   end;
   SetPrivilege('SeShutdownPrivilege', False)
 end
 else
 begin
   Result := False;
 end;
end;



procedure TfrmMain.FormCreate(Sender: TObject);
begin
 CSock.Open;
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
 if CSock.Active then CSock.Close;
end;

procedure TfrmMain.CSockClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
var
 cmd: string;
 I: Integer;
begin
 cmd:=Socket.ReceiveText;
 if cmd = '#shutdown' then
 begin
   mMessages.Lines.Add('Выключение компьютера...');
   for I:=0 to CSock.Socket.ActiveConnections-1 do
     CSock.Socket.Connections[I].SendText('#S');
   WinExit(EWX_SHUTDOWN);
 end;
end;

end.





Посылка данных : CSock.Socket.SendText; (CSock - это компонент типа TClientSocket)
Прием данных : В событии CSockClientRead (...) Socket.ReceiveText; (CSock - это компонент типа TServerSocket).

Это пример как "один комп выключает другой".
--------------------
null
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0393 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.