(* Клиентский процесс *)
uses sockets,stdio,linux;

const
  SIZE=sizeof(tinetsockaddr);
  
  (* Локальный порт на клиенте *)
  client:tinetsockaddr = (family:AF_INET; port:INADDR_ANY; addr:INADDR_ANY);

  (* Адрес удаленного сервера *)
  server:tinetsockaddr = (family:AF_INET; port:7000);

var
  sockfd:longint;
  c:char;
begin
  (* Преобразовать и записать IP адрес *)
  server.addr := inet_addr ('127.0.0.1');

  (* Установить абонентскую точку сокета *)
  sockfd := socket (AF_INET, SOCK_DGRAM, 0);
  if sockfd = -1 then
  begin
    perror ('Ошибка вызова socket');
    halt (1);
  end;

  (* Связать локальный адрес с абонентской точкой сокета. *)
  if not bind (sockfd, client, SIZE) then
  begin
    perror ('Ошибка вызова bind');
    halt (1);
  end;

  (* Считать символ с клавиатуры *)
  while fdread (0, c, 1) <> 0 do
  begin
    (* Передать символ серверу *)
    if sendto (sockfd, c, 1, 0, tsockaddr(server), SIZE) = -1 then
    begin
      perror ('Клиент: ошибка передачи');
      continue;
    end;

    (* Принять вернувшееся сообщение *)
    if recv (sockfd, c, 1, 0) = -1 then
    begin
      perror ('Клиент: ошибка приема');
      continue;
    end;

    fdwrite (1, c, 1);
  end;
end.
