
- •1. Сокеты, датаграммы и каналы связи
- •2. Инициализация приложения при работе с сокетами и завершение его работы
- •3. Создание и инициализация сокета
- •3.1. Создание сокета
- •3.2. Удаление сокета
- •3.3. Параметры сокета
- •3.4. Привязка адреса к сокету
- •3.5. Создание канала связи
- •3.5.1.Сторона сервера
- •3.5.1. Сторона клиента
- •3.5.3. Передача и прием данных
- •4. Решения при работе с сокетами
- •5. Порядок выполнения работы
- •6. Контрольные вопросы
- •Приложения
- •1. Коды ошибок различных функций при работе с сокетами
- •2. Сервер сокетов с оконным интерфейсом (протокол tcp/ip).
- •3. Клиент сокетов с оконным интерфейсом (протокол tcp/ip).
- •4. Сервер сокетов с оконным интерфейсом (протокол udp).
- •5. Клиент сокетов с оконным интерфейсом (протокол udp).
- •6. Сервер неблокирующих сокетов с использованием события wsaevent (протокол tcp/ip)
- •7. Клиент неблокирующих сокетов с использованием события wsaevent (протокол tcp/ip)
- •8. Сервер неблокирующих сокетов с использованием функции select
- •9.Клиент неблокирующих сокетов с использованием функции select
- •10. Сервер блокируюющих сокетов (протокол tcp/ip)
- •11. Клиент блокируюющих сокетов (протокол tcp/ip)
6. Контрольные вопросы
Для чего используются сокеты?
Какие разновидности сокетов бывают?
Какие протоколы поддерживают сокеты (виды)?
Обрисуйте в общих словах алгоритм работы сервера и клиента.
Какие версии сокетов наиболее распространены?
Какие решения обычно используются при работе с сокетами?
Какие ОС поддерживают сокеты?
Можно ли использовать сокеты, как средство межплатформенной коммуникации?
Какие сервисы сети Internet можно использовать с помощью сокетов?
Приложения
Приложение 1
1. Коды ошибок различных функций при работе с сокетами
Таблица 1. Коды ошибок функции WSAStartup.
Значение |
Описание |
WSASYSNOTREADY |
Сетевое программное обеспечение не готово для работы |
WSAVERNOTSUPPORTED |
Функция не поддерживается данной реализацией интерфейса Windows Sockets |
WSAEINVAL |
Библиотека DLL, обеспечивающая интерфейсe Windows Sockets, не соответствуетверсии, указанной приложением указанной в параметре wVersionRequested |
Таблица 2. Коды ошибок функции WSACleanUp.
Значение |
Описание |
WSANOTINITIALISED |
Интерфейс Windows Sockets не был проинициализирован функцией WSAStartup |
WSAENETDOWN |
Сбой сетевого программного обеспечения |
WSAEINPROGRESS |
Во время вызыва функции WSACleanup выполнялась одна из блокирующих функций интерфейса Windows Sockets |
Таблица 3. Коды ошибок функции socket.
Код ошибки |
Описание |
WSANOTINITIALISED |
Интерфейс Windows Sockets не был проинициализирован функцией WSAStartup |
WSAENETDOWN |
Сбой сетевого программного обеспечения |
WSAEAFNOSUPPORT |
Указан неправильный тип адреса |
WSAEINPROGRESS |
Выполняется блокирующая функция интерфейса Windows Sockets |
WSAEMFILE |
Израсходован весь запас свободных дескрипторов |
WSAENOBUFS |
Нет памяти для создания буфера |
WSAEPROTONOSUPPORT |
Указан неправильный протокол |
WSAEPROTOTYPE |
Указанный протокол несовместим с данным типом сокета |
WSAESOCKTNOSUPPORT |
Указанный тип сокета несовместим с данным типом адреса |
Таблица 4. Коды ошибок функции closesocket..
Код ошибки |
Описание |
WSANOTINITIALISED |
Перед использованием функции closesocket необходимо вызвать функцию WSAStartup |
WSAENETDOWN |
Сбой в сети |
WSAENOTSOCK |
Указанный в параметре дескриптор не является сокетом |
WSAEINPROGRESS |
Выполняется блокирующая функция интерфейса Windows Sockets |
WSAEINTR |
Работа функции была отменена при помощи функции WSACancelBlockingCall |
Таблица 5. Коды ошибок функции bind.
Код ошибки |
Описание |
WSANOTINITIALISED |
Перед использованием функции необходимо вызвать функцию WSAStartup |
WSAENETDOWN |
Сбой в сети |
WSAEADDRINUSE |
Указанный адрес уже используется |
WSAEFAULT |
Значение параметра namelen меньше размера структуры sockaddr |
WSAEINPROGRESS |
Выполняется блокирующая функция интерфейса Windows Sockets |
WSAEAFNOSUPPORT |
Этот протокол не может работать с указанным семейством адресов |
WSAEINVAL |
Сокет уже привязан к адресу |
WSAENOBUFS |
Установлено слишком много соединений |
WSAENOTSOCK |
Указанный в параметре дескриптор не является сокетом |
Таблица 6. Коды ошибок функции send.
Код ошибки |
Описание |
WSANOTINITIALISED |
Перед использованием функции необходимо вызвать функцию WSAStartup |
WSAENETDOWN |
Сбой в сети |
WSAEACCES |
Указанный адрес является широковещательным (broadcast), однако перед вызовом функции не был установлен соответствующий флаг |
WSAEINTR |
Работа функции была отменена при помощи функции WSACancelBlockingCall |
WSAEINPROGRESS |
Выполняется блокирующая функция интерфейса Windows Sockets |
WSAEFAULT |
Параметр buf указан неправильно (он не указывает на адресное пространство, принадлежащее приложению) |
WSAENETRESET |
Необходимо сбросить соединение |
WSAENOBUFS |
Возникла блокировка буфера |
WSAENOTCONN |
Сокет не подсоединен |
WSAENOTSOCK |
Указанный в параметре дескриптор не является сокетом |
WSAESHUTDOWN |
Сокет был закрыт функцией shutdown |
WSAEWOULDBLOCK |
Сокет отмечен как неблокирующий, но запрошенная операция приведет к блокировке |
WSAEMSGSIZE |
Был использован сокет типа SOCK_DGRAM (предназначенный для передачи датаграмм). При этом размер пакета данных превышает максимально допустимый для данной реализации интерфейса Windows Sockets |
WSAEINVAL |
Сокет не был подключен функцией bind |
WSAECONNABORTED |
Сбой из-за слишком большой задержки или по другой причине |
WSAECONNRESET |
Сброс соединения удаленным узлом |
Таблица 7. Коды ошибок функции listen.
Код ошибки |
Описание |
WSANOTINITIALISED |
Перед использованием функции необходимо вызвать функцию WSAStartup |
WSAENETDOWN |
Сбой в сети |
WSAEADDRINUSE |
Указанный адрес уже используется |
WSAEINPROGRESS |
Выполняется блокирующая функция интерфейса Windows Sockets |
WSAEINVAL |
Сокет еще не был привязан к адресу или уже находится в подключенном состоянии |
WSAEISCONN |
Сокет уже находится в подключенном состоянии |
WSAEMFILE |
Недостаточно дескрипторов файлов |
WSAENOBUFS |
Нет места для размещения буфера |
WSAENOTSOCK |
Указанный в параметре дескриптор не является сокетом |
WSAEOPNOTSUPP |
Функция listen не работает с сокетом указанного типа |
Таблица 8. Коды ошибок функции accept.
Код ошибки |
Описание |
WSANOTINITIALISED |
Перед использованием функции необходимо вызвать функцию WSAStartup |
WSAENETDOWN |
Сбой в сети |
WSAEFAULT |
Значение параметра addrlen меньше размера структуры адреса |
WSAEINTR |
Работа функции была отменена при помощи функции WSACancelBlockingCall |
WSAEINPROGRESS |
Выполняется блокирующая функция интерфейса Windows Sockets |
WSAEINVAL |
Перед вызовом функции accept не была вызывана функция listen |
WSAEMFILE |
Нет доступных дескрипторов |
WSAENOBUFS |
Установлено слишком много соединений |
WSAENOTSOCK |
Указанный в параметре дескриптор не является сокетом |
WSAEOPNOTSUPP |
Данный тип сокета нельзя использовать при вызове функций, ориентированных на работу с каналом связи |
WSAEWOULDBLOCK |
Сокет отмечен как неблокирующий и в настоящее время нет каналов связи, которые нужно устанавливать |
Таблица 9. Коды ошибок функции recv.
Код ошибки |
Описание |
WSANOTINITIALISED |
Перед использованием функции необходимо вызвать функцию WSAStartup |
WSAENETDOWN |
Сбой в сети |
WSAENOTCONN |
Сокет не подсоединен |
WSAEINTR |
Работа функции была отменена при помощи функции WSACancelBlockingCall |
WSAEINPROGRESS |
Выполняется блокирующая функция интерфейса Windows Sockets |
WSAENOTSOCK |
Указанный в параметре дескриптор не является сокетом |
WSAESHUTDOWN |
Сокет был закрыт функцией shutdown |
WSAEWOULDBLOCK |
Сокет отмечен как неблокирующий, но запрошенная операция приведет к блокировке |
WSAEMSGSIZE |
Размер пакета данных превышает размер буфера, в результате чего принятый пакет был обрезан |
WSAEINVAL |
Сокет не был подключен функцией bind |
WSAECONNABORTED |
Сбой из-за слишком большой задержки или по другой причине |
WSAECONNRESET |
Сброс соединения удаленным узлом |
Таблица 10.
Код ошибки |
Описание |
WSANOTINITIALISED |
Перед использованием функции необходимо вызвать функцию WSAStartup |
WSAENETDOWN |
Сбой в сети |
WSAEINVAL |
Сокет не был подключен функцией bind |
WSAEINPROGRESS |
Выполняется блокирующая функция интерфейса Windows Sockets |
Таблица 11.
Код ошибки |
Описание |
WSAEADDRINUSE |
Указанный адрес уже используется |
WSAEADDRNOTAVAIL |
Указанный адрес не доступен |
WSAEAFNOSUPPORT |
Для данного сокета нельзя использовать указанное семейство адресов |
WSAECONNREFUSED |
Попытка установления канала связи была отвергнута |
WSAEDESTADDRREQ |
Необходимо указать адрес получателя пакета |
WSAEFAULT |
Неправильно указан параметр namelen |
WSAEINVAL |
Сокет уже подключен к адресу |
WSAEISCONN |
Сокет уже подсоединен |
WSAEMFILE |
Больше нет доступных дескрипторов |
WSAENETUNREACH |
Из данного узла и в данное время невозможно получить доступ к сети |
WSAENOBUFS |
Нет места для размещения буфера |
WSAENOTCONN |
Сокет на подключен |
WSAENOTSOCK |
Указан дескриптор файла, а не сокета |
WSAETIMEDOUT |
При попытке установления канала связи возникла задержка во времени |
Таблица 12.
Код ошибки |
Описание |
WSAENETDOWN |
Сбой в сети |
WSAECONNRESET |
Сброс соединения удаленным узлом |
WSAECONNABORTED |
Сбой из-за слишком большой задержки или по другой причине |
Приложение 2