Last active
March 25, 2020 17:03
-
-
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)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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