Skip to content

Instantly share code, notes, and snippets.

@mmmunk
Last active March 25, 2020 17:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mmmunk/54063d710f52c3a138aab698d60bcf05 to your computer and use it in GitHub Desktop.
Save mmmunk/54063d710f52c3a138aab698d60bcf05 to your computer and use it in GitHub Desktop.
Base principles for Indy Server and Client in Delphi (with extra clients in other frameworks too)
program Client; {$APPTYPE CONSOLE}
uses
Windows, SysUtils, IdTCPClient;
var
TcpClient: TIdTCPClient;
S: string;
begin
try
TcpClient:=TIdTCPClient.Create;
WriteLn('Hej - jeg er en adderings-klient!');
Write('Angiv serverens IP: ');
ReadLn(S);
TcpClient.Host:=S;
Write('Angiv serverens port: ');
ReadLn(S);
TcpClient.Port:=StrToInt(S);
WriteLn('Connecting...');
TcpClient.Connect;
WriteLn('Klar til input til server!');
repeat
Write('Tal --> ');
ReadLn(S);
if S <> '' then
begin
TcpClient.IOHandler.WriteLn(S);
WriteLn('Svar: ', TcpClient.IOHandler.ReadLn);
end;
until S = '';
Write('Farvel');
TcpClient.Disconnect;
TcpClient.Free;
except
on E: Exception do WriteLn('Fejl: ', E.Message, ' - afslutter!');
end;
end.
program Client_Synapse; {$apptype console}
uses
blcksock in 'lib\blcksock.pas'; //Synapse
var
Socket: TBlockSocket; //or use TTCPBlockSocket?
S: AnsiString;
begin
Socket:=TBlockSocket.Create;
Socket.Connect('127.0.0.1', '7766');
Socket.SendString('555'+sLineBreak);
S:=Socket.RecvString(2000);
WriteLn(S);
Socket.Free;
end.
program Server; {$APPTYPE CONSOLE}
uses
Windows, Messages, SysUtils, IdGlobal, IdContext,
IdBaseComponent, IdComponent, IdCustomTCPServer, IdTCPServer;
type
TServerApp = class
private
TcpServer: TIdTCPServer;
Sum: Int64;
procedure TcpConnect(AContext: TIdContext);
procedure TcpExecute(AContext: TIdContext);
procedure TcpDisconnect(AContext: TIdContext);
public
constructor Create;
procedure Run;
end;
var
ServerApp: TServerApp;
constructor TServerApp.Create;
begin
inherited;
WriteLn('Hej - jeg er en adderings-server!');
TcpServer:=TIdTCPServer.Create;
TcpServer.OnConnect:=TcpConnect;
TcpServer.OnExecute:=TcpExecute;
TcpServer.OnDisconnect:=TcpDisconnect;
TcpServer.Bindings.Clear;
TcpServer.Bindings.Add.SetBinding('0.0.0.0', 7766, Id_IPv4);
TcpServer.StartListening;
TcpServer.Active:=True;
end;
procedure TServerApp.Run;
var
Msg: TMsg;
begin
WriteLn('Klar til kommandoer...');
while GetMessage(Msg, 0, 0, 0) do DispatchMessage(Msg);
end;
procedure TServerApp.TcpConnect(AContext: TIdContext);
begin
with AContext.Binding do WriteLn('Client connected from ', PeerIP, ':', PeerPort);
end;
procedure TServerApp.TcpDisconnect(AContext: TIdContext);
begin
WriteLn('Client disconnected');
end;
procedure TServerApp.TcpExecute(AContext: TIdContext);
var
Number, Answer: string;
begin
Number:=AContext.Connection.IOHandler.ReadLn;
try
Inc(Sum, StrToInt64(Number));
Answer:='Sum is now '+IntToStr(Sum);
except
Answer:=Number+' is not a number';
end;
AContext.Connection.IOHandler.WriteLn(Answer);
WriteLn('Send to client: ', Answer);
//AContext.Connection.Disconnect
end;
begin
ServerApp:=TServerApp.Create;
ServerApp.Run;
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment