C. Сетевое программирование. Simple client for Unix

 Небольшое приложенице на Си для Unix систем. Прекрасно взаимодействует с приложениями на основе WinSock (Win32 платформы). Но все же работа сокетов на Unix и Win32 платформах требует аккуратности и внимательности. Отличия-то имеются!


// Содержит прототипы функций библиотеки Socket API
#include <sys/socket.h>
// Содержит объявления стандартных системных типов данных
#include <sys/types.h>
// Содержит объявления дополнительных типов данных
#include <resolv.h>
// Для вызова стандартных низкоуровневых функций ввода-вывода для приема и передачи данных
#include <unistd.h>
// Для работы со строками
#include <stdio.h>


// Номер порта для соединения с сервером
#define PORT_TIME 80
// Размер буфера
#define MAXBUF 1024

void main () {

    // Объявляем дескриптор сокета sd
    int sd;
    // Адрес сервера
    char *host = "192.168.0.10";
    // Создаем буфер
    char buffer[MAXBUF];
    // Отправляемое на сервер сообщение
    char *sendbuf = "Hello mister tester. I am glad to see you.";
   
    // Создание структуры для функции connect()
    struct sockaddr_in dest;

    // Системный вызов сокета. По-сути инициализация канала связи
    // domain = PF_INET, type = SOCK_STREAM, protocol = 0
    // int socket(int domain, int type, int protocol);

    // Вызов протокола TCP
    // В sd помещается дескриптор сокета
    sd = socket(PF_INET, SOCK_STREAM, 0);

    // Обнуляем структуру
    bzero(&dest, sizeof(dest));
    // Выбираем протокол
    dest.sin_family = AF_INET;
    // Функции htons() и inet_aton() выполняют преобразования типов данных
    // Выбираем порт
    dest.sin_port = htons(PORT_TIME);
    // Задаем адрес
    inet_aton(host, &dest.sin_addr);

    // Подключаемся к серверу
    if (connect(sd, &dest, sizeof(dest)) != 0) {
        printf("connect() filed");
    }
    // Заносим сообщение в буфер
    //sprintf(buffer, "%s\n", sendbuf);
    // Отправляем на сервер данные в буфере
    //send(sd, buffer, strlen(bufer), 0);
    send(sd, sendbuf, strlen(sendbuf), 0);
    // Обнуляем буфер; для приема ответа от сервера
    bzero(buffer, MAXBUF);
    // Принимаем ответ сервера
    recv(sd, buffer, MAXBUF-1, 0);
    // Выводим на консоль содержимое ответа
    printf("%s", buffer);
    // Закрываем сокет
    close(sd);
}

Good luck, friends :)