Семинары (1171138), страница 10
Текст из файла (страница 10)
Отправить собранному в примере 3 эхосерверу сообщение и получить ответ.Результат выполненияЗадание 1:Структура приложения-клиента TCPWSAStartupsocketconnectsendrecvclosesocketWSACleanup10Изменив исходные коды UDP клиента и примеров 3 и 4, написать TCP клиент дляпоследующей работы с эхо-сервером. Клиент должен считывать из консоли адрес и порт покоторыс сервер принимает соединения (сервер принимает соединения на все свои ip-адресапо порту 777). Отладку клиента производить с приложением sr1.exe.Исходный код TCP клиентаРезультат выполнения11Контрольные вопросы1.2.3.4.5.6.7.8.Понятие сокета?Типы сокетов?Создание сокета?Понятие IP адреса?Связывание сокета?Создание канала связи?Передача данных?UDP-клиент?СПИСОК ЛИТЕРАТУРЫ1. Ватолин Д. С.
Алгоритмы сжатия изображений. Методическое пособие: М.:Издательский отдел факультета Вычислительной Математики и Кибернетики МГУим. М.В.Ломоносова, 1999 г. — 76 с.2. Стивенс У., UNIX: Разработка сетевых приложений. - СПб.: Питер, 20043. Шмидт Д., Хьюстон С. Программирование сетевых приложений на C++. Том1. —Бином-Пресс, 2003.
— С. 304.4. Дейтел Х. М. Как программировать на С++: Пер. с англ. – М.: ЗАО «ИздательствоБИНОМ», 2000 г. – 1024 с.: ил.5. Страуструп Б. Язык программирования С++. Специальное издание: ++: Пер. с англ. –М.: ЗАО «Издательство БИНОМ», 2008 г. – 1104 с. :ил.6. Шилдт Г. Полный справочник по С++: ++: Пер. с англ. – М.: Изд-во Вильямс, 2007 г.– 800 с.: ил.7.
Шилдт Г. С++: Базовый курс: ++: Пер. с англ. – М.: Изд-во Вильямс, 2008 г. – 624 с.:ил.12датаОтчет по лабораторной работе №11«Основы C++, работа с сокетами. Часть2.»ОценкаБонус заподпись(max 5)сложностьЦели работы:Изучение принципов функционированияпрограммированием сокетов и потоков.сетевыхсоединений,ознакомлениесЗадачи работы:-ознакомление с понятием сетевого соединения и сокетов-разработка серверного приложенияКраткий конспект теоретической части (ответы на контрольные вопросы)Понятие сокета___________ ________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________Типы сокетов________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________Создание сокетов__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________Понятие IP адреса_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________Связывание сокета____________________ _______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________Создание канала связи (клиент/сервер)__________________________________________________________________ _____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________Передача данных _________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________Понятие callback-фукнции ___________________________________________________________________________ ________________________________________________________________________________________________________________________________________________________________________________________________________________1_____________________________________________________________________________Понятие процесса и потока _________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________Клиент-сервер UDP/TCP____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________Текстовый чат____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________2Основы C++, работа с сокетами.
Часть2.Пример 1: Создание канала связи: сервер.Если вы собираетесь передавать датаграммные сообщения при помощи протокола негарантированной доставкиUDP , канал связи не нужен. Сразу после создания сокетов и их инициализации можно приступать к передачеданных. Но для передачи данных с использованием протокола TCP необходимо создать канал связи.Со стороны клиента связь устанавливается с помощью стандартной функции connect:int connect (SOCKET s, const struct sockaddr FAR* name, int namelenСервер:сервер переходит в режим ожидания подключений, вызывая функцию "int listen (SOCKET s, int backlog)", где s дескриптор сокета, а backlog - максимально допустимый размер очереди сообщений.извлечение запросов на соединение из очереди осуществляется функцией "SOCKET accept (SOCKET s, structsockaddr FAR* addr, int FAR* addrlen)", которая автоматически создает новый сокет, выполняет связывание ивозвращает его дескриптор, а в структуру sockaddr заносит сведения о подключившемся клиенте (IP-адрес ипорт).
Если в момент вызова accept очередь пуста, функция не возвращает управление до тех пор, пока ссервером не будет установлено хотя бы одно соединение. В случае возникновения ошибки функция возвращаетотрицательное значение.Для параллельной работы с несколькими клиентами следует сразу же после извлечения запроса из очередипорождать новый поток (процесс), передавая ему дескриптор созданного функцией accept сокета, затем вновьизвлекать из очереди очередной запрос и т.д. В противном случае, пока не завершит работу один клиент, северне сможет обслуживать всех остальных.Сервер:после того как соединение установлено, потоковые сокеты могут обмениваться с удаленным узлом данными,вызывая функции "int send (SOCKET s, const char FAR * buf, int len,int flags)" и "int recv (SOCKET s, char FAR*buf, int len, int flags)" для посылки и приема данных соответственно.Функция send возвращает управление сразу же после ее выполнения, независимо от того, получила липринимающая сторона наши данные или нет.Функция же recv возвращает управление только после того, какполучит хотя бы один байт.Работой обоих функций можно управлять с помощью флагов, передаваемых в одной переменной типа intтретьим слева аргументом.
Эта переменная может принимать одно из двух значений: MSG_PEEK и MSG_OOB.Флаг MSG_PEEK заставляет функцию recv просматривать данные вместо их чтения. Просмотр в отличие отчтения не уничтожает просматриваемые данные. Некоторые источники утверждают, что при взведенном флагеMSG_PEEK функция recv не задерживает управления, если в локальном буфере нет данных, доступных длянемедленного получения. Это неверно! Аналогично, иногда приходится встречать откровенно ложноеутверждение о том, что якобы функция send со взведенным флагом MSG_PEEK возвращает количество ужепереданных байт (вызов send не блокирует управления).
На самом деле функция send игнорирует этот флаг!Флаг MSG_OOB предназначен для передачи и приема срочных (Out Of Band) данных. Срочные данные неимеют преимущества перед другими при пересылке по сети, а всего лишь позволяют оторвать клиента отнормальной обработки потока обычных данных и сообщить ему "срочную" информацию. Если данныепередавались функцией send с установленным флагом MSG_OOB, для их чтения флаг MSG_OOB функции recvтакже должен быть установлен.Дейтаграммный сокет также может пользоваться функциями send и recv, если предварительно вызовет connectно у него есть и свои, "персональные", функции: "int sendto (SOCKET s, const char FAR * buf, int len, int flags,const struct sockaddr FAR * to, int tolen)" и "int recvfrom (SOCKET s, char FAR* buf, int len, int flags, structsockaddr FAR* from, int FAR* fromlen)".Они очень похожи на send и recv - разница лишь в том, что sendto и recvfrom требуют явного указания адресаузла, принимаемого или передаваемого данные.