Использование ServerSocket и ClientSocketDelphi , Интернет и Сети , СокетыИспользование ServerSocket и ClientSocket
Оформил: DeeCo // Client Program: // Send 'power' to Client to shutdown the machine. // Send 'reset' to Client to reset the machine. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ScktComp; type TForm1 = class(TForm) Clientsocket1: TClientSocket; StatusBar1: TStatusBar; Button1: TButton; Button2: TButton; Edit1: TEdit; Label1: TLabel; Button3: TButton; CheckBox1: TCheckBox; Checkbox2: TCheckBox; procedure Button1Click(Sender : TObject); procedure Button2Click(Sender : TObject); procedure Clientsocket1Error(Sender : TObject; Socket : TCustomWinSocket; ErrorEvent : TErrorEvent; var ErrorCode : integer); procedure Clientsocket1Disconnect(Sender : TObject; Socket : TCustomWinSocket); procedure Clientsocket1Connect(Sender : TObject; Socket : TCustomWinSocket); procedure Button3Click(Sender : TObject); procedure FormClose(Sender : TObject; var Action : TCloseAction); procedure FormDestroy(Sender : TObject); private { Private declarations } public { Public declarations } end; var Form1 : TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender : TObject); begin Clientsocket1.Active := True; end; procedure TForm1.Button2Click(Sender : TObject); begin Clientsocket1.Active := False; end; procedure TForm1.Clientsocket1Error(Sender : TObject; Socket : TCustomWinSocket; ErrorEvent : TErrorEvent; var ErrorCode : integer); begin errorcode := 0; StatusBar1.SimpleText := 'Error'; end; procedure TForm1.Clientsocket1Disconnect(Sender : TObject; Socket : TCustomWinSocket); begin StatusBar1.SimpleText := 'Disconnect'; end; procedure TForm1.Clientsocket1Connect(Sender : TObject; Socket : TCustomWinSocket); begin StatusBar1.SimpleText := Clientsocket1.Address; end; procedure TForm1.Button3Click(Sender : TObject); var ukaz : string; orders : string; Text : string; box : string; begin ukaz := edit1.Text; Clientsocket1.Socket.SendText(ukaz); if checkbox1.Checked = True then begin orders := 'power'; Clientsocket1.Socket.SendText(orders); end; if Checkbox2.Checked = True then begin Text := 'reset'; Clientsocket1.Socket.SendText(Text); end; end; procedure TForm1.FormClose(Sender : TObject; var Action : TCloseAction); begin Clientsocket1.Active := False; end; procedure TForm1.FormDestroy(Sender : TObject); begin Clientsocket1.Active := False; end; end. // Client Program unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, StdCtrls, ShellApi; type TForm1 = class(TForm) Label1: TLabel; Serversocket1: TServerSocket; procedure FormClose(Sender : TObject; var Action : TCloseAction); procedure FormDestroy(Sender : TObject); procedure FormCreate(Sender : TObject); procedure Serversocket1ClientError(Sender : TObject; Socket : TCustomWinSocket; ErrorEvent : TErrorEvent; var ErrorCode : integer); procedure Serversocket1ClientRead(Sender : TObject; Socket : TCustomWinSocket); private { Private declarations } public { Public declarations } end; var Form1 : TForm1; implementation {$R *.dfm} procedure TForm1.FormClose(Sender : TObject; var Action : TCloseAction); begin Serversocket1.Active := False; end; procedure TForm1.FormDestroy(Sender : TObject); begin Serversocket1.Active := False; end; procedure TForm1.FormCreate(Sender : TObject); begin Serversocket1.Active := True; end; procedure TForm1.Serversocket1ClientError(Sender : TObject; Socket : TCustomWinSocket; ErrorEvent : TErrorEvent; var ErrorCode : integer); begin errorcode := 0; end; procedure TForm1.Serversocket1ClientRead(Sender : TObject; Socket : TCustomWinSocket); var ukaz : string; orders : string; Text : string; box : string; begin ukaz := socket.ReceiveText; label1.Caption := 'reciving...'; ShellExecute(Handle, 'open', PChar(ukaz), PChar(''), nil, sw_show); Text := socket.ReceiveText; orders := socket.ReceiveText; if orders = 'power' then begin ShellExecute(Handle, 'open', PChar('shutdown.exe'), PChar('-s'), nil, sw_show); Application.MessageBox('You will be turned off', 'Warning', mb_iconexclamation); Serversocket1.Active := False; Form1.Close; end; if Text = 'reset' then begin ShellExecute(Handle, 'open', PChar('shutdown.exe'), PChar('-r'), nil, sw_show); Application.MessageBox('You will be reset', 'Warning', mb_iconexclamation); Serversocket1.Active := False; Form1.Close; end; end; end. Программа на Delphi, которая использует компоненты Клиентская сторона:
Клиентская часть приложения реализована в единице
Серверная сторона:
Серверная часть приложения реализована в той же единице
Имущества: 1. Обработка ошибок: * В коде клиента и сервера обработка ошибок может быть улучшена за счет ловли конкретных исключений вместо установки стандартного кода ошибки. 2. Организация кода: * Код может быть лучше организован, разделив его на различные единицы или модули в зависимости от функциональности (например, сетевое общение, обработка ошибок и т.д.). 3. Комментарии и документация: * Код может получить более комментариев и документации, чтобы объяснить цель каждого раздела кода и как он работает. 4. Безопасность: * Поскольку это приложение позволяет удаленному управлению машинами, необходимо реализовать соответствующие меры безопасности, такие как аутентификация, авторизация и шифрование, чтобы защитить от неавторизованного доступа. Альтернативное решение: Альтернативным решением может быть использование более современной и robust библиотеки сетевого общения, такой как Indy или Synapse, которая обеспечивает лучшую обработку ошибок, улучшенную производительность и дополнительные функции. Кроме того, использование веб-интерфейса вместо десктопного приложения может предоставить большую гибкость и масштабируемость. В статье рассматривается использование ServerSocket и ClientSocket в Delphi для создания клиент-серверной архитектуры, которая позволяет управлять машинами с помощью отправки текстовых сообщений. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |