ServerForm.pas
上传用户:fh681027
上传日期:2022-07-23
资源大小:1959k
文件大小:4k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit ServerForm;
  2. interface
  3. {$WARN UNIT_PLATFORM OFF}
  4. uses
  5.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  6.   ScktComp, StdCtrls, FileCtrl;
  7. const
  8.   wm_RefreshClients = wm_User;
  9. type
  10.   TForm1 = class(TForm)
  11.     ServerSocket1: TServerSocket;
  12.     lbClients: TListBox;
  13.     Label1: TLabel;
  14.     Label2: TLabel;
  15.     lbLog: TListBox;
  16.     FileListBox1: TFileListBox;
  17.     procedure ServerSocket1ClientConnect(Sender: TObject;
  18.       Socket: TCustomWinSocket);
  19.     procedure ServerSocket1ClientDisconnect(Sender: TObject;
  20.       Socket: TCustomWinSocket);
  21.     procedure ServerSocket1ClientRead(Sender: TObject;
  22.       Socket: TCustomWinSocket);
  23.   public
  24.     procedure RefreshClients (var Msg: TMessage);
  25.       message wm_RefreshClients;
  26.   end;
  27. var
  28.   Form1: TForm1;
  29. implementation
  30. {$R *.DFM}
  31. procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  32.   Socket: TCustomWinSocket);
  33. begin
  34.   lbLog.Items.Add ('Connected: ' +
  35.     Socket.RemoteHost + ' (' +
  36.     Socket.RemoteAddress + ')' );
  37. end;
  38. procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
  39.   Socket: TCustomWinSocket);
  40. begin
  41.   lbLog.Items.Add ('Disconnected: ' +
  42.     Socket.RemoteHost + ' (' +
  43.     Socket.RemoteAddress + ')' );
  44. end;
  45. procedure TForm1.RefreshClients;
  46. begin
  47. end;
  48. procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  49.   Socket: TCustomWinSocket);
  50. var
  51.   strCommand, strFile, strFeedback: string;
  52. begin
  53.   // read from the client
  54.   strCommand := Socket.ReceiveText;
  55.   lbLog.Items.Add ('Client: ' + Socket.RemoteAddress + ': ' +
  56.     strCommand);
  57.   // extract the file name (all commands have 5 characters)
  58.   strFile := Copy (strCommand, 6, Length (strCommand) - 5);
  59.   // execute program
  60.   if Pos ('EXEC!', strCommand) = 1 then
  61.   begin
  62.     if FileExists (strFile) and (
  63.         WinExec (pChar (strFile), sw_ShowNormal) > 31) then
  64.       strFeedback := 'ERROR' + strFile + ' activated'
  65.     else
  66.       strFeedback := 'ERROR' + strFile + ' not found';
  67.     Socket.SendText (strFeedback);
  68.   end
  69.   
  70.   // send back a text file
  71.   else if Pos ('TEXT!', strCommand) = 1 then
  72.   begin
  73.     if FileExists (strFile) then
  74.     begin
  75.       strFeedback := 'TEXT!';
  76.       Socket.SendText (strFeedback);
  77.       Socket.SendStream (TFileStream.Create (
  78.         strFile, fmOpenRead or fmShareDenyWrite));
  79.     end
  80.     else
  81.     begin
  82.       strFeedback := 'ERROR' + strFile + ' not found';
  83.       Socket.SendText (strFeedback);
  84.     end;
  85.   end
  86.   // send back a bitmap file
  87.   else if Pos ('BITM!', strCommand) = 1 then
  88.   begin
  89.     if FileExists (strFile) then
  90.     begin
  91.       strFeedback := 'BITM!';
  92.       Socket.SendText (strFeedback);
  93.       Socket.SendStream (TFileStream.Create (
  94.         strFile, fmOpenRead or fmShareDenyWrite));
  95.     end
  96.     else
  97.     begin
  98.       strFeedback := 'ERROR' + strFile + ' not found';
  99.       Socket.SendText (strFeedback);
  100.     end;
  101.   end
  102.   // send back a directory listing
  103.   else if Pos ('LIST!', strCommand) = 1 then
  104.   begin
  105.     if DirectoryExists (strFile) then
  106.     begin
  107.       strFeedback := 'LIST!';
  108.       Socket.SendText (strFeedback);
  109.       FileListBox1.Directory := strFile;
  110.       Socket.SendText (FileListBox1.Items.Text);
  111.     end
  112.     else
  113.     begin
  114.       strFeedback := 'ERROR' + strFile + ' not found';
  115.       Socket.SendText (strFeedback);
  116.     end;
  117.   end
  118.   else
  119.   begin
  120.     strFeedback := 'ERROR' + 'Undefined command: ' + strCommand;
  121.     Socket.SendText (strFeedback);
  122.   end;
  123.   // log result
  124.   lbLog.Items.Add (strFeedback);
  125. end;
  126. end.