Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / Лекция 8.docx
Скачиваний:
151
Добавлен:
17.06.2016
Размер:
133.75 Кб
Скачать

Листинг 2 – Пример клиента, использующего потоковые сокеты

/* Код клиента на языке Си */

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

int main(void) {

/*структура для адресной информации*/

struct sockaddr_in stSockAddr;

int errRes;

/*1.создание клиентского сокета для взаимодействия с сервером*/

int clientSocketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

if (clientSocketFD == -1) {

perror("Ошибка: невозможно создать сокет");

return EXIT_FAILURE;

}

/*Обнуляем и заполняем структуру, описывающую адресную информацию сервера*/

memset(&stSockAddr, 0, sizeof (stSockAddr));

stSockAddr.sin_family = PF_INET;

stSockAddr.sin_port = htons(1100);

errRes = inet_pton(PF_INET, "127.0.0.1", &stSockAddr.sin_addr);

if (errRes < 0) {

perror("Ошибка: первый параметр не относится к категории корректных адресов");

close(clientSocketFD);

return EXIT_FAILURE;

} else if (!errRes) {

perror("Ошибка: второй параметр не содержит корректного IP-адреса");

close(clientSocketFD);

return EXIT_FAILURE;

}

/*2. Подключаемся */

if (connect(clientSocketFD, (const void*) &stSockAddr, sizeof (stSockAddr)) == -1) {

perror("Ошибка: соединения");

close(clientSocketFD);

return EXIT_FAILURE;

}

/* выполнение операций чтения и записи ... */

shutdown(clientSocketFD, SHUT_RDWR);

close(clientSocketFD);

return 0;

}

Соседние файлы в папке Лекции