logo search
Ответы к экзамену по ПСП

Структура программы udp-клиента.

Первые блоки обеих программ одинаковые и предназначены для инициализации библиотеки WS2_32.DLL.

Второй блок программы сервера создает сокет (функция soсket) и устанавливает параметры этого сокета. Следует обратить внимание на параметрSOCK_DGRAMфункцииsocket, указывающий на тип сокета (в данном случае – сокет, ориентированный на сообщения). Для установки параметров сокета, используется функцияbind. При этом говорят, что сокетсвязываютс параметрами. Для хранения параметров сокета вWinsock2 предусмотрена специальная структураSOCKADDR_IN(она тоже присутствует на рисунке). Перед выполнением функцииbind, которая использует эту структуру в качестве параметра, необходимо ее заполнить данными. Пока скажем только, что вSOCKADDR_INхранитсяIP-адрес и номер порта сервера.

В третьем блоке программы сервера выполняется функция recvfrom, которая переводит программу сервера в состояние ожидания, до поступления сообщения от программы клиента (функцияsendto). Функцияrecvfromтоже использует структуруSOCKADDR_IN– в нее автоматически помещаются параметры сокета клиента, после приема от него сообщения. Данные поступают в буфер, который обеспечивает принимающая сторона (на рисунке символьный массивbfrom). Следует отметить, что в качестве параметра функцииrecvfromиспользуется связанный сокет – именно через него осуществляется передача данных.

Четвертый блок программы сервера предназначен для пересылки данных клиенту. Пересылка данных осуществляется с помощью функции sendto. В качестве параметровsendtoиспользует структуруSOCKADDR_INс параметрами сокета принимающей стороны (в данном случае клиента) и заполненный буфер с данными.

Пятые блоки программ сервера и клиента одинаковые и предназначены для закрытия сокета и завершения работы с библиотекой WS2_32.DLL.

Всем блокам программы клиента, кроме второго, есть аналог в программе сервера. Второй блок, в сравнении с сервером, не использует команду bind. Здесь проявляется основное отличие между сервером и клиентом. Если сервер, должен использовать однозначно определенные параметры (IP-адрес и номер порта), то для клиента это не обязательно – емуWindowsвыделяет эфемерный порт. Т.к. инициатором связи является клиент, то он должен точно “знать” параметры сокета сервера, а свои параметры клиент получит отWindowsи сообщит их вместе с переданным пакетом серверу.