pascalabcnet/bin/Lib/ClientServer.pas

92 lines
2.3 KiB
ObjectPascal
Raw Normal View History

// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt)
2017-05-27 21:06:12 +03:00
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
unit ClientServer;
uses System.Net, System.Net.Sockets, System.IO;
var
2016-01-06 02:03:10 +03:00
servername := '127.0.0.1';
port := 13000;
/// Запускает сервер, принимающий от клиента строку и выполняющий указанное действие
2016-01-06 02:03:10 +03:00
procedure RunServer(OnProcessCommand: string -> ());
begin
2016-01-06 02:03:10 +03:00
var server := new TcpListener(IPAddress.Any, port);
server.Start();
while (true) do
begin
var client := server.AcceptTcpClient();
var stream := client.GetStream();
var br := new BinaryReader(stream);
var data := br.ReadString();
br.Close();
2016-01-06 02:03:10 +03:00
stream.Close();
client.Close();
OnProcessCommand(data);
end;
end;
/// Запускает сервер, принимающий от клиента строку, выполняющий указанное действие и отправляющий строку в ответ
2016-01-06 02:03:10 +03:00
procedure RunServer(OnProcessCommand: string -> string);
begin
var server := new TcpListener(IPAddress.Any, port);
server.Start();
2016-01-06 02:03:10 +03:00
while (true) do
begin
var client := server.AcceptTcpClient();
var stream := client.GetStream();
var br := new BinaryReader(stream);
var data := br.ReadString();
data := OnProcessCommand(data);
var bw := new BinaryWriter(stream);
bw.Write(data);
2017-06-06 05:24:32 +03:00
bw.Flush();
2016-01-06 02:03:10 +03:00
stream.Close();
client.Close();
end;
end;
/// Вызывается Клиентом для отправки команды Серверу
procedure SendCommand(s: string);
begin
2016-01-06 02:03:10 +03:00
var client := new TcpClient(servername,port);
var stream := client.GetStream();
var bw := new BinaryWriter(stream);
bw.Write(s);
2017-06-06 05:24:32 +03:00
bw.Flush();
stream.Close();
client.Close();
end;
/// Вызывается Клиентом для отправки команды Серверу и получения ответа
2016-01-06 02:03:10 +03:00
function SendCommandAndReceiveAnswer(s: string): string;
begin
var client := new TcpClient(servername,port);
var stream := client.GetStream();
var bw := new BinaryWriter(stream);
bw.Write(s);
2017-06-06 05:24:32 +03:00
bw.Flush();
2016-01-06 02:03:10 +03:00
var br := new BinaryReader(stream);
Result := br.ReadString();
stream.Close();
client.Close();
end;
begin
end.