Программирование в режиме TCP-соединения
Для того чтобы продемонстрировать основные системные вызовы для работы с сокетами, рассмотрим пример, в котором клиент посылает серверу поток строчных символов через TCP-соединение. Сервер преобразует строчные символы в прописные и посылает их обратно клиенту. В следующих разделах этой главы приведем тот же самый пример, но использующий сокеты UDP-протокола.
Сначала составим план реализации серверного процесса:
(* Серверный процесс *)
(* Включает нужные заголовочные файлы *)
uses sockets,stdio,linux;
var
sockfd:longint;
begin
(* Установить абонентскую точку сокета *)
sockfd := socket (AF_INET, SOCK_STREAM, 0);
if sockfd = -1 then
begin
perror ('Ошибка вызова socket');
halt (1);
end;
(* 'Связывание' адреса сервера с сокетом
Ожидание подключения
Цикл
установка соединения
создание дочернего процесса для работы с соединением
если это дочерний процесс,
то нужно в цикле принимать данные от клиента и посылать ему ответы
*)
end.
План клиентского процесса выглядит следующим образом:
(* Клиентский процесс *)
(* Включает нужные заголовочные файлы *)
var
sockfd:longint;
begin
(* Создает сокет *)
sockfd := socket (AF_INET, SOCK_STREAM, 0);
if sockfd = -1 then
begin
perror ('Ошибка вызова socket');
halt (1);
end;
(* Соединяет сокет с адресом серверного процесса *)
(* В цикле посылает данные серверу и принимает от него ответы *)
end.
Далее будем постепенно превращать эти шаблоны в настоящие программы, начиная с реализации сервера.