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

Delphi控件源码

开发平台:

Delphi

  1. unit ServerForm;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   ScktComp, StdCtrls, Grids, DBGrids, Db, DBTables, ComCtrls;
  6. const
  7.   wm_RefreshClients = wm_User;
  8. type
  9.   TForm1 = class(TForm)
  10.     PageControl1: TPageControl;
  11.     TabSheet1: TTabSheet;
  12.     TabSheet2: TTabSheet;
  13.     Label1: TLabel;
  14.     lbClients: TListBox;
  15.     lbLog: TListBox;
  16.     ServerSocket1: TServerSocket;
  17.     Table1: TTable;
  18.     DataSource1: TDataSource;
  19.     DBGrid1: TDBGrid;
  20.     Table1Company: TStringField;
  21.     Table1CompID: TFloatField;
  22.     Table1Address: TStringField;
  23.     Table1State: TStringField;
  24.     Table1Country: TStringField;
  25.     Table1Email: TStringField;
  26.     Table1Contact: TStringField;
  27.     Table1LoggedBy: TStringField;
  28.     Table1LoggetOn: TDateField;
  29.     procedure ServerSocket1ClientConnect(Sender: TObject;
  30.       Socket: TCustomWinSocket);
  31.     procedure ServerSocket1ClientDisconnect(Sender: TObject;
  32.       Socket: TCustomWinSocket);
  33.     procedure FormCreate(Sender: TObject);
  34.     procedure ServerSocket1ClientRead(Sender: TObject;
  35.       Socket: TCustomWinSocket);
  36.   private
  37.     { Private declarations }
  38.   public
  39.     procedure RefreshClients (var Msg: TMessage);
  40.       message wm_RefreshClients;
  41.   end;
  42. var
  43.   Form1: TForm1;
  44. implementation
  45. {$R *.DFM}
  46. procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  47.   Socket: TCustomWinSocket);
  48. begin
  49.   lbLog.Items.Add ('Connected: ' +
  50.     Socket.RemoteHost + ' (' +
  51.     Socket.RemoteAddress + ')' );
  52.   PostMessage (Handle, wm_RefreshClients, 0, 0);
  53. end;
  54. procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
  55.   Socket: TCustomWinSocket);
  56. begin
  57.   lbLog.Items.Add ('Disconnected: ' +
  58.     Socket.RemoteHost + ' (' +
  59.     Socket.RemoteAddress + ')' );
  60.   PostMessage (Handle, wm_RefreshClients, 0, 0);
  61. end;
  62. procedure TForm1.RefreshClients;
  63. var
  64.   I: Integer;
  65. begin
  66.   lbClients.Clear;
  67.   for I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
  68.     with ServerSocket1.Socket.Connections [I] do
  69.       lbClients.Items.Add (
  70.         RemoteAddress + ' (' + RemoteHost + ')');
  71. end;
  72. procedure TForm1.FormCreate(Sender: TObject);
  73. begin
  74.   // use a table in the current directory
  75.   Table1.DatabaseName :=
  76.     ExtractFilePath (Application.ExeName);
  77.   // create the table, if it doens't exist
  78.   if not Table1.Exists then
  79.     Table1.CreateTable;
  80.   Table1.Active := True;
  81. end;
  82. procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  83.   Socket: TCustomWinSocket);
  84. var
  85.   strCommand: string;
  86.   strFeedback: string;
  87.   Data: TStringList;
  88.   I: Integer;
  89. begin
  90.   // read from the client
  91.   strCommand := Socket.ReceiveText;
  92.   lbLog.Items.Add (strCommand);
  93.   // reassemble the data
  94.   Data := TStringList.Create;
  95.   try
  96.     Data.Text := strCommand;
  97.     // new record
  98.     Table1.Insert;
  99.     // set the fields using the strings
  100.     for I := 0 to Table1.FieldCount - 1 do
  101.       Table1.Fields [I].AsString :=
  102.         Data.Values [Table1.Fields[I].FieldName];
  103.     // complete with random ID, sender, and date
  104.     Table1CompID.AsInteger := GetTickCount;
  105.     Table1LoggedBy.AsString := Socket.RemoteAddress;
  106.     Table1LoggetOn.AsDateTime := Date;
  107.     Table1.Post;
  108.     // get the value to return
  109.     strFeedback := Table1CompID.AsString;
  110.     // send results back
  111.     lbLog.Items.Add (strFeedback);
  112.     Socket.SendText (strFeedback);
  113.   finally
  114.     Data.Free;
  115.   end;
  116. end;
  117. end.