Основы операционных систем. Практикум




Пример простого TCP-сервера - часть 2


Заметим, что информация о клиенте у нас в дальнейшем никак не используется, поэтому вместо второго и третьего параметров можно было поставить значения NULL. */ if((newsockfd = accept(sockfd, (struct sockaddr *) &cliaddr, &clilen)) < 0){ perror(NULL); close(sockfd); exit(1); } /* В цикле принимаем информацию от клиента до тех пор, пока не произойдет ошибки (вызов read() вернет отрицательное значение) или клиент не закроет соединение (вызов read() вернет значение 0). Максимальную длину одной порции данных от клиента ограничим 999 символами. В операциях чтения и записи пользуемся дескриптором присоединенного сокета, т. е. значением, которое вернул вызов accept().*/ while((n = read(newsockfd, line, 999)) > 0){ /* Принятые данные отправляем обратно */ if((n = write(newsockfd, line, strlen(line)+1)) < 0){ perror(NULL); close(sockfd); close(newsockfd); exit(1); } } /* Если при чтении возникла ошибка – завершаем работу */ if(n < 0){ perror(NULL); close(sockfd); close(newsockfd); exit(1); } /* Закрываем дескриптор присоединенного сокета и уходим ожидать нового соединения */ close(newsockfd); } }

Листинг 15-16.4. Программа 15–16-4.c . Пример простого TCP-сервера для сервиса echo.

Наберите и откомпилируйте программу. Запустите ее на выполнение. Модифицируйте текст программы TCP-клиента (программа 15–16-3.c), заменив номер порта с 7 на 51000. Запустите клиента с другого виртуального терминала или с другого компьютера и убедитесь, что клиент и сервер взаимодействуют корректно.




Содержание  Назад  Вперед