Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

dopmat / block4 / netserver

.c
Скачиваний:
7
Добавлен:
15.03.2015
Размер:
2.48 Кб
Скачать
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h> 
#include <sys/socket.h>
#include <netinet/in.h>

#define BUF_SIZE 256

int main(int argc, char ** argv)
{
     int sock, newsock, port, clen;
     char buf[BUF_SIZE];
     struct sockaddr_in serv_addr, cli_addr;
     if (argc < 2) //проверка количества введенных аргументов
     {
         fprintf(stderr,"usage: %s <port_number>\n", argv[0]);
         return EXIT_FAILURE;
     }
     sock = socket(AF_INET, SOCK_STREAM, 0); //создание потокового сокета в пространстве имен интернета
     if (socket < 0) //проверка ошибок
     {
       printf("socket() failed: %d\n", errno);
       return EXIT_FAILURE;
     }
     memset((char *) &serv_addr, 0, sizeof(serv_addr)); //заполнение адреса сервера нулями
     port = atoi(argv[1]); //конвертация в цифровой вид
     serv_addr.sin_family = AF_INET; //инициализация семейства адресов
     serv_addr.sin_addr.s_addr = INADDR_ANY; //регистрация программы-сервера на компьютере
     serv_addr.sin_port = htons(port); //преобразование числа в сетевой формат
     if (bind(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) //связь сокета с адресом сервера из srvr_addr
     {
       printf("bind() failed: %d\n", errno);
       return EXIT_FAILURE;
     }
     listen(sock, 1); //ожидание запроса на соединение
     clen = sizeof(cli_addr);
     newsock = accept(sock, (struct sockaddr *) &cli_addr, &clen); //установка соединения в ответ на запрос клиента
     if (newsock < 0) //проверка ошибок
     {
       printf("accept() failed: %d\n", errno);
       return EXIT_FAILURE;
     }
     memset(buf, 0, BUF_SIZE); //заполнение буфера нулями
     read(newsock, buf, BUF_SIZE-1); //считывание содержимого сокета в буфер
     buf[BUF_SIZE] = 0;
     printf("MSG: %s\n", buf); //вывод буфера
     write(newsock, "OK", 2); //запись ОК в сокет
     close(newsock); //закрытие сокета
     close(sock); //закрытие прослушивающего сокета
}
Соседние файлы в папке block4