|

Delphi
Xakep, номер #041, стр. 041-075-1
Сетевеая библиотека Winsock
Horrific aka Фленов Михаил smirnandr@mail.ru www.cydsoft.com/vr-online
Работа с сетью через компоненты Delphi очень удобна и достаточно проста, но слишком уж медленна. Это можно исправить, если напрямую обращаться к сетевой библиотеке окошек - Winsock. Сегодня мы познакомимся с ее основами и потом сможем создать самый быстрый в мире сканер портов :). Да, ты почти дождался этого момента. Тот сканер, который я тебе показывал, был очень хорошим, но слишком медленным. Новый вариант будет самым быстрым в мире, но напишем мы его в следующий раз, а сегодня теория.
Что такое Winsock
Библиотека Winsock состоит из одного лишь файла Winsock.dll. Она очень хорошо подходит для создания простых приложений, потому что в ней реализованы все необходимые функции для создания соединения и приема/передачи файлов. Зато сниффер создавать даже не пытайся. В winsock нет ничего для доступа к заголовкам пакетов. MS обещала встроить эти необходимые продвинутому челу вещи в winsock2, но, как всегда, прокатила нас задницей по наждачной бумаге :) и сказала, мол, обойдемся.
Чем хороша эта библиотека, так это тем, что все ее функции одинаковы для многих платформ и языков программирования. Так, например, когда мы напишем сканер портов, его легко можно будет перенести на язык С/С++ и даже написать что-то подобное в *nix, потому что там сетевые функции называются так же и имеют практически те же параметры. Разница между сетевой библиотекой Windows и Linux минимальна, хотя и есть. Но так и должно быть, ведь Билл не может по-человечески, и ему обязательно надо выпендриться.
Сразу же предупрежу, что мы будем изучать winsock2, а Delphi поддерживает только первую версию. Чтобы он смог увидеть вторую, нужно скачать заголовочные файлы для 2-й версии (это можно сделать с моего сайта в разделе "download" -> "Заголовочные файлы").
Вся работа сетевой библиотеки построена вокруг понятия socket - это как бы виртуальный сетевой канал. Для соединения с сервером ты должен подготовить такой канал к работе и потом можешь соединяться на любой порт серванта. Все это лучше всего увидеть на практике, но я попробую дать тебе сейчас общий алгоритм работы с сокетами:
1. Инициализируем библиотеку WinSock.
2. Инициализируем socket (канал для связи). После инициализации у нас должна быть переменная, указывающая на новый канал. Созданный socket - это, можно сказать, что открытый порт на твоем компе. Порты есть не только на серванте, но и у тебя, и когда происходит передача данных между компами, то она происходит между сетевыми портами.
3. Можно присоединяться к серверу. В каждой функции для работы с сетью первым параметром обязательно указывается переменная, указывающая на созданный канал, через который будет происходить соединение.
Стартуем winsock
Самое первое, что надо сделать - стартануть библиотеку (для юниксоидов это не нужно делать). Для этого нужно вызвать функцию WSAStartup. У нее есть два параметра:
1. Версия winsock, которую мы хотим стартануть. Для версии 1.0 нужно указать MAKEWORD(1,0), но нам нужна вторая, значит, будем указывать MAKEWORD(2,0).
Содержание Вперед на стр. 041-075-2
|