Книга: TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security)

21.7 Клиентская программа TCP

Клиент соединяется с сервером, посылает одно сообщение, и далее работа программы завершается (фрагменты программы рассматриваются в следующем разделе). Для запуска программы конечный пользователь должен ввести имя хоста сервера, номер порта и сообщение, которое будет послано на этот сервер. Например:

tcpclient pltim.cs.yale.edu 1356 hello
/* tcpclient.с
 * Перед запуском клиента должен быть запущен сервер. Производится
 * поиск порта сервера. Для запуска клиента нужно ввести:
  * tcpclient имя_хоста порт сообщение */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <errno.h>
main(argc, argv) /* Клиентская программа имеет входные аргументы. */
int argc;
char* argv[];
{
 int sock;
 struct sockaddr_in servAddr;
 struct hostent *hp, *gethostbyname();
 /* Аргументами будут 0:имя_программы, 1:имя_хоста, 2:порт, 3:сообщение */
 if (argc < 4) {
  printf("ВВЕСТИ tcpclient имя_хоста порт сообщениеn");
  exit(1);
 }
 /* 1. Создание TCB. */
 if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
  perror("He могу получить socketn");
  exit(1);
 }
 /* 2. Заполнить поля адреса и порта сервера в servAddr.
  * Сначала заполнить нулями адресную структуру. Затем получить IP-адрес
  * для данного имени хоста и ввести его в адресную структуру.
  * Наконец ввести номер порта, взяв его из argv[2]. */
 bzero((char *)&servAddr, sizeof(servAddr));
 servAddr.sin_family = AF_INET;
 hp = gethostbyname (argv[1]);
 bcopy(hp->h_addr, &servAddr.sin_addr, hp->h_length);
 servAddr.sin_port = htons(atoi(argv[2]));
 /* 3. Соединиться с сервером. Вызывать bind не нужно.
  * Система присвоит свободный порт во время выполнения соединения. */
 if (connect (sock, &servAddr, sizeof(servAddr)) < 0) {
  perror("Клиент не может соединиться.n");
  exit(1);
 }
 /* 4. Клиент анонсирует свою готовность послать сообщение.
  * Сообщение отправляется, и распечатывается последняя строка. */
 printf ("CLIENT: Готов к пересылкеn");
 if (send(sock, argv[3], strlen(argv[3]), 0) < 0) {
  (perror("Проблемы с пересылкой.n");
  exit(1);
 }
 printf ("CLIENT: Пересылка завершена. Счастливо оставаться.n");
 close(sock);
 exit(0);
}

Оглавление книги

Оглавление статьи/книги

Генерация: 1.392. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз