Winsock что это такое

Winsock

Windows Sockets API (WSA), название которого было укорочено до Winsock. Это техническая спецификация, которая определяет, как сетевое программное обеспечение Windows будет получать доступ к сетевым сервисам, в том числе, TCP/IP. Он определяет стандартный интерфейс между клиентским приложением (таким как FTP клиент или веб-браузер) и внешним стеком протоколов TCP/IP. Он основывается на API модели сокетов Беркли, использующейся в BSD для установки соединения между программами.

Содержание

Предыстория

Ранние операционные системы Microsoft, такие как MS-DOS и Microsoft Windows имели ограничения по работе с сетью, которые были связаны с использованием протокола NetBIOS. В частности, Microsoft в то время не поддерживал работу со стеком протоколов TCP/IP. Несколько университетских групп и коммерческих фирм, включая MIT, FTP Software, Sun Microsystems, Ungermann-Bass, и Excelan, представляли свои решения для работы с TCP/IP в MS-DOS, часто как часть программно-аппаратного комплекса. После выпуска Microsoft Windows 2.0 к этим разработчикам присоединились и другие, такие как Distinct и NetManage, которые помогли в организации поддержки протоколов TCP/IP для Windows. Недостаток, с которыми столкнулись все вышеперечисленные разработчики, состоял, в том, что каждый из них использовал свои собственные API (Application Programming Interface). Без единой стандартной модели программирования, трудно было убедить независимых разработчиков программного обеспечения в создании сетевых программ, которые могли бы работать на основе реализации стека протоколов TCP/IP любого из разработчиков. Стало понятно, что необходима стандартизация.

Модель Sockets API Windows была предложена Мартином Холлом из JSB Software (позднее Stardust Technologies), в рамках информационной группы BOF (Birds of a Feather) и согласована в сети CompuServe на BBS в октябре 1991 года. Первое издание спецификации было написано Мартином Холлом, Марком Tовфиком из Microdyne (позднее Sun Microsystems), Джеффоом Арнольдом (Sun Microsystems), Генри Сандерс и Дж. Алардом из Microsoft, и при участии многих других разработчиков. Возникли вопросы о том, кому присвоить авторские права, права интеллектуальной собственности. В конце концов, было решено, что авторские права на спецификацию будут принадлежать пяти авторам, как физическим лицам.

Источник

Winsock что это такое

И так, что же такое Winsock и с чем его едят? Если сказать в «двух словах», то Winsock это интерфейс, который упрощает разработку сетевых приложений под Windows. Всё что нам нужно знать, это то что Winsock представляет собою интерфейс между приложением и транспортным протоколом, выполняющим передачу данных.

Теперь мы можем спокойно использовать функции WinsockAPI. (полный список функций можно найти в соответствующих разделах MSDN).

Для инициализации Winsock вызываем функцию WSAStartup

Так это выглядит на практике:

При ошибке функция возвращает SOCKET_ERROR. В таком случае можно получить расширенную информацию об ошибке используя вызов WSAGetLastError(). Данная функция возвращает код ошибки (тип int)

Для начала объявим его:

При ошибке функция возвращает INVALID_SOCKET. В таком случае можно получить расширенную информацию об ошибке используя вызов WSAGetLastError().

В предыдущем примере мы создали сокет. Что же теперь с ним делать? 🙂 Теперь мы можем использовать этот сокет для обмена данными с другими клиентами winsock-клиентами и не только. Для того, что бы установить соединение с другой машиной необходимо знать ее IP адрес и порт. Удалённая машина должна «слушать» этот порт на предмет входящих соединений (т.е. она выступает в качестве сервера). В таком случае наше приложение это клиент.

Для установки соединения используем функцию connect.

// Объявим переменную для хранения адреса
sockaddr_in s_addr;

// Заполним ее:
ZeorMemory (&s_addr, sizeof (s_addr));
// тип адреса (TCP/IP)
s_addr.sin_family = AF_INET;
//адрес сервера. Т.к. TCP/IP представляет адреса в числовом виде, то для перевода
// адреса используем функцию inet_addr.
s_addr.sin_addr.S_un.S_addr = inet_addr («193.108.128.226»);
// Порт. Используем функцию htons для перевода номера порта из обычного в //TCP/IP представление.
s_addr.sin_port = htons (1234);

При ошибке функция возвращает SOCKET_ERROR.
Теперь сокет s связан с удаленной машиной и может посылать/принимать данные только с нее.

Для того что бы послать данные используем функцию send

При ошибке функция возвращает SOCKET_ERROR.
Длинна пакета данных ограничена самим протоколом. Как узнать максимальную длину пакета данных мы рассмотрим в следующий раз. Возврат из функции не происходит до тех пор, пока данные не будут отправлены.

Принять данные от машины с которой мы предварительно установили соединение позволяет функция recv.

Источник

начало работы с помощью Winsock

ниже приведено пошаговое руководство по началу работы с программированием сокетов Windows. Он предназначен для понимания основных функций и структур данных Winsock и их совместной работы.

Приложение клиента и сервера, используемое для иллюстрации, является очень базовым клиентом и сервером. в образцы, входящие в состав пакета средств разработки программного обеспечения (SDK) для Microsoft Windows, включены более сложные примеры кода.

Первые несколько шагов одинаковы для клиентских и серверных приложений.

В следующих разделах описаны оставшиеся шаги по созданию клиентского приложения Winsock.

В следующих разделах описаны оставшиеся шаги по созданию серверного приложения Winsock.

Полный исходный код для этих основных примеров.

Расширенные примеры Winsock

В GitHubдоступны несколько дополнительных примеров клиента и сервера Winsock. Они перечислены ниже в порядке от более высокой до более низкой производительности и находятся в следующих каталогах:

Этот каталог содержит образец серверной программы, которая использует перекрывающиеся операции ввода-вывода. Пример программы использует функцию акцептекс и перекрывающиеся операции ввода-вывода для эффективной обработки нескольких асинхронных запросов на подключение от клиентов. Сервер использует функцию акцептекс для мультиплексирования различных клиентских подключений в приложении Win32 с одним потоком. Использование перекрывающихся операций ввода-вывода позволяет повысить масштабируемость.

Этот каталог содержит три основных примера программ, демонстрирующих использование нескольких потоков сервером. В число программ входит простой сервер TCP/UDP (простой), сервер TCP-сервера (Simple _ IOCTL), использующий функцию SELECT в консольном приложении Win32 для поддержки нескольких клиентских запросов, а также клиентская программа TCP/UDP (симплек) для тестирования серверов. Серверы демонстрируют использование нескольких потоков для обработки нескольких клиентских запросов. Этот метод имеет проблемы масштабируемости, так как для каждого клиентского запроса создается отдельный поток.

Источник

Netsh Winsock — что это и зачем нужно?

При поиске решений проблем с сетевыми подключениями в интернете пользователи рано или поздно попадают на сайты, на которых говорится о необходимости сброса настроек TCP/IP при помощи специфических команд — netsh winsock reset. Разберемся, что это вообще такое.

Netsh

В приведенной выше команде winsock является только «вложением» (контекстом) в основную команду — netsh. Netsh — это небольшая системная программа (сетевая оболочка), предназначенная для управления сетевыми параметрами Windows и конфигурирования параметров интерфейсов связи сетевых устройств (сетевых плат/адаптеров).

Назначений у программы Netsh довольно много, но чаще всего она используется именно для сброса рабочих параметров TCP/IP. Кроме того, при помощи этой программы (команды) можно изменять IP-адрес, маску подсети, основной шлюз и DNS-сервер любого существующего сетевого подключения (интерфейса).

Winsock

Как отмечалось выше, winsock — один из многочисленных контекстов (будем называть параметров) основной команды netsh. По сути — это техническая спецификация, определяющая способы взаимодействия всего установленного программного обеспечения с сетевыми сервисами, включая TCP/IP. Если простыми словами, Winsock «указывает» какой-либо сетевой программе (браузеру, например), к какому из доступных сетевых подключений ей обращаться для передачи данных во внешнюю сеть.

Как использовать Netsh?

Не будем изобретать велосипед и в качестве примера приведем команды для сброса настроек TCP/IP и изменения основных сетевых параметров одного из подключений.

Сброс TCP/IP при помощи Netsh. Первым делом нужно запустить командную строку Windows от имени администратора (в противном случае система откажет в доступе к своим настройкам):

Winsock что это такое. 1. Winsock что это такое фото. Winsock что это такое-1. картинка Winsock что это такое. картинка 1

Для сброса сетевой конфигурации системы обычно достаточно использовать две команды:

netsh int ip reset

netsh winsock reset

Введите их последовательно (завершая ввод клавишей «Enter») в окно командной строки.

Winsock что это такое. 2. Winsock что это такое фото. Winsock что это такое-2. картинка Winsock что это такое. картинка 2

В сети по-прежнему можно найти инструкции по сбросу TCP/IP, в которых первой используется другая команда: netsh int ip reset all. В Windows 10 эта команда не работает. Попробуйте ввести ее, получите ошибку. Очень жаль, потому что в параметре int команды netsh содержатся настройки не только для ip, но и для других сетевых объектов.

Если использование netsh int ip reset оказалось недостаточным для «ремонта» сетевого подключения, всегда можно сбросить и другие параметры int, поочередно вводя:

netsh int httpstunnel reset

netsh int ipv6 reset

netsh int tcp reset

netsh int portproxy reset

Winsock что это такое. 3. Winsock что это такое фото. Winsock что это такое-3. картинка Winsock что это такое. картинка 3

Если и это не поможет восстановить работоспособность сетевого подключения, проблему следует искать где-нибудь в другом месте (в драйвере, например).

Смена основных сетевых параметров при помощи Netsh. Конечно, эти параметры легче изменить стандартным способом — через свойства интернет-протокола IPv4 конкретного сетевого подключения. Но все же не будет лишним научиться делать это и через Windows-консоль, ведь стандартный способ может и не сработать, особенно, если компьютер заражен каким-нибудь вирусом-блокировщиком.

Для начала нужно узнать имя сетевого интерфейса, с которым предстоит работать. Для этого используем команду:

netsh int show interface

В нашем случае имеется всего одно единственное подключение, имя которого — Ethernet (это обычное подключение по локальной сети).

Меняем IP-адрес, маску подсети и основной шлюз на требуемом интерфейсе. Для этого используем команду:

netsh int ip set address ethernet static 192.168.0.25 255.255.255.0 192.168.0.1

Winsock что это такое. 4. Winsock что это такое фото. Winsock что это такое-4. картинка Winsock что это такое. картинка 4

Возникает вопрос — а где новый DNS-сервер? Этот параметр не является обязательным — он, скорее, добавочный. Т.е. нам предстоит добавить новый элемент в наше сетевое подключение. Делается это следующим образом:

netsh int ip add dnsserver ethernet 8.8.4.4

Winsock что это такое. 5. Winsock что это такое фото. Winsock что это такое-5. картинка Winsock что это такое. картинка 5

Здесь, впрочем, все понятно. Указанный нами DNS-сервер — это общедоступный сервер от Google. Вы можете использовать вместо него DNS, выданный вашим интернет-провайдером.

Кстати, если использовать команду повторно с другим адресом DNS-сервера, он запишется в поле «Альтернативный DNS-сервер».

Результат выполнения команды можно посмотреть в свойствах сетевого подключения:

Winsock что это такое. 6. Winsock что это такое фото. Winsock что это такое-6. картинка Winsock что это такое. картинка 6

Остались вопросы, предложения или замечания? Свяжитесь с нами и задайте вопрос.

Источник

Что такое Winsock и как он работает?

Windows Socket API, также известный как Winsock, представляет собой тип интерфейса прикладного программирования (API), используемый для связи между сетевым программным обеспечением Windows и сетевыми службами. Он в основном основан на протоколе управления передачей / интернет-протоколе (TCP / IP) и берет свое начало от интерфейса сокетов Berkeley Unix.

Читайте дальше, чтобы узнать больше о том, как Winsock продолжает вносить важный вклад в нашу повседневную жизнь.

Winsock позволяет программам и приложениям Windows подключаться к Интернету через TCP / IP.

Вот некоторые из его наиболее важных функций:

Winsock существует как уровень передачи данных, и на наших компьютерах он также известен как winsock.dll. Это ссылка на расширение динамической библиотеки.

Winsock предустановлен в каждой операционной системе Microsoft Windows, а также доступен для macOS.

Windows Socket API включает два интерфейса. Первый — это API для разработчиков приложений для разработки приложений, поддерживающих работу в сети. Напротив, второй API — это интерфейс поставщика услуг, используемый для настройки новых сетевых протоколов.

Winsock что это такое. windows loading screen. Winsock что это такое фото. Winsock что это такое-windows loading screen. картинка Winsock что это такое. картинка windows loading screen

Winsock был выпущен еще в 1990-х годах. С тех пор он оставил непревзойденное наследие в мире сетей. Учитывая рост сетевого и потребительского спроса, поставщикам оборудования и программного обеспечения для работы требовался стандартный протокол.

Первоначально Winsock финансировался техническими гигантами, включая Microsoft, IBM, Novell и Hewlett-Packard. С тех пор ОС Windows стала нарицательным; по этой причине почти каждый компьютер поставляется с поддержкой Winsock для работы в сети.

Winsock сыграл невообразимую роль в популярности всемирной паутины. Например, первый в мире веб-браузер Mosaic был построен на Windows с использованием Winsock.

Многие другие поставщики услуг последовали их примеру. Mozilla Firefox, Google Chrome и Microsoft Edge также используют концепцию Winsock.

Связано: что такое API и что означает аббревиатура?

Как работает Winsock?

Ниже приведен краткий обзор, демонстрирующий, как работает Winsock.

Winsock служит переводчиком основных сетевых служб, таких как запросы send () или receive ().

Эти запросы носят очень общий характер, и Winsock функционирует, преобразовывая их в запросы, зависящие от протокола приложения, для выполнения требуемых задач.

Вообще говоря, Winsock работает между прикладной программой и Интернет-программой в вашей компьютерной системе, которая использует TCP / IP.

Использование Winsock в качестве сетевого API

Winsock быстро стал общепринятым API для сетевых уровней, и несколько сетевых провайдеров согласились его поддерживать. Перед его введением каждый должен был разработать свои собственные библиотеки интерфейса.

Связанный: Как работают API и как их интегрировать в ваше приложение

Проведя четкое разграничение задач в программном обеспечении поставщика сети и в приложении, Winsock ввел удобную стандартизацию при разработке этих API-интерфейсов и приложений. Еще одна причина его успеха заключается в том, что Winsock можно адаптировать и использовать со многими другими сетями, даже отличными от TCP / IP.

Наслаждаясь успехом Winsock

Из-за того, что Winsock имеет открытый исходный код, даже сторонние разработчики вносят свои собственные модификации и изменения. Это позволило программному обеспечению оставаться свежим и адаптируемым даже по прошествии четверти века.

Winsock проник в большинство компьютерных систем. А учитывая его прочный характер и адаптируемость, вы можете быть уверены, что он останется здесь на ближайшие годы.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *