Project SERVER1
Project Structure
SERVER1.DPR
program Server1;
uses
Forms,
ServerForm in 'ServerForm.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
SERVERFORM.PAS
unit ServerForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, StdCtrls;
const
wm_RefreshClients = wm_User;
type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
lbMsg: TListBox;
lbClients: TListBox;
Label1: TLabel;
Label2: TLabel;
lbLog: TListBox;
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
procedure RefreshClients (var Msg: TMessage);
message wm_RefreshClients;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
lbLog.Items.Add ('Connected: ' +
Socket.RemoteHost + ' (' +
Socket.RemoteAddress + ')' );
PostMessage (Handle, wm_RefreshClients, 0, 0);
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
lbLog.Items.Add ('Disconnected: ' +
Socket.RemoteHost + ' (' +
Socket.RemoteAddress + ')' );
PostMessage (Handle, wm_RefreshClients, 0, 0);
end;
procedure TForm1.RefreshClients;
var
I: Integer;
begin
lbClients.Clear;
for I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
with ServerSocket1.Socket.Connections [I] do
lbClients.Items.Add (
RemoteAddress + ' (' + RemoteHost + ')');
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
// read from the client
lbMsg.Items.Add (Socket.RemoteHost + ': ' +
Socket.ReceiveText);
end;
end.
SERVERFORM.DFM
object Form1: TForm1
Left = 192
Top = 107
Width = 518
Height = 353
Caption = 'Server'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 16
Top = 8
Width = 31
Height = 13
Caption = 'Clients'
end
object Label2: TLabel
Left = 192
Top = 8
Width = 48
Height = 13
Caption = 'Messages'
end
object lbMsg: TListBox
Left = 192
Top = 24
Width = 305
Height = 217
ItemHeight = 13
TabOrder = 0
end
object lbClients: TListBox
Left = 16
Top = 24
Width = 161
Height = 217
ItemHeight = 13
TabOrder = 1
end
object lbLog: TListBox
Left = 16
Top = 248
Width = 481
Height = 73
ItemHeight = 13
TabOrder = 2
end
object ServerSocket1: TServerSocket
Active = True
Port = 50
ServerType = stNonBlocking
OnClientConnect = ServerSocket1ClientConnect
OnClientDisconnect = ServerSocket1ClientDisconnect
OnClientRead = ServerSocket1ClientRead
Left = 72
Top = 40
end
end
|