Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#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