2019-07-28 23:53:15 +03:00
|
|
|
// 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)
|
2016-01-05 13:10:24 +03:00
|
|
|
unit ClientServer;
|
|
|
|
|
|
|
|
|
|
uses System.Net, System.Net.Sockets, System.IO;
|
|
|
|
|
|
|
|
|
|
var
|
2016-01-06 02:03:10 +03:00
|
|
|
servername := '127.0.0.1';
|
2016-01-05 13:10:24 +03:00
|
|
|
port := 13000;
|
|
|
|
|
|
2019-10-08 17:17:18 +03:00
|
|
|
/// Запускает сервер, принимающий от клиента строку и выполняющий указанное действие
|
2016-01-06 02:03:10 +03:00
|
|
|
procedure RunServer(OnProcessCommand: string -> ());
|
2016-01-05 13:10:24 +03:00
|
|
|
begin
|
2016-01-06 02:03:10 +03:00
|
|
|
var server := new TcpListener(IPAddress.Any, port);
|
2016-01-05 13:10:24 +03:00
|
|
|
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;
|
|
|
|
|
|
2019-10-08 17:17:18 +03:00
|
|
|
/// Запускает сервер, принимающий от клиента строку, выполняющий указанное действие и отправляющий строку в ответ
|
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-05 13:10:24 +03:00
|
|
|
|
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
|
|
|
|
2016-01-05 13:10:24 +03:00
|
|
|
stream.Close();
|
|
|
|
|
client.Close();
|
|
|
|
|
end;
|
|
|
|
|
end;
|
|
|
|
|
|
2019-10-08 17:17:18 +03:00
|
|
|
/// Вызывается Клиентом для отправки команды Серверу
|
2016-01-05 13:10:24 +03:00
|
|
|
procedure SendCommand(s: string);
|
|
|
|
|
begin
|
2016-01-06 02:03:10 +03:00
|
|
|
var client := new TcpClient(servername,port);
|
2016-01-05 13:10:24 +03:00
|
|
|
var stream := client.GetStream();
|
|
|
|
|
|
|
|
|
|
var bw := new BinaryWriter(stream);
|
|
|
|
|
bw.Write(s);
|
2017-06-06 05:24:32 +03:00
|
|
|
bw.Flush();
|
|
|
|
|
|
2016-01-05 13:10:24 +03:00
|
|
|
stream.Close();
|
|
|
|
|
client.Close();
|
|
|
|
|
end;
|
|
|
|
|
|
2019-10-08 17:17:18 +03:00
|
|
|
/// Вызывается Клиентом для отправки команды Серверу и получения ответа
|
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;
|
|
|
|
|
|
|
|
|
|
|
2016-01-05 13:10:24 +03:00
|
|
|
begin
|
2019-10-08 17:17:18 +03:00
|
|
|
end.
|