Практическое введение в Internet, E-Mail, FTP, WWW и HTML
Работа в графическом режиме
Если только что описанный сценарий не вызвал у вас никакого энтузиазма, не огорчайтесь. Действительно, работа в символьном режиме с Internet - это вчерашний день (а может, даже позавчерашний). Но раньше ничего другого просто не было. Возможно поэтому многие книги, посвященные Internet, переполнены подробными описаниями всевозможных текстовых программ, предназначенных, как правило, для операционной системы UNIX или MS-DOS.Сегодня вы можете работать в сети Internet
значительно комфортнее в операционных системах с графическим интерфейсом, таких как Microsoft Windows или IBM OS/2. В нашей книге мы сделаем основной упор именно на этот способ, поэтому вам не придется запоминать многочисленные команды и ограничивать себя в рамках 25 строк, состоящих из 80 символов.
Все описанные нами в этой книге графические программы, предназначенные для работы с сетью Internet (приложения для Internet), требуют так называемого прямого подключения к сети с использованием протокола TCP/IP (а не через терминальную программу, как это было только что описано). Именно этот способ подключения позволит вам максимально использовать все возможности Internet.
Что касатся протокола TCP/IP, то он будет описан позже. Однако, если вы собираетесь работать с сетью Internet через модем как обычный пользователь, вам не обязательно разбираться с этим протоколом в деталях. Поэтому без особого введения мы сразу перейдем к проведению сеанса связи в графическом режиме.
Электронная почта
Едва ли вы никогда ничего не слышали об электронной почте. На сегодняшний день электронная почта представляет собой наиболее удобный и быстродействующий способ доставки собщений, а также произвольных файлов в любую точку планеты.Для того чтобы послать электронное письмо, вы должны знать электронный адрес своего корреспондента. Этот адрес он может вам сообщить при личной встрече, по телефону, либо вы можете узнать его из рекламы.
Как выглядит электронный адрес ?
Воспроизведем список наших электронных адресов, расположенный во введении:
| Сеть | Наш адрес | Сеть | Наш адрес |
| Relcom | frolov@glasnet.ru | CompuServe | >internet: frolov@glasnet.ru |
| GlasNet | frolov@glasnet.ru | UUCP | cdp!glas!frolov |
| Internet | frolov@glasnet.ru |
Обратите внимание, что в этом списке указаны разные адреса. На самом деле мы подключены к сети GlasNet, которая соединена с сетью Internet. Наш адрес в рамках сети GlasNet выглядит как frolov, хотя можно указывать и полный адрес frolov@glasnet.ru.
Используя полный адрес frolov@glasnet.ru, вы можете послать нам письмо из сетей Internet, GlasNet, Relcom и других.
Некоторые сети используют свою собственную систему адресов, отличную от принятой в Internet и собственные протоколы передачи данных, отличные от TCP/IP. Примером такой сети может служить сеть UUCP . Если вы подключены к такой сети вам, возможно, придется указывать адрес другим способом, о чем вы можете поинтересоваться в подключившей вас к глобальной сети фирме. Как правило, большинство сетей подключено к Internet через специальные шлюзы, поэтому из Internet вы сможете обмениваться почтовыми сообщениями с абонентами других сетей.
Отправляя письмо по обычной почте, вы, помимо адреса корреспондента, указываете обратный адрес. При отправке электронного письма ваш собственный адрес посылается автоматически, так что вам не нужно беспокоиться по этому поводу.
Что можно вложить в "конверт" электронного письма?
Подавляющее большинство электронных писем представляет собой текстовые сообщения размером не более нескольких Кбайт. Вы можете писать такие сообщения на любом языке, однако следует учесть, что через некоторые сети можно передать только латинские буквы. Кроме того, если письмо содержит символы кириллицы, то они могут быть по-разному закодированы.
Проблема передачи электронных писем с символами кириллицы есть, но ее можно преодолеть. Мы приведем конкретные рекомендации по этому вопросу при описании настройки почтовых программ.
Помимо текстового сообщения вы можете передать через электронную почту произвольный файл, содержащий 8-разрядные двоичные данные, однако не всегда это можно сделать напрямую. В ряде случаев двоичный файл приходится преобразовывать в символьный и в таком виде передовать корреспонденту. Последний, получив файл, сможет преобразовать его в исходный вид.
Для преобразования двоичных файлов с целью передачи через электронную почту имеются специальные программы, например, UUENCODE и UUDECODE , которые нетрудно получить из сети Internet или в той фирме, которая подключила вас к сети.
Для работы с электронной почтой создано неисчислимое количество программ. Одной из наиболее удобных и несложных в использовании, на наш взгляд, является программа Eudora для Microsoft Windows, созданная фирмой QUALCOMM Inc. Эту программу вы можете получить у вашего поставщика услуг Internet или выгрузить из Internet самостоятельно. Основное окно упрощенной версии этой программы, которая называется Eudora Light, показано на рис. 1.4.
Рис. 1.4. Основное окно почтовой программы Eudora Light
Все основные операции с почтой программа выполняет автоматически. После того как вы получите новую почту, она попадает в папку In. Для почты, предназначенной к отправке, предназначена папка Out.
Для того чтобы прочесть письмо, вам достаточно сделать двойной щелчок левой клавишей мыши по соответствующей строке папки In. После этого текст письма появится в отдельном окне, как это показано на рис. 1.5.
Рис. 1.5. Просмотр текста письма
Вы можете легко распечатать письмо, ответить на него или передать по другому адресу. Для этого достаточно нажать соответствующую кнопку в инструментальной линейке, расположенной в верхней части главного окна программы Eudora
Light. При необходимости можно сохранить полученное письмо в файле.
Обратите внимание на заголовок письма, который в нашем случае состоит из строк Date, From, To и Subject. Этот заголовок по умолчанию отображается в сокращенном виде.
Строка Date содержит дату и время получения почты. В строке From вы можете обнаружить адрес отправителя (от кого пришло письмо), в строке To - адрес получателя. Что же касается строки Subject, то в ней как правило находится краткое описание содержимого письма.
При соответствующей настройке программы вы можете просмотреть заголовок полностью, как это показано на рис. 1.6.
Рис. 1.6. Полный заголовок письма
Заголовок может быть очень большим. Помимо интересной информации, такой как полный электронный почтовый адрес отправителя, название организации и использованной кодировки символов, в заголовке могут содержаться сведения, которые вам так и не потребуются. Формат заголовка может изменяться в зависимости от того, откуда пришло письмо, однако строки Date, From, To и Subject
присутствуют всегда.
| Для того чтобы ответить на письмо, которое вы просматриваете, нужно нажать кнопку с изображением изогнутой стрелки. |
Рис. 1.7. Ответ на письмо
Вы можете изменить поля этого заголовка, например, указать адрес, по которому будет послана копия письма, а также "вложить" в конверт с письмом один или несколько файлов.
В нижней части окна находится содержимое того самого письма, на которое вы будете писать ответ. Каждая строка исходного письма выделена символом ">". Отвечая на письмо, вы можете удалить все или некоторые строки исходного текста письма, а также сделать комментарии к некоторым фрагментам полученного вами письма.
Когда ответ готов, нажмите кнопку Queue, и письмо будет положено в папку писем Out, предназначенных к отправке. Теперь если из меню File программы Eudora Light выбрать строку Send Queued Message, письмо будет отправлено по назначению.
Каков дальнейший путь письма?
Вначале письмо попадет на сервер, через который вы подключены к сети Internet. Как правило, этот сервер расположен в вашем городе. Дальнейший путь письма может быть различным, так как к адресату ведет много путей. В сетях TCP/IP почтовый сервер установит соединение с сервером, на котором находится почтовый ящик адресата и перешлет письмо. Таким образом, письмо сразу попадет туда, куда нужно, а не будет путешествовать много дней, переходя с одного сервера на другой.
В некоторых сетях (например, в сетях с протоколом UUCP) передача почты осуществляется другим способом. Почта пересылается с одного сервера на другой, пока наконец не достигнет адресата. Этот процесс может длиться много часов или даже дней, однако даже в этом случае электронная почта удобнее обычной.
Как адресат получит ваше письмо?
Когда он включит свой компьютер и соединится со своим сервером, входящим в состав Internet, то с помощью почтовой программы сможет забрать всю накопившуюся для него почту. В том числе и ваше письмо. Учтите, однако, что некоторые фирмы, обеспечивающие подключение к сети Internet, взымают отдельную плату за длительное хранение почты, либо применяют другие санкции к тем, кто ленится забирать почту. Например, невостребованное в течении определенного времени письмо может отправиться обратно.
Как мы уже говорили, существует множество почтовых программ, разработанных для различных операционных систем. Если конфигурация вашего компьютера не позволяет вам работать с операционной системой Microsoft Windows, вы можете воспользоваться одной из специализированных программ DOS (такую программу, предоставляет, например, фирма Relcom ) или же воспользоваться обычной терминальной программой, такой как MTE или Telix.
В составе операционной системы Windows 95 поставляется приложение Microsoft Exchange, с помощью которого можно работать с электронной почтой (рис. 1.8).
Рис. 1.8. Приложение Microsoft Exchange
К сожалению, приложение Microsoft Exchange
может работать с почтой Internet только после установки расширения операционной системы Microsoft Windows 95, которое называется Microsoft Plus. Поэтому если вы собираетсь работать с Internet в среде этой операционной системы, советуем приобрести указанный программный продукт. Помимо почтовой программы в нем есть приложение Internet Explorer, предназначенное для работы с серверами WWW и FTP, о чем мы еще вам расскажем.
На заре электронной почты все сообщения передавались исключительно в текстовом виде. Для передачи двоичных файлов приходилось перекодировать их с помощью специальных программ. Однако сейчас вы можете передавать через электронную почту документы, содержащие элементы шрифтового и стилевого оформления, графику, звуковые фрагменты и видео.
На рис. 1.9 изображено сообщение, подготовленное в текстовом процессоре Microsoft Word for Windows версии 7.0. Это сообщение будет послано с помощью приложения Microsoft Exchange. Адресат получит его в таком виде, в каком вы его подготовили.
Рис. 1.9. Подготовка сообщения в текстовом процессоре Microsoft Word for Windows
В сети Internet существуют так называемые серверы рассылки, способные по предварительной заявке автоматически рассылать почту. С помощью такого сервера вы можете подписаться например, на электронный вариант газеты или получать лубую другую периодически обновляемую информацию в виде писем.
Эта услуга очень удобна - все происходит само собой, от вас требуется только периодически забирать почту. Однако будьте осторожны, так как некоторые серверы рассылки способны забросать вас лавиной писем, причем за получение писем из других сетей иногда необходимо платить отдельно.
Электронные конференции
Значительный интерес представляют собой так называемые электронные конференции (телеконференции ), или сетевые новости .Что это такое?
В сети имеются серверы электронных конференций, которые хранят статьи (в виде текстовых документов), объединенные в группы. Имея доступ к такому серверу, пользователи сети могут посылать в выбранные ими группы свои статьи, а также просматривать и получать статьи, записанные туда другими пользователями.
Группы создаются по интересам, причем существуют тысячи таких групп, и появляются все новые и новые. С помощью электронных конференций вы можете найти единомышленников и друзей (или наоборот, оппонентов или противников) по любому вопросу. Посылая статьи в конференцию, вы можете участвовать в обсуждении любой проблемы, имеющей отношение к теме конференции. Вы можете попросить о помощи и вам ее окажут. Вы можете сами оказать помощь, если кто-нибудь в ней нуждается.
Большинство конференций транслируются по всей сети Internet (такие конференции называются глобальными), поэтому в конференции могут принимать участие люди из разных стран. Существуют и локальные конференции, доступные ограниченному кругу пользователей сети Internet.
Если какие-либо конференции вас заинтересовали, вы можете подписаться на них. При этом вы будете регулярно получать новые статьи из выбранной вами конференции. Отметим, что в некоторых конференциях идет очень оживленное обсуждение, поэтому после подписки на эти конференции вы будете буквально завалены информацией, возможно, не всегда полезной. В этом случае вы можете отменить подписку и посещать такие конференции эпизодически. Современные приложения обеспечивают непосредственный доступ к серверу конференций без подписки, о чем мы еще будем говоритью
Помимо текстовых конференций, предназначенных для обмена статьями, существуют двоичные, или как их еще называют, бинарные конференции. Бинарные конференции предназначены в основном для обмена программами и файлами изображений (в форматах GIF , JPG и т. п.). Двоичные данные в таких конференциях хранятся в текстовом виде, полученном с помощью программы UUENCODE , и как правило, снабжены короткими комментариями. Получив такую статью, вы можете раскодировать ее программой UUDECODE , получив двоичный файл в исходном виде.
Для работы с электронными конференциями созданы удобные приложения, рассчитанные на операционные системы с графическим интерфейсом. Тем не менее, существуют и текстовые программы аналогичного назначения, которые имеет смысл использовать, если у вас установлен низкоскоростной модем или конфигурация компьютера не позволяет работать с операционной системой Microsoft Windows (либо имеются другие соображения, по которым вы вынуждены использовать символьный режим). В нашей книге мы расскажем о том, как использовать наиболее удачные на наш взгляд средства для работы с электронными конференциями.
В большинстве конференций дискуссии ведутся на английском языке, хотя есть и российские конференции, где принято использовать русский язык. Таких конференций, разумеется, не очень много (по сравнению с общим числом конференций в Internet), однако они также охватывают широкий спектр вопросов и наверняка будут вам полезны.
Как найти нужную информацию в сети Internet
Без специальных средств поиска вы едва ли сможете найти нужную вам информацию в бескрайнем море серверов WWW, если вы точно не знаете, где она находится. Между тем чем дольше вы ищете нужные вам страницы, тем больше приходится платить поставщику услуг Internet, так как размер оплаты зависит от времени подключения. Хорошо, если вы знаете, что нужная вам программа или описание лежит на известном вам сервере, однако обычно вы даже не знаете, как точно называется то, что вам нужно найти.К счастью, в Internet имеется немало справочно-поисковых систем , в которых есть сведения о содержимом многих серверов WWW. Примером может служить каталог сети Internet под названием Lycos (рис. 1.15). Ссылки на поисковые системы обычно размещаются на страницах многих серверов WWW.
Рис. 1.15. Старница каталога сети Internet - сервера WWW Lycos
Обычно при поиске вы можете задать одно или несколько ключевых слов, а также дополнительные параметры. Например, вы можете указать, как следует выполнять поиск - в точном соответствии с указанными вами словами или нужно искать похожие слова, должен ли быть найден текст, содержащий все указанные ключевые слова или только некоторые из них и т. д. (рис. 1.16).
Рис. 1.16. Указание дополнительных параметров поиска
Справочные службы Internet создаются на базе мощных компьютеров, поэтому ваш запрос не будет выполняться слишком долго. Однако если вы задали ключевое слово неудачно, возможна ситуация, когда будет найдено очень много серверов WWW, удовлетворяющих критерию поиска. В этом случае вы должны подумать о том, как можно конкретизировать ваш запрос.
На рис. 1.17 показаны результаты поиска по ключевым словам "Microsoft Word".
Рис. 1.17. Результаты поиска по ключевым словам "Microsoft Word", выполненные при помощи каталога сети Internet Lycos
Как видно из этого рисунка, при поиске было просмотрено более чем 19 миллионов адресов и найдено 31373 документа, содержащих указанные нами слова. Однако вам не придется ждать, пока сервер Lycos пришлет полный список найденных серверов WWW или других источников информации. Вместо этого на экране появится информация о первых 10 адресах. Далее при необходимости вы сможете просмотреть по частям весь список.
Если же вы нашли то, что вам нужно, достаточно просто сделать щелчок по найденному адресу (на рис. 1.17 не показан) и вы перейдете на тот сервер, который содержит искомую информацию.
Заметим, что с помощью справочно-поисковых систем вы сможете найти не только сервер WWW, но и электронную конференцию, в которой встречаются указанные вами ключевые слова. Теперь мы переходим к описанию этого, очень удобного и нужного сервиса Internet.
Передача файлов
Строка "FTP - File Transfer from/to a remote site" запускает программу обмена файлами по протоколу FTP (File Transfer Protocol), с помощью которой вы сможете получить файлы из других компьютеров сети Internet или записать на диски этих компьютеров свои файлы.После выбора этой строки вы будете должны ввести адрес сервера FTP:
Specify the site you want to connect to, for example: Host: glas.apc.org Or, press
Введите адрес ftp.microsoft.com:
Host: ftp.microsoft.com
Произойдет подключение к серверу FTP фирмы Microsoft, после чего вам будет предложено ввести имя и пароль. Маловероятно, что вы зарегистрированы в этом сервере, однако можно ввести имя anonymous и свой полный почтовый адрес в качестве пароля, который вы получите в представительстве фирмы GlasNet
(символы пароля при вводе не отображаются):
Connected to ftp.microsoft.com. 220 ftp Microsoft FTP Service (Version 1.0). Name (ftp.microsoft.com:frolov): anonymous 331 Anonymous access allowed, send identity (e-mail name) as password. Password: frolov@glas.apc.org
Если вы все сделали правильно, на экране появится приглашение программы FTP:
230-This is FTP.MICROSOFT.COM please read the file index.txt for additional details. 230 Anonymous user logged in as anonymous. Remote system type is Windows_NT. ftp>
Теперь вам доступны файлы, расположенные на сервере FTP фирмы Microsoft, а их очень и очень много!
Введите команду DIR, знакомую вам из операционной системы MS-DOS. На экране отобразится содержимое текущего каталога в формате UNIX :
ftp> dir 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. d--------- 1 owner group 0 Jul 3 1995 bussys d--------- 1 owner group 0 Aug 9 1995 deskapps d--------- 1 owner group 0 Oct 27 1995 developr ---------- 1 owner group 7905 Oct 5 1995 dirmap.htm ---------- 1 owner group 4510 Oct 5 1995 dirmap.txt ---------- 1 owner group 712 Aug 25 1994 disclaimer.txt ---------- 1 owner group 577 Jan 15 18:15 index.txt d--------- 1 owner group 0 Feb 1 18:20 KBHelp ---------- 1 owner group 7209651 Feb 3 12:03 ls-lR.txt ---------- 1 owner group 910713 Feb 3 12:04 ls-lR.Z ---------- 1 owner group 764129 Feb 3 12:03 LS-LR.ZIP d--------- 1 owner group 0 Oct 20 1995 MSCorp d--------- 1 owner group 0 Dec 27 1995 netsr d--------- 1 owner group 0 Oct 11 1995 peropsys d--------- 1 owner group 0 Nov 30 1995 Products d--------- 1 owner group 0 Oct 5 1995 Services d--------- 1 owner group 0 Feb 2 16:02 Softlib ---------- 1 owner group 802 Aug 25 1994 WhatHappened.txt 226 Transfer complete. ftp>
Теперь вы можете получить нужный вам файл при помощи команды GET, указав ей в качестве параметра имя файла. При этом файл будет переписан с удаленного сервера на сервер сети GlasNet. Для того чтобы переписать файл на диск своего компьютера, вам будет нужно ввести команду DOWNLOAD.
Для того чтобы перемещаться по дереву каталогов вы можете воспользоваться командой CD.
После завершения передачи файлов введите команду BYE:
ftp> bye 221 Thank You for using FTP.MICROSOFT.COM Hit
Теперь вы можете нажать клавишу
Ранее в этой главе мы рассказывали, как можно получать файлы, переписывая их из серверов FTP в текстовом режиме. В среде операционной системы Microsoft Windows это делать значительно удобнее, пользуясь такими приложениями, как FTP Client for Windows или FTP-32 Client for Windows . Первая из них предназначена для Microsoft Windows версии 3.1 и входит в состав комплекта GlasInterACT. Вторую вы сможете получить из сети Internet, она будет работать в среде Microsoft Windows 95 и Microsoft Windows NT .
Если вы работаете с пакетом программ GlasInterACT, нажмите кнопку FTP, рсположенную в главном окне. Если же вы устанавливаете соединение с сервером в среде Microsoft Windows 95, воспользуйтесь папкой Dial-Up Networking, как это было описано ранее.
В первом случае после установки соединения вы увидите главное окно программы FTP Client for Windows, аналогичное изображенному на рис. 1.10. Во втором случае вам придется запустить программу FTP Client-32 for Windows самостоятельно, пользуясь ее пиктограммой.
Далее вы можете передавать и принимать файлы с использованием удобного интерфейса, похожего на интерфейс программы Norton Commander, как это было описано в разделе "Получение файлов из сети Internet" этой главы. При этом вам не нужно знать никаких команд, имеющих отношение к программе FTP.
Передача и прием электронной почты
Для того чтобы работать с электронной почтой в текстовом режиме, вы должны из главного меню диалоговой оболочки GlasNet выбрать строку Electronic Mail:m -- Electronic Mail
Если ваш почтовый ящик (который физически находится на сервере GlasNet) пуст, вы увидите следующее сообщение и меню:
Folder (incoming) is empty.
Reading folder: incoming...0 messages Type 'u' for next unread message, '?' for command summary, 'h' for more help.
Mail: (i)ndex (u)nread (w)rite (c)apture (d)elete (s)ave (h)elp (q)uit:
Меню Mail, показанное в предыдущей строке, предоставляет вам все необходимые услуги для отправки и получения почты, а также для просмотра содержимого своего почтового ящика и выполнения основных операций с ним.
Для того чтобы продемонстрировать вам простейшие приемы работы с электронной почтой, отправим сами себе маленькое письмо, состоящее из одной строки.
Выберите из меню Mail строку write, для чего вам достаточно после двоеточия ввести символ "w":
Mail:(i)ndex (u)nread (w)rite (c)apture (d)elete (s)ave (h)elp (q)uit:w
После этого программа спросит у вас, желаете ли вы ответить на сообщение, послать новое сообщение или послать копию сообщения:
Do you want: (r)eply reply with (c)opy (n)ew message (s)end copy ? n
Так как мы посылаем новое сообщение, мы вводим символ "n". В ответ нам будет предложено ввести электронный адрес корреспондента:
To: frolov@glas.apc.org
В данном случае мы набрали свой собственный адрес, так как собрались посылать письмо самим себе.
После ввода адреса от вас потребуется придумать краткое описание содержимого письма.
Subject: Test message
Так как ваш корреспондент может получать очень много почты, имеет смысл облегчить для него процесс просмотра писем, указывая в ответ на только что приведенный запрос краткое, но точное описание вашего послания.
Далее вам будет предложено либо набрать текст письма, либо указать путь к заранее подготовленному файлу с письмом:
Hit
Второй способ предпочтительнее, так как вы можете создать файл письма, пользуясь любым привычным для вас текстовым редактором. Соответствующая процедура подробно описана в книге "Руководство пользователя ИКС "ГласСеть".
Мы же отправим очень короткое сообщение, подготовив его текст, не отключаясь от сети. Для этого нажмем клавишу
На экране появится приглашение для ввода текста:
--------------------------------------------------------------------- Begin typing; press
Последняя строка письма должна состоять из одной точки, расположенной в первой позиции. Это признак конца сообщения.
Текст сообщения состоит из одной строки Tishis is a test message (мы специально сделали ошибку в первом слове, чтобы показать вам, как можно редактировать сообщение).
Набрав все строки сообщения и не забыв поставить точку, нажимаем клавишу
Hit
Если нажать клавишу
Edit:(a)dd (f)ormat (v)iew (r)eview (c)hange (u)pload (s)end (q)uit(?):v
Для просмотра текста сообщения введите символ "v":
-- start of text -- Tishis is a test message -- end of text -- Edit:(a)dd (f)ormat (v)iew (r)eview (c)hange (u)pload (s)end (q)uit(?):c
Теперь нам нужно заменить слово, введенное с ошибкой. Для этого вводим символ "c", в результате чего будет выполнена операция замены. Вам придется ввести ошибочное слово (на этот раз без ошибок!) и правильный вариант:
Enter old pattern: Tishis Enter new pattern: This
This is test message 1 change [Hit
Нельзя сказать, что такой способ редактирования удобен, но других средств редактирования в этом режиме, увы, нет.
Сделав замену, введите в меню Edit еще раз символ "v", чтобы посмотреть результат:
Edit:(a)dd (f)ormat (v)iew (r)eview (c)hange (u)pload (s)end (q)uit(?):v
-- start of text -- This is a test message -- end of text --
Теперь, похоже, ошибок нет и можно отправялть письмо. Выберите из меню Edit строку send, для чего введите символ
"s":
Edit:(a)dd (f)ormat (v)iew (r)eview (c)hange (u)pload (s)end (q)uit(?):s Hit
Далее нажмите клавишу
Cc:
Так как мы посылаем письмо только себе, в ответ на это приглашение нажмите еще раз клавишу
Message sent. Mail: (i)ndex (u)nread (w)rite (c)apture (d)elete (s)ave (h)elp (q)uit:
Через некоторое время письмо окажется в вашем почтовом ящике, в чем можно убедиться, если из меню Mail выбрать строку index:
Mail:(i)ndex (u)nread (w)rite (c)apture (d)elete (s)ave (h)elp (q)uit:i
Date # Subject Lines From ---- - ------- ----- ---- Mar 2 1* Test message 11 frolov
Из приведенной выше строки видно, что 2 марта было получено письмо, которое хранится в почтовом ящике под номером 1. Символ "*" около номера письма указывает, что письмо еще не прочитано (так и есть на самом деле).
В столбце Subject отображается краткое содержимое письма. Если в ящике лежит много писем, то вы легко сможете найти нужное, пользуясь этим столбцом.
Столбец Lines позволит вам оценить размер письма. Обратите внимание, что хотя мы посылали сообщение, состоящее только из одной строки, в полученном письме этих строк стало 11. Дело в том, что к письму был добавлен заголовок, который вы скоро увидите.
И, наконец, в поле From стоит адрес отправителя пиьма.
Теперь давайте попробуем переписать полученное письмо из почтового ящика, расположенного на сервере GlasNet, к себе на локальный диск. Для этого из меню Mail выберите строку capture:
Mail:(i)ndex (u)nread (w)rite (c)apture (d)elete (s)ave (h)elp (q)uit:c
В ответ на следующие вопросы введите символ "d" и укажите номер загружаемого письма, под которым оно хранится в почтовом ящике:
Do you want to (d)ownload message or switch (p)aging On/Off? d Enter message number: 1
Далее вы узнаете, что письмо содержит 309 байт 7-битового текста. Вам будет нужно выбрать протокол передачи данных для загрузки письма. Выберем протокол zmodem:
Found plain 7-bits text for download. 309 bytes to download. Protocol: (a)scii-text (k)ermit (x)modem (y)modem (z)modem (f)tp (? for help): z
В ответ на следующее приглашение введите имя файла, в который будет записан текст письма и нажмите клавишу
Enter filename to store message in: testmsg.txt
Если вы выбрали протокол передачи данных zmodem, автоматически начнется передача данных. После ее завершения вам следует нажать клавишу
Please instruct YOUR modem software to RECEIVE using zmodem soon. Hit
После того, как письмо будет переписано на диск вашего компьютера, выберите еще раз в меню Mail строку index:
Mail:(i)ndex (u)nread (w)rite (c)apture (d)elete (s)ave (h)elp (q)uit:i
Date # Subject Lines From ---- - ------- ----- ---- Mar 2 1 Test message 11 frolov
Как видите, теперь символ "*"
около номера письма исчез, так как мы только что прочитали письмо и оно уже не является новым.
Теперь вы можете удалить письмо из почтового ящика. Для этого следует выбрать из меню Mail строку delete и в ответ на дополнительный запрос указать номер удаляемого письма:
Mail:(i)ndex (u)nread (w)rite (c)apture (d)elete (s)ave (h)elp (q)uit:d Enter message number: 1 Message deleted. (Type 'und' and
Не пренебрегайте этой процедурой, так как за хранение большого объема корреспонденции в почтовом ящике с вас будет браться дополнительная плата.
Теперь давайте взглянем на полученное письмо:
From frolov Sat Mar 2 11:07:49 1996 Received: by glas.apc.org (Smail3.1.29.1 #13) id m0tsmM1-0003zTN; Sat, 2 Mar 96 11:07 +0300 Message-Id:
This is a test message
Как видите, размер заголовка значительно превышает размер самого письма. Некоторые строки заголовка были кратко описаны в разделе "Электронная почта", расположенного в начале этой главы.
Следует заметить, что если вы обратились для подключения к сети Internet в другую организацию (например, в Relcom ), сценарий работы с электронной почтой в текстовом режиме может сильно отличаться от только что описанного. В частности, Релком предоставит в ваше распоряжение программу, которая будет автоматически соединяться с почтовым сервером, получать новую почту и передавать почту, подготовленную вами заранее к отправке. После этого связь с сервером будет автоматически разъединена. Этот режим работы намного удобнее, однако если вы можете позволить себе установить на свой компьютер операционную систему Microsoft Windows, то вам будет доступна еще более удобная программа Eudora, которую мы опишем в нашей книге.
Когда вы подключаетесь с помощью терминальной программы к серверу GlasNet, для вас запускается специальная диалоговая оболочка, с помощью которой вы и получаете доступ к Internet. Другие организации могут предоставить вам доступ к удаленной консоли сервера, работающего под управлением операционной системы UNIX . Если вас не пугает перспектива работать с командным приглашением этой операционной системы, такой режим может показаться удобнее. Соответствующие средства достаточно хорошо описаны в литературе, список которой приведен в конце нашей книги.
Подключение к серверу
Запустите любую терминальную программу и позвоните с ее помощью по одному из телефонов, полученных вами в фирме GlasNet. О том, как работать с терминальными программами, вы можете узнать из 16 тома "Библиотеки системного программиста", который называется "Модемы и факс-модемы".Через некоторое время на экране терминальной программы появится приглашение следующего вида:
[this dialin modem is ZyXEL U-1496E 16.8] GlasNet (glas.apc.org) Need Help? +7-095 ХХХ-ХХХХ login:
В ответ вы должны ввести свой идентификатор, зарегистрированный в представительстве GlasNet, например:
login: ivanov
После этого у вас будет запрошен пароль:
Password:
При вводе символы пароля не отображаются.
Если пароль введен правильно, на экране появится запрос для ввода типа терминала, который эмулирует ваша терминальная программа:
Last login: Sat Feb 3 23:22:10 from T-kv01-1+ Terminal = vt100 (hit
Если ваш терминал соответствует стандарту VT100, просто нажмите клавишу
Welcome to GlasNet. For help, type "?" You have new conf entries in glas.netnews.e glas.netnews.r ... GlasNet Commands: c -- Conferences m -- Electronic Mail i -- Internet Services d -- Online Databases u -- User Directory p -- Payments s -- Setup: Change your password, language, terminal type e -- Extras bye -- Logout Your selection (? or 'h' for help):
Когда вы подключаетесь к сети GlasNet в первый раз (а также в процессе дальнейшей работы), то можете выбрать для общения с вами русский, английский, немецкий, французский, португальский или испанский язык. Подробнее об этом написано в книге "Руководство пользователя ИКС ГласСеть", которая выдается вам бесплатно при подключении к сети.
В приглашении "Your selection (? or 'h' for help):" вы должны ввести одну из команд сети GlasNet, перечисленных в меню.
Ниже мы привели список команд с кратким описанием.
| Команда | Описание |
| I | Работа в сети Internet |
| m | Работа с электронной почтой |
| c | Работа с телеконференциями |
| d | Доступ к текстовым базам данных |
| u | Просмотр списков пользователей |
| p | Просмотр состояния счета |
| s | Настройка параметров |
| e | Дополнительные возможности |
| bye | Завершение работы в сети GlasNet |
Если выбрать из меню команд строку "i -- Internet Services", на экране появится меню, с помощью которого можно выбрать один из нескольких режимов работы в сети Internet:
---------------------------------------------------------------- I N T E R N E T S E R V I C E S ---------------------------------------------------------------- [1] Gopher - Hypermenu Hierarchical System [2] Lynx - Text based WWW browser [3] Telnet - Terminal Access to a remote host [4] FTP - File Transfer from/to a remote site [5] SWAIS - Full Screen Database Browser
Select a number (? for help, or q to quit):
С помощью этого меню вы сможете использовать все основные режимы работы в сети Internet.
Система иерархических меню Gopher предоставляет доступ к ресурсам Internet и грандиозным запасам текстовой информации, расбросанной по всему миру. Она проста в использовании, но сейчас большую популярность приобретает система серверов World Wide Web (WWW), доступ к которой в текстовом режиме вы можете получить с помощью второй строки (программа Lynx ).
Подключение к сети
Как мы только что сказали, для использования современных графических средств доступа к Internet вам необходимо установить с этой сетью прямое соединение с использованием протокола TCP/IP.Этот протокол является стандартным для операционных систем Microsoft Windows 95 и Microsoft Windows NT , поэтому указанное выше соединение выполняется в этих случаях без особых проблем. В первом случае вы можете воспользоваться системой Dial-Up Networking, подключаемой на этапе установки сетевых средств Microsoft Windows 95, во втором - системой Remote Access Service, которая входит в состав Microsoft Windows NT.
Если же вы работаете в среде Microsoft Windows версии 3.1 или Microsoft Windows for Workgroups , средства TCP/IP могут быть установлены дополнительно. Есть такие средства и для операционной системы IBM OS/2 Warp .
В представительстве фирмы GlasNet вы можете приобрести набор приложений GlasInterACT , предназначенных для работы в сети Internet, объединенных общей запускающей программой (рис. 1.18). Этот набор работоспособен в среде Microsoft Windows версии 3.1, Microsoft Windows for Workgroups, а также Microsoft Windows 95.
Рис. 1.18. Набор приложений GlasInterACT, предназначенных для работы в сети Internet
В главном окне приложения GlasInterACT
имеются кнопки, предназначенные для работы с электронной почтой, конференциями, для просмотра содержимого серверов Gopher , для передачи файлов с использованием протокола FTP и для работы с уадаленной консолью компьютеров при помощи протокола TELNET .
Если нажать любую из перечисленных кнопок, кроме кнопки Mail, предназначенной для работы с электронной почтой, запустится система Trumpet Winsock, которая представляет собой реализацию протокола TCP/IP для операционной системы Microsoft Windows версии 3.1. Перед запуском у вас будет запрошены имя пользователя и пароль (рис. 1.19).
Рис. 1.19. Запрос имени пользователя и пароля при подключении к сети
Далее система будет автоматически дозваниваться до серверов GlasNet, пользуясь заранее подготовленным списком телефонов (рис. 1.20).
Рис. 1.20. Автоматическое соединение с серверами GlasNet
Как только связь будет установлена, запустится одно из приложений (в зависимости от того, какую кнопку вы нажали в главном окне приложения GlasInterACT.
В течении всего времени вашего подключения к сети на экране будет находится окно, в котором отображается время подключения (рис. 1.21). Время подключения - это то, за что в GlasNet вы платите деньги, поэтому следите за ним.
Рис. 1.21. В отдельном окне отображается время подключения к сети
Как видите, процесс подключения к сети очень прост - достаточно нажать на кнопку и ввести самые необходимые данные, такие как имя пользователя и пароль.
Для того чтобы подключиться к Internet, находясь в среде Microsoft Windows 95, достаточно после соответствующей настройки сетевых средств сделать двойной щелчок левой клавишей мыши по соответствующей пиктогрммме в папке Dial-Up Networking (рис. 1.22).
Рис. 1.22. Папка Dial-Up Networking
(телефонные номера приведены только для примера)
После этого на экране появится диалоговая панель Connect To, в которой можно указать имя пользователя, пароль, а также (при необходимости) изменить номер телефона и другие характеристики (рис. 1.23).
Рис. 1.23. Диалоговая панель Connect To
При соответствующей настройке соединение будет выполнено автоматически. При необходимости можно установить такую настройку, при которой до установления соединения или сразу после установления соединения на экране появится окно терминальной программы (рис. 1.24).
Рис. 1.24. Окно терминальной программы, которое появляется после установления соединения
Когда соединение установлено, на экране появляется диалоговая панель Connected to…, где отображается скорость передачи данных, время подключения к сети и другие параметры (рис. 1.25).
Рис. 1.25. Диалоговая панель, в которой отображаются параметры соединения
Теперь, после того как соединение с Internet установлено, вы можете запускать сетевые приложения и работать с Internet - принимать и отправлять почту, загружать на диск своего компьютера файлы, пользуясь протоколом FTP, работать с серверами WWW, удаленной консолью компьютеров и электронными конференциями.
Получение файлов из сети Internet
Как программиста или системного администратора, вас не оставит равнодушным возможность получить через сеть Internet новую версию драйвера для периферийного устройства компьютера, исходные тексты приложений Windows, составленные программистами Microsoft, IBM или Borland, последние версии самых разнообразных программ, документацию и многое другое. Запасы файлов в сети Internet огромны, так что для поиска приходится использовать специальные средства, о которых мы еще будем говорить.Для передачи файлов используется протокол FTP (File Transfer Protocol ), позволяющий переписывать файлы с дисков удаленного (возможно, очень удаленного…) сервера на локальный диск вашего компьютера. Разработаны удобные программы, напоминающие широко известную оболочку Norton Commander, упрощающие процесс передачи файлов. Примером может служить программа FTP-32 Client for Windows (рис. 1.10).
Рис. 1.10. Программа FTP-32 Client for Windows, предназначенная для передачи файлов по протоколу FTP
С левой стороны вы видите диски и каталоги вашего компьютера, с правой - удаленного. В нашем примере мы подключились к серверу FTP фирмы Microsoft, имеющей адрес ftp.microsoft.com.
Перемещаясь по каталогам удаленного компьютера, вы можете найти нужный вам файл и, выделив его, переслать к себе. Для пересылки нажмите кнопку с изображением стрелки, направленной влево.
Кнопка со стрелкой, направленной вправо, позволит вам переслать файл со своего локального диска на диск удаленного компьютера. Однако такая операция не всегда разрешена обыкновенному пользователю. Причина заключается в том, что пользователи, бесконтрольно записывая файлы на диск сервера, могут быстро переполнить его. Кроме того, открытые для записи каталоги могут служить местом распространения компьютерных вирусов.
При передаче файлов с помощью программы FTP-32 Client for Windows вы можете указать либо текстовый режим, либо двоичный, либо автоматический. Очевидно, что для передачи программ или архивов нужно использовать двоичный режим передачи, в то время как списки и описания файлов следует передавать в текстовом режиме. Если вы укажите режим передачи файлов неправильно, принятый файл будет искажен.
Ход процедуры копирования отображается в диалоговой панели Transfer Status (рис. 1.11) и вы можете за ним следить.
Рис. 1.11. Отображение хода процедуры копирования файла
В нижней части этой панели выводится объем переданных данных и скорость передачи в Kbps. Нажав кнопку Cancel вы можете отменить передачу файла. Это имеет смысл сделать, если скорость передачи слишком мала из-за низкого качества канала передачи или высокой загруженности сервера.
Средства удаленной передачи данных по протоколу FTP встроены теперь и в программу Norton File Manager , пришедшей в операционной системе Microsoft Windows 95 на смену программе Norton Commander.
Кроме того, для получения файлов из серверов FTP вы можете использовать программы-навигаторы, предназначенные для работы с серверами WWW. Последние становятся наиболее популярным средством хранения и представления информации в сети Internet.
Работа с базами данных
Строка SWAIS - Full Screen Database Browser в меню INTERNET SERVICES позволит вам работать с различными базами данных, доступными из сети GlasNet.Ниже показано меню, которое появляется на экране при выборе указанной строки:
------------------------------------------------------- G l a s N e t D a t a b a s e s ------------------------------------------------------- [1] Directories [2] Bibliographies & Library Catalogs [3] Miscellaneous Resources
Select a number (? for help, or q to quit):
Каждая строка этого меню открывает доступ к спискам различных каталогов и библиотек. Путешествуя по дереву списков, вы можете выбрать нужную вам базу данных.
Работа с электронной почтой
Для начала отправим самим себе небольшое текстовое сообщение, аналогичное тому, что мы отправляли в текстовом режиме. На этот раз мы воспользуемся приложением Eudora Light , которое входит в комплект программ GlasInterACT.Запустите приложение GlasInterACT и нажмите кнопку Mail (рис. 1.18). После ввода пароля на экране появится главное окно программы Eudora Light (рис. 1.4). Заметьте, что соединение с сервером GlasNet пока не установлено, так что можно работать с почтой в автономном режиме.
| Для того чтобы подготовить новое сообщение, нажмите вторую слева кнопку с изображением карандаша и двух листов бумаги. |
Сразу после этого в главном окне программы появится бланк, который нужно заполнить так, как это показано на рис. 1.26.
Рис. 1.26. Подготовка нового сообщения
Вы должны указать адрес получателя почты в поле To, описать краткое содержимое письма в поле Subject, и ввести текст письма под горизонтальной чертой. Другие поля этой формы нас пока не интересуют.
После этого нажмите кнопку Queue, и ваше письмо будет записано в очередь на отправку. При этом оно появится в папке Out, изображенной на рис. 1.26 в минимизированном виде.
Для того чтобы все подготовленные письма были отправлены, выберите из меню File строку Send Queued Messages или просто нажмите комбинацию клавиш
После завершения передачи вам будет предложено отключиться от сети (рис. 1.27).
Рис. 1.27. Диалоговая панель с запросом на отключение от сети
Если посылка почты - это все, что вы собирались сделать, нажмите кнопку Yes. После этого связь будет разорвана. В нашем случае можно поступить именно так.
Теперь займемся получением почты.
Выберите из меню File строку Check Mail или нажмите комбинацию клавиш
При наличии новой почты на экране появися сообщение, показанное на рис. 1.28.
Рис. 1.28. Сообщение, которое появляется на экране, если вы получили новую почту
Новая почта появится в папке In и будет отмечена жирной точкой, как это показано на рис. 1.29.
Рис. 1.29. Получена новая почта
Для просмотра новой почты достаточно сделать двойной щелчок левой клавишей мыши по соответствующей строке в папке In. После этого содержимое письма будет показано в отдельном окне (рис. 1.30).
Рис. 1.30. Просмотр содержимого письма
Содержимое письма можно сохранить в файле или распечатать на принтере.
Как видите, работать с почтой, пользуясь программой Eudora Light, намного удобнее, чем делать это в текстовом режиме через терминальную программу.
Работа с электронными конференциями
При подключении к сети Internet через протокол TCP/IP вы можете воспользоваться удобными программами, предоставляющими доступ к серверам конференций в реальном режиме. При этом вам не нужно подписываться на конференции и получать статьи по почте, так как вы можете сразу просмотреть заголовки статей на экране и переписать к себе на диск нужные вам статьи.Нам очень понравилась приложение News Express , предназначенное для интерактивного просмотра конференций, которое можно бесплатно получить из сети. После запуска на экране в окне Newsgroups (рис. 1.33) появляется список конференций (в котором перечислено несколько тысяч конференций на всевозможные темы).
Рис. 1.33. Главное окно приложения News Express
При первом подключении к серверу конференций загрузка списка конференций может занять несколько минут, однако в дальнейшем вы можете загружать такой список только время от времени.
Выбрав нужную вам тему, ориентируясь на ее название, сделайте двойной щелчок левой клавишей мыши по соответствующей строке. На экране появится новое окно, которое постепенно заполнится списком статей из выбранной конференции. На рис. 1.33 это окно показано на переднем плане.
Щелчком левой клавишей мыши по любому столбцу в окне просмотра названий статей вы легко сможете выполнить сортировку по теме, дате, имени автора статьи или по размеру статьи.
Для просмотра статьи вам достаточно сделать двойной щелчок левой клавишей мыши по ее заголовку. Содержимое статьи будет показано в отдельном окне (рис. 1.34).
Рис. 1.34. Просмотр содержимого выбранной статьи
Пользуясь одной из кнопок в инструментальной панели вы легко сможете послать в конференцию ответ на прочитанную статью или поместить туда новую статью.
Работа с серверами WWW
На серверах WWW хранятся страницы мультимедийной информации (которые для сокращения мы будем называть страницами WWW), объединенные и систематизированные с использованием гиперсвязей, напоминающих гипертекстовые ссылки в электронных справочных системах для Microsoft Windows.Страницы WWW могут содержать помимо текстовой графическую информацию, звук, а также видео. Очевидно, текстовый режим просмотра не очень подходит для работы с такими страницами, хотя кое-что вы все же сможете увидеть.
Тем не менее, давайте выберем из меню INTERNET SERVICES строку "Lynx - Text based WWW browser". На экране появится предложение ввести так называемый адрес URL нужного вам сервера WWW:
Specify the site you want to connect to, for example: URL: http://www.glasnet.ru URL:
Каждый сервер WWW имеет свой адрес. Позже мы научим вас ориентироваться в этих адресах, а пока введите строку, показанную ниже:
URL: http://www.microsoft.com
Через некоторое время на экране появится первая часть страницы сервера WWW фирмы Microsoft:
Microsoft Corporation (p1 of 3) Where do you want to go today? What's New Search Index FAQ Help Feedback Products Support For Developers Only Partners & Solutions Internet Resource Center Visit MSN Visit Microsoft
Welcome to Microsoft The worldwide leader in software for PCs.
Black Entertainment Television and Microsoft Announce New Alliance BET Holdings Inc. and Microsoft Corp. announced today that they will launch a joint venture to form a new company that offers Internet online programming, interactive television and CD-ROM titles. The goal is to create the premier brand for African-American consumers on the Internet.
-press space for more, use arrow keys to move, '?' for help, 'q' to quit
Arrow keys: Up and Down to move. Right to follow a link; Left to go back. H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list
Передвигаясь по полям страницы с помощью клавиш перемещения курсора по вертикали вы можете выбрать интересующий вас раздел. Для перехода к просмотру раздела нажмите клавишу перемещения курсора вправо, для возврата к просмотру предыдущего раздела - клавишу перемещения курсора влево. С помощью клавиши пробела вы сможете просмотреть содержимое всей страницы.
Конечно, в графическом режиме страницы WWW выглядят намного привлекательнее, но передача графики через медленный модем отнимает слишком много времени. Поэтому реально вы сможете работать в графическом режиме только в том случае, если ваш модем способен передавать данные со скоростью не менее 9600 bps.
Итак, продолжим описание строк меню INTERNET SERVICES.
Для того чтобы приступить к работе с серверами WWW, вы должны установить соединение с Internet по протоколу TCP/IP. К сожалению, на момент написания книги в состав комплекта GlasInterACT не входил навигатор WWW, однако вы можете воспользоваться любым из имеющихся, получив их, например, из сети Internet с помощью протокола FTP.
Если установить соединение с помощью средств Dial-Up Networking , входящих в состав Microsoft Windows 95, то вы сможете использовать для просмотра серверов WWW такие навигаторы, как Microsoft Internet Explorer , Netscape Navigator или Mosaic . Первый из них входит в состав пакета программ Microsoft Plus , остальные можно получить из сети Internet.
Установив соединение с Internet, просто запустите имеющийся у вас навигатор и начинайте работать.
Работа в текстовом режиме
На первом этапе вы должны подключиться к серверу GlasNet. В нашем примере мы воспользуемся терминальной программойHyper Access, которая входит в состав
Microsoft Windows 95. При этом на сервере GlasNet
с нами будет работать другая программа, специально предназначенная для того, чтобы вести диалог с пользователем. Фирмы, обеспечивающие доступ к Internet через терминальные программы, могут предоставить вам также консоль операционной системы UNIX . Не будем спорить, что удобнее, а перейдем к делу (на наш взгляд удобнее прямое соединение с Internet по протоколу TCP/IP, о чем мы еще расскажем).
Разговор через Internet в реальном времени
Хотите поговорить с кем нибудь через Internet?Нет никаких проблем. В сети существуют специальные серверы, позволяющие вам сделать это. На этих серверах организуется несколько электронных конференций, работающих в реальном времени.
К каждой такой конференции может подключиться различное количество участников - от двух до полутора десятков. В процессе работы вы видите сообщения, посылаемые участниками конференции и можете посылать свои сообщения (сразу всем участникам или только некоторым из них).
Конечно, такой разговор менее удобен, чем разговор по международному телефону, однако заметим, что во-первых, разговор через Internet обойдется вам намного дешевле, а во-вторых, вы получите совсем другие ощущения. Лучше попробуйте сами.
С ЧЕГО НАЧАТЬ
Прежде чем мы приступим к изучению глобальных сетей и установке программного обеспечения для работы в сети Internet, сделаем небольшой обзор, который поможет вам оценить возможности глобальных сетей. На конкретных примерах вы сможете убедиться в том, что благодаря усилиям многих людей технология глобальных коммуникаций стала доступна для всех. Кроме того, в этой главе мы расскажем, что вы должны сделать, чтобы подключиться к сети Internet.
Итак, с чего же начать?
Конечно, прежде всего у вас должен быть компьютер. Конфигурация компьютера, предназначенного для работы с Internet, зависит от того, какие задачи вы собираетесь решать с помощью этой сети. Если все, что вы собираетесь делать в сети - это принимать или передавать электронную почту, вам достаточно приобрести простейший компьютер, способный работать под управлением операционной системы MS-DOS. Однако в Internet есть мультимедийная информация, для работы с которой необходимо установить такую операционную систему, как Microsoft Windows версии 3.1, Microsoft Windows 95, Microsoft Windows NT или IBM OS/2 Warp. Кроме этого, для прослушивания звуковых сообщений, полученных из Internet, а также для отправки собственных звуковых сообщений вы должны оснастить компьютер звуковым адаптером с микрофоном, таким как Creative Sound Blaster.
Если компьютер у вас уже есть, его нужно подключить к глобальной сети. Это можно сделать либо по телефонной линии (через модем), либо через локальную сеть вашей фирмы, если она имеет выход в сеть Internet. О подключении через локальную сеть вы должны договариваться с системным администратором сети. Что же касается телефонной линии, то здесь вы все сможете сделать самостоятельно.
Обеспечив физическую возможность подключения, вы должны выбрать фирму, которая будет предоставлять вам услуги Internet (Internet service provider). За рубежом имеются сотни таких фирм. В нашей стране у вас также не будет особых проблем с выбором. Основные критерии здесь - стоимость услуг, качество телефонных линий, пропускная способность канала, связывающего сервер фирмы с Internet и загруженность этого сервера. Если же вы подключаетесь к сети Internet через локальную сеть вашей фирмы, выбор уже был сделан ранее.
Далее вы должны выбрать программное обеспечение для работы с Internet. При этом необходимо учитывать различные факторы, такие как тип модема, операционная система, установленная на компьютере, а также, разумеется, задачи, которые вы собираетесь решать с помощью глобальной сети Internet.
Если все, что вы можете себе позволить, это модем со скоростью передачи 2400 bps, имеет смысл использовать простейшее программное обеспечение, предназначенное для работы в текстовом режиме. Однако намного удобнее работать с приложениями Microsoft Windows или IBM OS/2, специально созданными для работы в Internet. Только в этом случае вы сможете в полной мере оценить новые возможности, которые перед вами открываются. При этом вы должны учесть, что для таких приложений нужен, как правило, высокоскоростной модем. Некоторые рекомендации по выбору и подключению модема при приведем позже.
Фирмы, предоставляющие услуги Internet, обычно снабжают своих клиентов бесплатно или за небольшую плату всем необходимым программным обеспечением, причем уже настроенным. Кроме того, вы можете переписать все нужные вам программы непосредственно из сети Internet, пользуясь любой терминальной программой, такой как Windows Terminal , MTE , Telix и т. п. В нашей книге мы расскажем о том, где именно находятся эти программы и каким образом их можно взять оттуда.
Как правило, вы можете использовать программы, размещенные в сети Internet, по принципу Shareware или даже Freeware.
В первом случае вы бесплатно пользуетесь полученной программой в течении огранченного времени (обычно 30 дней), а затем вы должны либо зарегистрировать ее, уплатив несколько десятков долларов, либо отказаться от дальнейшего использования программы. Для регистрации из нашей страны вы должны иметь кредитную карточку, дающую возможность перевода денег за рубеж, такую как Visa или MasterCard.
Во втором случае разработчик никак не ограничивает вас в использовании программы. Заметим, что многие используют для работы с Internet только бесплатные программы (в том числе бета-версии программ), полученные из сети Internet.
В первой главе нашей книги мы рассмотрим все перечисленные выше вопросы. Надеемся, что после ее прочтения вы сможете самостоятельно подключить свой компьютер к глобальной сети Internet.
Сеанс связи с Internet в текстовом режиме
Для того чтобы дать вам представление о том, что вы увидите на экране своего компьютера, подключившись к глобальной сети Internet, мы проведем краткие сеансы связи в текстовом и графическом режимах. В первом случае мы подключимся к серверу GlasNet с помощью обычной терминальной программы, во втором - используем соединение на базе протокола TCP/IP в среде операционной системы Microsoft Windows 95.Почему мы выбрали для иллюстрации сеть GlasNet?
Во-первых, мы уже давно работаем с этой сетью, и она нас полностью удовлетворяет. Во-вторых, эта сеть является относительно недорогой и вместе с тем предоставляет практически полный набор необходимых вам услуг.
Для того чтобы стать абонентом сети GlasNet (и, соответственно, получить доступ в сеть Internet), вам нужно обратиться в представительство фирмы. Там вы получите идентификатор, пароль и номера телефонов, с помощью которых вы будете связываться с сервером GlasNet. Кроме этого, вам будет предложена книга "Руководство пользователя ИКС ГласСеть" и набор программ GlasInterAct, предназначенный для выполнения основных работ в сети Internet.
Если вы привыкли к работе в среде MS-DOS или если у вас модем с низкой скоростью передачи данных (2400 bps), имеет смысл звонить на сервер GlasNet при помощи обычной терминальной программы, такой как Windows Terminal или MTE. При этом вы будете работать в текстовом режиме, что не очень удобно, но все же лучше, чем ничего.
Для работы с Internet в среде Microsoft Windows, Microsoft Windows 95 и Microsoft Windows NT лучше использовать набор программ GlasInterAct, а также другие, специально предназначенные для этого программы, например, Netscape , Mosaic , Microsoft Internet Explorer и другие. Операционная система IBM OS/2 Warp также имеет в своем составе средства, предназначенные для работы с Internet.
Выбором программных средств мы займемся позже, а сейчас немного поработаем в сети Internet с помощью терминальной программы в текстовом режиме.
Серверы World Wide Web
Электронная почта и передача файлов - это то, с чего начиналось становление глобальных сетей. Безусловно, этот сервис очень важен, особенно электронная почта. Однако в последнее время во всем мире наблюдается лавинообразный рост количества серверов WWW (World Wide Web), которые могут быть использованы (и активно используются) для представления мультимедийной информации, имеющей отношение к самым разным сферам человеческой деятельности.Серверы WWW хранят информацию в виде гипертекстовых файлов, подготовленных специальным образом. Эти файлы ссылаются на другие такие же файлы, на файлы, содержащие изображения, звук, видео и т. п. Примечательно то, что ссылки могут указывать на файлы, расположенные не только на том же самом сервере WWW, но и на любом другом в мире (если, конечно, этот сервер подключен к сети Internet).
Как все это выглядит для пользователя?
Внешне больше всего это похоже на справочные системы , встроенные в операционные системы Microsoft Windows и IBM OS/2 . Такие системы состоят из отдельных страниц, на которых размещается текст, графические изображения, а также ссылки на другие страницы. Щелкая левой клавишей мыши по ссылкам (обычно выделяются цветом или подчеркиванием), вы можете переходить к просмотру разных страниц справочной системы (рис. 1.12).
Рис. 1.12. Справочная система, встроенная в Microsoft Windows
Для просмотра страниц сервера WWW созданы специальные программы-навигаторы , такие как Mosaic , Netscape Internet Navigator , Microsoft Internet Explorer , Lynx и другие. Большинство из них отображает страницы серверов WWW в графическом виде, хотя с помощью программы Lynx можно получить упрощенное текстовое представление страницы. Последнее обстоятельство имеет значение в основном для владельцев низкоскоростных модемов.
Внешний вид главного окна приложения Mosaic for Windows показан на рис. 1.13.
Рис. 1.13. Главное окно приложения Mosaic for Windows
Как видно из этого рисунка, в окне навигатора отображается главная страница сервера WWW
института космических исследований ИКИ Российской Академии наук. На этой странице находится графическое изображение, текст, а также ссылки на другие страницы (гиперсвязи), выделенные подчеркиванием. Сделав двойной щелчок левой клавишей мыши по такой ссылке, вы перейдете к просмотру другой страницы этого или, возможно, другого сервера WWW.
Перемещаясь по страницам сервера WWW института космических исследований вы получите очень много интересной информации о российских космических программах, как уже полностью выполненных, так и находящихся в стадии подготовки (рис. 1.14). Без особого труда мы нашли здесь, например, фотографии, полученные с межпланетной станции Фобос, сведения об измерительных приборах, установленных на борту этой станции и многое другое.
Рис. 1.14. Страница сервера WWW, посвященная программе Марс-96
В мире существуют десятки тысяч серверов WWW (если не больше) и их число стремительно растет. Серверы WWW
идеально подходят для размещения рекламной информации, организации продаж самых разнообразных товаров через сеть Internet, обеспечения технического сервиса, размещения справочной информации, для развлечений
и так далее.
Например, корпорация Microsoft распространяет через свой сервер WWW информацию о новых программных продуктах, драйверы устройств для своих операционных систем, демонстрационные и бесплатные программы, и многие другие сведения, необходимые пользователям и разработчикам программ. Аналогичный сервис есть и у других фирм, занимающихся разработкой программного обеспечения, например, у фирмы Borland.
Другая, не менее важная область применения серверов WWW, это организация удаленного доступа к информационным базам данных . Обращаясь к такой базе данных, пользователь заполняет форму, расположенную на сранице, указывая в ней данные для запроса, и запускает последний на выполнение. Через некоторое время на экране появится страница с результатом.
При необходимости вы сможете организовать собственный сервер WWW, однако чаще фирмы размещают собственные страницы на уже существующих серверах WWW, принадлежащих, например, поставщикам услуг Internet. В нашей книге мы рассмотрим различные способы подготовки страниц для размещения на серверах WWW.
Сервис Internet
Прежде чем двигаться дальше, мы должны описать те задачи, для решения которых нужна сеть Internet, и сделать некоторые определения.Прежде всего, Internet удобно использовать для передачи электронной почты, файлов, а также для просмотра мультимедийной информации, расположенной на серверах WWW.
Помимо этого, имея доступ в Internet, вы сможете работать в телеконференциях, участвуя в обсуждении любых проблем и обмениваясь информацией со всем миром. Обмениваясь сообщениями, вы сможете "поговорить" в реальном времени с собеседниками, которые находятся в разных странах. Вы сможете регулярно получать электронные варианты газет и журналов, делать покупки, не выходя из дома, размещать собственную рекламу и так далее и так до бесконечности.
Расскажем подробнее о наиболее важных, на наш взгляд, задачах, решаемых с помощью сети Internet.
Точка подключения
На следующем этапе вы должны выбрать поставщика услуг Internet , т. е. фирму, обеспечивающую доступ к Internet. Эта фирма выделит для вас электронный почтовый адрес и объединит ваш компьютер с миллионами других, разбросанных по всему миру.Каким образом?
Схематически основные компоненты глобальной сети показаны на рис. 1.1.
Рис. 1.1. Компоненты глобальной сети
В сети Internet есть множество серверов и локальных сетей, созданных на базе компьютеров различной мощности, от небольших с операционными системами UNIX или Microsoft Windows NT , до мини-ЭВМ и крупных компьютеров. Эти серверы служат хранилищами данных и принадлежат различным организациям, коммерческим и некоммерческим, университетам, исследовательским институтам, национальным библиотекам, отдельным лицам и т. д.
Серверы объединяются между собой спутниковыми и оптоволоконными линиями связи, высокоскоростными линиями ISDN и линиями с протоколом X.25 (последние две на рис. 1.1 не показаны), а также телефонными линиями связи. Серверы глобальной сети могут быть включены в состав локальных сетей.
Отдельные пользователи могут подключаться к серверам через обычные телефонные линии связи с помощью модемов. Так как телефонная сеть опутывает весь земной шар, теоретически вы можете подключиться к любому серверу, подсоединенному к этой сети. Однако стоит ли звонить по международной линии в Америку, если вы сможете найти какой-нибудь сервер, расположенный в вашем городе и подключенный к сети Internet, например, при помощи спутниковой линии связи?
Поэтому выбирайте точку подключения к глобальной сети Internet, расположенную в своем городе. При этом вы будете подключаться через модем и городскую телефонную сеть к серверу, который находится у вас под боком, а связь со всем миром будет реализована при помощи спутниковых или других скоростных линий. Пример такого подключения показан на рис. 1.2.
Рис. 1.2. Подключение к серверу через городские телефонные линии
Когда вас подключают к Internet через телефонную линию, вам сообщают номера телефонов. Это локальные номера, к которым подключены модемы, расположенные в вашем городе. Дополнительно вы должны выбрать себе иденификатор и пароль.
Услуги сети Internet платные, поэтому вам придется платить за подключение к сети (разовый платеж), а также делать периодические взносы, размер которых зависит в том числе и от того, насколько активно вы будете пользоваться услугами Internet. Так как телефонные звонки внутри города значительно дешевле междугородних и тем более международных, показанная на рис. 1.2 схема подключения позволит вам работать с зарубежными серверами, пользуясь обычной городской телефонной линией.
Отметим, что такое непрямое соединение совершенно прозрачно, поэтому вы сможете работать через локальное соединение непосредственно с удаленным сервером, пользуясь протоколом передачи данных TCP/IP. Об этом протоколе мы расскажем позже.
Если ваша фирма имеет локальную сеть, можно организовать доступ к Internet через единый сервер. При этом сервер можно подключить к Internet с помощью спутниковой линии связи (рис. 1.3), скоростных линий ISDN или X.25, и даже через обычные телефонные линии.
Рис. 1.3. Подключение к Internet через локальную сеть
Вариант, показанный на рис. 1.3, хорош всем, кроме стоимости - для того чтобы купить спутниковую линию связи, вам придется потратить не один десяток тысяч долларов. Тем не менее, если по соседству находится фирма, уже имеющая спутниковую линию связи, вы можете подключиться к ее серверу менее экзотическим способом, например, при помощи оптоволоконного или коаксиального кабеля. Такой вариант вам обойдется существенно дешевле.
Однако скорее всего вы будете подключаться к сети Internet через телефонную линию с использованием модема. Здесь вам нужно обратиться к таким фирмам, как Relcom , GlasNet , Sovam или другим фирмам, предоставляющим доступ к сети Internet в вашем городе. За дополнительную плату вам может быть выделена телефонная линия или отдельный высокоскоростной канал связи, однако это удовольствие стоит недешево.
Возможно, вы слышали о бесплатной некоммерческой сети FidoNet. Через эту сеть вы не сможете получить полноценный доступ к сети Internet, однако FidoNet позволяет обмениваться электронной почтой с абонентами сети Internet. В нашей книге мы не будем касаться этой сети, так как она заслуживает отдельного разговора.
Удаленная консоль компьютера
В сети Internet имеется немало серверов, предоставляющих доступ к своей консоли. Обычно такие серверы работают под управлением операционной системы UNIX .Для получения доступа к консоли компьютера вы должны подключиться к сети Internet и запустить программу с названием TELNET .
Версии этой программы имеются практически для любой операционной системы. В частности, программа TELNET есть в операционных системах Microsoft Windows 95 (при установке расширения Microsoft Plus) и Microsoft Windows NT .
По своему назначению удаленная консоль компьютера ничем не отличается от локальной, поэтому вы можете делать все, что можно делать с символьного терминала, подключенного непосредственно к компьютеру.
Для того чтобы приступить к работе с удаленным компьютером, вы должны ввести имя и пароль. Многие компьютеры в Internet имеют специальный вход для гостей, поэтому вы сможете работать, не спросив на то разрешения у системного администратора удаленного компьютера. Разумеется, при этом ваши права доступа будут сильно ограничены.
Зачем вам может понадобиться доступ к удаленным компьютерам через удаленную консоль?
В сети Internet существуют справочные и поисковые системы, доступ к которым возможен через программу TELNET . И хотя в настоящее время более удобно искать нужную информацию с помощью средств WWW, старые поисковые системы тоже продолжают успешно работать. Запустив запрос в такой системе, вы можете получить адрес сервера WWW, FTP или адрес какого-либо другого ресурса Internet, содержащего необходимые вам данные. Причем в некоторых случаях вы можете сделать так, что результат запроса будет отправлен вам в виде электронного письма. Последнее особенно полезно, если на поиск будет затрачено много времени.
Если вы - администратор сети, то с помощью удаленной консоли сможете управлять работой сервера не выходя из дома, что, очевидно, очень удобно.
Строка "Telnet - Terminal Access to a remote host" открывает для вас возможность получить доступ к консоли удаленного компьютера. Вы только представьте это себе - клавиатура и видеомонитор стоят у вас дома, а компьютер находится на удалении в тысячи километров!
Программа TELNET , предназначенная для эмуляции удаленной консоли компьютера входит в состав операционной системы Microsoft Window NT, а также расширения Microsoft Plus для операционной системы Microsoft Windows 95. Есть версия этой программы для Microsoft Windows for Workgroup версии 3.11, которая поставляется в составе пакета TCP/IP для этой операционной системы.
После установки соединения с Internet запустим программу TELNET в среде Microsoft Windows 95 (эта программа копируется в системный каталог при установке расширения Microsoft Plus). На экране появится главное окно этой программы (рис. 1.31).
Рис. 1.31. Главное окно программы TENET после подключения к серверу archie.au
Для подключения к удаленному серверу выберите из меню Connect строку Remoute System. На экране появится диалоговая панель Connect, показанная на рис. 1.32.
Рис. 1.32. Диалоговая панель Connect, с помощью которой можно подключиться к удаленному серверу
В поле Host Name этой диалоговой панели вы должны указать адрес компьютера, доступ к удаленной консоли которого вам нужен. Если адрес указан правильно, то через некоторое время после того как вы нажмете на кнопку Connect на экране появится приглашение удаленной системы (как это показано на рис. 1.31).
Внешний вид этого приглашения зависит от того, к какому компьютеру вы подключились. В данном случае вам предоставляется возможность подключиться к системе с одним из трех идентификаторов. В зависимости от выбранного идентификатора вам будут доступны услуги системы Archie (поисковая система), сервис каталогов и системы поиска в сети NETFIND .
Если вы подключены к сети Internet через GlasNet, попробуйте подключиться к серверу glas.apc.org. Вы увидите на экране приглашение, аналогичное тому, какое появляется, когда вы подключаетесь к GlasNet через терминальную программу. Вы можете ввести свой идентификатор и пароль и продолжить работу в текстовом режиме.
Виртуальная реальность в Internet
Если вы когда-либо играли в DOOM или DESCENT, то у вас уже есть некоторое представление о виртуальной реальности . В системах виртуальной реальности на экране появляются трехмерные объекты, такие как комнаты, дома, деревья, люди, монстры и т. п. Вы можете перемещаться среди этих объектов при помощи клавиатуры, мыши или джойстика, при этом у вас создается иллюзия реального трехмерного пространства.Нечто подобное появилось и в Internet
на базе серверов WWW, однако по сравнению с перечисленными выше играми здесь используются другие принципы. Поясним это подробнее.
Отображение непрерывно изменяющихся изображений связано с передачей значительного потока данных. Когда программа работает на компьютере, она берет эти данные с диска и после соответствующей обработки отображает на экране. Скорость передачи данных через модем несравнима со скоростью передачи данных через адаптер диска, поэтому сервер WWW не может передавать вам меняющиеся изображения в реальном времени.
Для того чтобы преодолеть это ограничение, поступают следующим образом. Изображения объектов виртуальной реальности хранятся локально на компьютере (они входят в комплект средств просмотра виртуальной реальности), а через модем передаются только названия этих объектов и названия действий, которые должны над ними выполняться (либо номера объектов и действий).
В результате, когда путешествуя по виртуальному зданию вы попадаете, например, в комнату, через модем передаются только описание комнаты (размеры комнаты, номера фактуры обоев и т. п.), но не ее изображение.
Вы тоже это можете
Если у вас есть желание, то вы можете не только пассивно потреблять информацию, размещенную в Internet, но и распространять собственную. Например, вы можете разместить свои файлы и страницы на существующих серверах FTP и WWW либо даже создать свои собственные серверы и подключить их к Internet. Разумеется, эти услуги не бесплатны, особенно, если вы собираетесь размещать в сети коммерческую информацию. Однако цены вполне доступны, а техническая сторона этого дела будет рассмотрена в нашей книге. Кроме того, вы можете участвовать в обсуждениях, которые проводятся в рамках электронных конференций, посылая в них собственные статьи, программы, графические изображения и т. д.Собственный сервер FTP вы можете создать на базе Microsoft Windows NT . Все необходимое программное обеспечение входит в состав этой операционной системы. Если же вы будете размещать файлы на чужом сервере FTP, то вам достаточно принести файлы, например, на дискетах, и договориться о стоимости хранения данных (обычно оплата зависит от объема данных и срока хранения).
Для создания собственного сервера WWW можно использовать систему Microsoft Information Server , которая предназначена для работы под управлением операционной системы Microsoft Windows NT версии 3.51. В том случае, когда создание собственного сервера WWW, подключенного к сети Internet и работающего круглосуточно нецелесообразно, вы можете разместить собственные страницы на чужом сервере.
Большинство фирм, предоставляющих услуги Internet, занимаются подготовкой страниц для размещения на сервере WWW, причем вы можете принести свои материалы в любом виде (хотя бы и в рукописном). Однако услуги по подготовке страниц могут быстро опустошить ваш кошелек, поэтому по возможности эту работу следует выполнить самостоятельно.
Старницы сервера WWW представляют собой текстовый файл, подготовленный специальным образом с использованием языка разметки гипертекстов HTML . Ниже мы привели для примера начальный фрагмент такого размеченного текста:
На первый взгляд, создание страниц WWW представляет собой достаточно кропотливую работу. И в самом деле, если готовить такие страницы в обычном текстовом редакторе, вам придется потратить немало времени.
К счастью, к настоящему времени созданы специальные средства разработки страниц для серверов WWW (страниц WWW), которые позволяют готовить последние в визуальном режиме WYSIWYG (What You See Is What You Get). На рис. 1.35 показано одно из таких средств - Microsoft Internet Assistant , которое прилагается бесплатно в виде расширения для текстового процессора Microsoft Word for Windows.
Рис. 1.35. Расширение Microsoft Internet Assistant, предназначенное для создания и редактирования страниц WWW
Удобство средств визуального проектирования страниц WWW заключается в том, что вы можете легко добавлять в страницу графику, таблицы, гипертекстовые ссылки, а также другие элементы и сразу же увидите результат. Расширение Microsoft Internet Assistant
позволяет, кроме того, преобразовать существующие документы в формат страниц WWW. Это удобно, если у вас уже есть материалы в формате Microsoft Word for Windows, и вы собираетесь разместить их на сервере WWW.
Фирма Netscape, известная своим навигатором Internet, также создает средства подготовки страниц WWW. Ее приложение Netscape Navigator Gold версии 2.0, как и расширение Microsoft Internet Assistant, позволяет создавать страницы WWW в визуальном режиме (рис. 1.36).
Рис. 1.36. Подготовка страниц WWW в визуальном режиме с помощью приложения Netscape Navigator Gold версии 2.0
Позднее в отдельной главе мы научим вас пользоваться некоторыми средствами создания страниц WWW и приведем самые необходимые сведения о языке разметки страниц HTML.
Выбор модема
Как мы уже говорили, если вы подключаетесь к сети Internet через телефонную линию, вам нужен модем. Подробно о модемах мы рассказывали в 16 томе "Библиотеки системного программиста", который называется "Модемы и факс-модемы". Здесь мы приведем только самые необходимые сведения.По своему конструктивному исполнению модемы бывают внешние и внутренние. Внешние подключаются к последовательному адаптеру компьютера при помощи отдельного кабеля. Кроме этого, внешние модемы необходимо подсоединить к электропитающей сети, поэтому в комплекте с ними обычно поставляют блоки питания. Внутренние модемы вставляются в разъем, расположенный на системной плате компьютера, подобно видеоадаптеру или адаптеру жесткого диска. Для внутреннего модема отдельный блок питания не нужен.
Преимуществом внешнего модема является легкость подключения и мобильность. Однако учтите, что современные высокоскоростные модемы нуждаются в последовательном адаптере, выполненном на базе микросхемы UART типа 16550 или лучше с поддержкой внутренней очереди данных FIFO , причем адаптер должен быть способен работать на скорости 115200 bps.
Если вы купили компьютер недавно, скорее всего он оборудован именно таким адаптером. В последовательных адаптерах старых компьютеров установлены микросхемы UART типа 16450 или даже 8250. Эти микросхемы не обеспечивают достаточной производительности и не позволяют реализовать все преимущества современных модемов. Впрочем, для старого компьютера можно купить новый последовательный адаптер.
Внутренние модемы содержат встроенную микросхему UART типа 16550 или аналогичную, поэтому со скоростью передачи данных у вас не будет никаких проблем. Другое преимущество внутренних модемов заключается в том, что для них не нужен блок питания и его не нужно включать и выключать отдельным переключателем. Кроме того, внутренний модем не занимает место на столе.
Выбирая модем, вы должны убедиться в том, что он способен работать с современными протоколами, такими как протокол исправления ошибок V.42/MNP2-4 , протокол сжатия данных V.42 bis/MNP 5 . Кроме того, хороший модем, способный передавать данные со кроростью 14400 bps, должен соответствовать стандартам V.32 bis, V.32, V.22 bis, Bell 212A/V.22, V.23, V.25. Bell 103/V.21. Если же модем может передавать данные со скоростью 28800 bps, то он обычно совместим со стандартами V34 и V.FC . Сведения о стандартах, которым соответствует модем, вы можете почерпнуть из документации, поставляемой вместе с модемом.
Однако лучше всего не увлекаться проверкой соответствия стандартам, а выбрать модем, изготовленный известной фирмой. Дело в том, что современные операционные системы, такие как Microsoft Windows 95, имеют в своем составе драйверы модемов. Перед покупкой модема убедитесь, что используемая вами операционная система способна с ним работать. Учтите, что хотя вы всегда можете указать при установке операционной системы модем, совместимый с набором команд Hayes (описанным в 16 томе "Библиотеки системного программиста"), наилучших результатов можно добиться только при использовании драйвера, специально разработанного для выбранного вами модема.
Из модемов, которые предлагаются на нашем рынке, наиболее распространены модемы фирм US Robotics и Zyxel .
Модемы US Robotics линии Sportster обеспечивают, на наш взгляд, наилучшее соотношение стоимости к скорости передачи данных. Приблизительно за 200 долларов США вы можете приобрести внутренний факс-модем US Robotics Sportster со скоростью передачи данных 28800 bps. Такая скорость вполне достаточна для работы с современными средствами Internet. Если же эта сумма вам не по карману, то вы вполне сможете обойтись модемом US Robotics Sportster со скоростью передачи данных 14400 bps, который дешевле примерно в два раза и обеспечивает вполне приемлимые характеристики.
Модемы US Robotics линии Courier стоят дороже, однако они способны работать с протоколом HST, обеспечивающим неплохие результаты на зашумленных линиях.
Очень хороши модемы Zyxel, хотя за них вам придется заплатить больше, чем за сравнимые с ними по скорости модемы US Robotics Sportster. Эти модемы обеспечивают передачу данных со скоростью 19200 bps по протоколу, разработанному фирмой Zyxel, а также более высокие скорости по стандартным протоколам (это касается новых моделей модемов Zyxel).
Для того чтобы приступить к экспериментам с глобальной сетью Internet, вы сможете воспользоваться даже старым модемом со скростью передачи данных 2400 bps. Если вы будете работать в основном с электронной почтой и ее объем будет невелик, возможно, у вас не будет особых проблем. Заметим только, что очень старые модемы могут оказаться неспособными работать с протоколами исправления ошибок V.42/MNP2-4 и протоколом сжатия данных V.42 bis/MNP 5. В этом случае мы настоятельно рекомендуем использовать терминальные программы, выполняющие эмуляцию перечисленных протоколов, например, терминальную программу MTE (MNP Terminal Emulator).
В любом случае для более или менее приемлимой скорости работы с современными средствами Internet, такими как серверы World Wide Web (WWW) и протоколами передачи данных FTP вам нужно обзавестись модемом со скоростью передачи данных не менее 9600 bps. Чем эта скорость выше, тем быстрее вы сможете работать в сети Internet и тем меньше вам придется платить за передачу данных, так как многие фирмы, предоставляющие доступ в Internet, берут плату за время подключения к сети. Поэтому экономия денег при покупке модема может обернуться потерями (и немалыми) при оплате за работу в Internet.
Поясним это на конкретном примере.
Большинство фирм, подключающих пользователей к сети Internet, взымают плату за время подключения. То есть чем дольше вы работаете в сети, тем больше нужно платить. В среднем размер почасовой оплаты в зависимости от поставщика услуг Internet может колебаться в пределах от 3 до 6 долларов США. При этом дополнительные затраты в 100 долларов при покупке модема со скоростью передачи 28800 bps окупятся за 16 - 30 часов работы. В дальнейшем, обладая высокоскоростным модемом вы будете экономить 1,5 - 3 доллара в час, что весьма ощутимо. Впрочем, почасовая оплата может зависеть и от скорости вашего модема, о чем вы можете узнать у выбранного вами поставщика услуг Internet.
После того как вы приобрели модем, его нужно подключить к компьютеру и к телефонной сети. О том, как это сделать, мы рассказывали в 16 томе "Библиотеки системного программиста".
Практическое введение в Internet, E-Mail, FTP, WWW и HTML
Адреса в сети TCP/IP
Одно из удобств протокола IP заключается в том, что с его помощью можно рассылать пакеты данных в широковещательном режиме, когда они достигают всех компьютеров физической сети. Протоколы IPX и NETBIOS также обладают этим свойством.Что же касается протокла TCP, то для передачи данных с его помощью необходимо создать канал связи между компьютерами. Канал создается с использованием протокола IP.
Каждый компьютер, подключенный к сети TCP/IP, имеет свой адрес, который представляется 32-разрядным двоичным числом. Этот адрес не должен совпадать с адресами других компьютеров.
Помимо компьютеров, к сети могут подключаться и другие устройства, такие, например, как сетевые принтеры. Они также могут иметь свой адрес. Поэтому в дальнейшем для обозначения устройств, подключаемых к сети, мы будем пользоваться термином узел (название, принятое в зарубежной литературе - host).
Адрес узла логически разделяется на две части, одна из которых называется идентификатором сети Network ID, а другая - идентификатором узла Host ID (рис. 2.1).
Рис. 2.1. Компоненты адреса TCP/IP
Глобальная сеть может объединять много сетей, каждая из которых имеет свой идентификатор Network ID. В каждой сети может располагаться некоторое количество узлов, каждый из которых имеет свой идентификатор Host ID. Такми образом, с помощью пары чисел (Network ID, Host ID) можно адресовать любой узел, подключенный к глобальной сети на базе протокола TCP/IP.
Мы, однако, ничего не сказали о количестве разрядов, отведенного для указанных полей из полного 32-разрядного адреса. Дело в том, что существует три класса адресов , обозначаемых буквами A, B и С, для которых используется различная разрядность полей Network ID и Host ID.
В сети с адресами класса A (рис. 2.2) для идентификатора сети отводится 8 разрядов. При этом возможные значения номера сети лежат в диапазоне от 1 до 126. Поле идентификатора узла при этом получается 24-разрядным.
Рис. 2.2. Адресация в сети с адресами класса A
Очевидно, что сети с адресами класса A - это крупные сети, объединяющие максимально 16777214 узлов. Из-за выбранного диапазона номеров сети таких крупных сетей может быть всего 126.
Сетей с адресами класса B может быть намного больше (до 16384), так как для идентификатора таких сетей отводится два байта (рис. 2.3). Причем первый байт может принимать значения в диапазоне от 128 до 191. Для идентификатора узла отводится тоже два байта. В результате к сети с адресами класса B можно подключить до 65534 узлов.
Рис. 2.3. Адресация в сети с адресами класса B
И, наконец, больше всего существует сетей с адресами класса C, в которых идентификатор сети задается тремя байтами, а идентификатор узла - одним байтом (рис. 2.4). Таких сетей, объединяющих до 254 узлов каждая, может существовать примерно 2 миллиона (точное значение - 2097151).
Рис. 2.4. Адресация в сети с адресами класса C
Адреса TCP/IP принято записывать в виде четырех десятичных чисел, разделенных точкой, например 201.23.1.12. Каждое десятичное число соответствует одному байту 32-разрядного адреса и может принимать значение от 0 до 255.
С учетом этих обозначений узлы, например, с адресами класса A могут иметь адреса от 1.w1.w2.w3 до 126.w1.w2.w3. Здесь символами w1, w2 и w3 обозначены числа, которые могут принимать значения от 0 до 255, но с некоторыми ограничениями. А именно, адреса вида n.0.0.0 и n.255.255.255 зарезервированы, соответственно, для обозначения сети с номером n и всех узлов, подключенных к сети n.
Ниже мы привели таблицу, в которой для каждого класса адреса указано возможное начальное значение первого байта адреса и обозначение сети в виде четырех десятичных чисел:
| Класс адреса | Значение первого байта адреса | Идентификатор сети | Идентификатор узла |
| A | 1-126 | n | w1.w2.w3 |
| B | 128-191 | n1.n2 | w1.w2 |
| C | 192-223 | n1.n2.n3 | w |
Когда вы подключаетесь к глобальной сети, фирма, предоставляющая сервис Internet, может выделить для вас постоянный или временный адрес. Кроме того, вы можете получить для себя даже диапазон адресов (с целью организации собственной сети, подключенной к Internet).
Для тех, кто лишь изредка работает с Internet, используя модемное соединение, обычно выдается временный адрес, который действует лишь на один сеанс связи. Когда вы в следующий раз подключитесь к Internet, ваш адрес может стать другим.
Причина этого заколючается в дефиците адресов IP. Если, например, к серверу подключено десять модемов, с ним одновременно смогут работать десять пользователей, для которых необходимо выделить десять адресов. Но все эти пользователи не будут работать круглосуточно, поэтому можно выделять временно эти десять адресов любым пользователям, работающим через модемное соединение. В результате к серверу сможет подключаться по очереди значительно большее количество пользователей, чем имеется адресов.
Если же вы создаете собственный сервер WWW, который должен работать круглосуточно, вы должны обязательно получить постоянный адрес, а при подключении к этому серверу других пользователей (через локальную сеть или модем) - некоторый диапазон адресов.
Автоматизация процесса соединения
В зависимости от того, к узлу какой организации вы подлкючаетесь для получения доступа к Internet, может изменяться сценарий взаимодействия в окне терминальной программы. Мы описали сценарий подключения к сети GlasNet с использованием протокола PPP, однако вы, возможно, подключаетесь к узлу другой организации.Для автоматизации процесса соединения с узлом вы можете написать свой сценарий на специальном командном языке Dial-Up Scripting Command Language
(на языке сценариев). Этот сценарий создается в виде обычного текстового файла при помощи любого редактора (например, при помощи редактора Notepad) и подключается к созданному и настроенному соединению при помощи приложения Dial-Up Scripting Tool , пиктограмма которого есть в папке Accessories (рис. 2.30).
Рис. 2.30. Папка Accessories
соедржит пиктограмму приложения Dial-Up Scripting Tool
Процедура подключения проста. Запустите приложение Dial-Up Scripting Tool, сделав двойной щелчок левой клавишей мыши по его пиктограмме. На экране появится главное окно приложения (рис. 2.31).
Рис. 2.31. Главное окно приложения Dial-Up Scripting Tool
В списке Connections отображаются соединения, созданные вами в папке Dial-Up Networking. Выберите нужное и нажмите кнопку Browse. Далее с помощью стандартной диалоговой панели Open (рис. 2.32) вы должны найти заранее подготовленный файл сценария и выбрать его.
Рис.2.32. Выбор файла сценария
Если вы подключаетесь к сети GlasNet, то можете создать файл сценария по образцу, который подготовлен в GlasNet:
proc main waitfor "ogin:" transmit $USERID transmit " ppp^M" waitfor "assword:" transmit $PASSWORD transmit "^M" endproc
В том случае, когда вы подключаетесь к Internet с помощью другой организации, вам необходимо изучить командный язык сценариев. Поэтому сейчас мы и переходим к его краткому описанию.
Доменные имена узлов
В то время как компьютеру удобнее работать с числами, человек предпочитает имена. Ареса IP, заданные в виде четырех десятичных чисел, запоминать крайне неудобно.Настраивая сетевую компоненту протокола NETBIOS , вы должны указать имя для своего компьютера, под которым этот компьютер будет виден другим пользователям сети. Об этом мы подробно рассказывали в 8 томе "Библиотеки системного программиста". При использовании протокола TCP/IP у вас тоже есть такая возможность.
Среди разных требований, предъявляемых к именам компьютеров, есть одно - имя должно быть уникальным в рамках сети. Если сеть локальная, и в ней всего 10 - 20 компьютеров, с этим обычно не бывает никаких проблем (разве что два однофамильца или родственника попытаются использовать свою фамилию для идентификации компьютера). В глобальной сети, насчитывающей много миллионов компьютеров, выбор имени может стать непростой задачей.
В сети Internet эта задача решается с помощью доменной системы имен , имеющей иерархическую структуру. Пример такой структуры показан на рис. 2.6. (указанные на этом рисунке имена узлов являются вымышленными и не имеют отношения к реальной сети Internet).
Рис. 2.6. Пример иерархической доменной структуры имен
На этом рисунке в домене с именем org определены домены sample и simple. Домен simple можно считать вложенным доменом по отношению к домену org. В нем определены домены first, ivs и tiger. Во вложенном домене определен домен tiger (имя этого домена совпадает с именем одного из доменов, вложенных в домен simple).
Полный доменный адрес формируется справа налево добавлением имен вложенных доменов, разделенных точкой (рис. 2.7).
Рис. 2.7. Полные доменные имена узлов
В рамках одного домена вы можете использовать сокращенные имена, опуская имя домена. Например, узлы first.simple.org, ivs.simple.org, tiger.simple.org в домене simple.org можно называть как first, ivs и tiger, соответственно.
Имя tiger вы можете использовать в доменах simple.org и first.simple.org, при этом они будут обозначать разные узлы. Таким образом, если узлы имеют одинаковые имена, но принадлежат к разным доменам, конфликт имен возникать не будет (эти узлы всегда будут иметь разные полные доменные адреса).
Для отображения доменных имен на адреса IP в сети Internet существует специальная распределенная база данных Domain Name System (DNS ), пользуясь которой узлы могут преобразовывать доменные адреса в численные адреса IP.
В процессе настройки сетевой компоненты TCP/IP вы должны указать адрес узла, на котором находится база данных DNS. Лучше всего использовать адрес, полученный в организации, которая подключила вас к Internet, хотя можно использовать и любой другой известный вам адрес. Например, подключившись к сети Internet через GlasNet, вы можете использовать адрес базы данных DNS, принадлежащей Relcom.
В таком подключении нет никакого смысла, однако мы рассказали вам об этой возможности для того чтобы подчеркнуть, что база данных DNS является распределенной и вы можете найти ее на большинстве узлов Internet.
А почему эта база сделана распределенной?
Это нужно для ускорения процесса поиска адреса IP. Представьте себе что получилось бы, если несколько миллионов пользователей сети Internet попытались бы обратиться к одной централизованной базе данных. Соответствующий сервер был бы очень сильно перегружен и фактически работа сети оказалась бы парализованной.
Когда создавалась сеть Internet, в ней было определено несколько доменов верхнего уровня, разделявших доменные адреса по их принадлежности к различным организациям:
| Имя домена | Организация |
| gov | Правительственные организации |
| com | Коммерческие организации |
| org | Некоммерческие организции |
| edu | Исследовательские организации и университеты |
| net | Организации, которые занимаются сетевыми технологиями |
ftp.wisc.edu):
| Имя домена | Страна |
| au | Австралия |
| fr | Франция |
| de | Германия |
| gr | Греция |
| ie | Ирландия |
| il | Израиль |
| it | Италия |
| nz | Новая Зеландия |
| ru | Российская Федерация |
| us | США |
Главная процедура сценария
Процедура, составленная на языке сценариев Dial-Up Scripting Command Language , должна выглядеть следующим образом:proc main … ; Строки процедуры … endproc
В любом месте процедуры могут находиться комментарии, которые начинаются с символа ";" и простираются до конца текущей строки.
В теле процедуры вы можете определять переменные типа Boolean (логические), Integer (целые) или String
(строчные), причем при определении переменным можно присваивать начальные значения.
Помимо переменных, определенных вами, в процедуре могут использоваться системные переменные, которые мы перечислим ниже. Вы можете использовать системные переменные в выражениях таким же образом, как и определенные в теле процедуры.
Вам доступны строчные литералы, в качестве которых могут выступать произвольные строки символов, а также управляющие символы, такие как символ возврата каретки и перевода строки.
Используя переменные, системные переменные и литералы, вы можете составлять выражения (аналогично тому, как это делают в языке Basic).
Ну и конечно, вам доступен достаточно широкий набор команд, выполняющих такие действия, как ожидание и передача строк, выполнение задержки, команды условного выполнения и т. д.
Контроль за использованием ресурсов сервера
В состав операционной системы Microsoft Windows 95 входит приложение Net Watch , которое можно использовать для контроля за использованием ресурсов сервера удаленными клиентами.На рис. 2.78 показано главное окно указанного приложения после того как к серверу подключился удаленный пользователь и запустил процесс копирования файла wrdia20z.exe.
Рис. 2.78. Главное окно программы Net Watch в режиме просмотра списка установленных соединений с сервером
С помощью меню View вы можете выбрать три режима просмотра - просмотр списка соединений (строка By Connection), просмотр списка папок, выделенных в коллективное использование (строка By Shared Folders) и просмотр списка открытых файлов (строка By Open Files).
На рис. 2.79 показано окно приложения Net Watch во втором из перечисленных режимов.
Рис. 2.79. Главное окно программы Net Watch в режиме просмотра списка папок, выделенных в коллективное использование
Краткое описание языка сценариев
Файл сценариев SWITCH.INF состоит из нескольких секций, каждая из которых имет свой заголовок, заключенный в прямоугольные скобки, например:[GlasNet login]
Все остальные строки являются командами, которые выполняет ваш компьютер, или ответные ключевые слова (Response Keywords), которые определяют, что нужно сделать с данными, полученными от удаленного узла. Команда начинается строкой COMMAND=<команда>, после которой следует строка, определяющая реакцию вашего компьютера на поток данных, поступающий от удаленного узла.
Например, следующая последовательность посылает удаленному компьютеру строку userid и символ перевода строки, предполагая, что в ответ на эту строку никаких данных от удаленного узла не поступает:
COMMAND=userid
Первая из этих строк является командой, вторая - ответным ключевым словом.
Ниже мы привели список возможных ответных ключевых слов с кратким описанием.
| Ключевое слово | Описание |
| OK=строка | Если от удаленного узла получена указанная строка, интерпретация файла сценария продолжаетя до следующей строки |
| LOOP=строка | Если от удаленного узла получена указанная строка, происходит возврат к предыдущей строке файла сценария |
| CONNECT=ответ удаленного узла | Используется в конце секции файла сценария |
| ERROR=строка | Если от удаленного узла получена указанная строка, отображается сообщение об ошибке |
| ERROR_DIAGNOSTICS | Ипользуется для отображения сообщения об ошибке в устройстве |
| NoResponse | Это слово указывается в том случае, когда от удаленного узла не ожидается никакого ответа |
В качестве параметра команде COMMAND=, а также в параметрах ключевых слов ответа могут быть указаны не только символьные строки, но и макрокоманды, перечисленные ниже.
| Макрокоманда | Описание |
| > | Шаблон, которому может соответствовать любой символ (используется аналогично символу шаблона ? в имени файла) |
| Символ возврата каретки | |
| Символ перевода строки | |
| Передача информации об ошибке в устройстве системе Remote Access Service | |
| Используется для вставки шестнадцатеричного символа с кодом XX | |
| Игнорирование оставшейся части ответа от удаленного узла | |
| Используется для поиска строки символов в потоке данных, приходящем от удаленного узла | |
| Пароль, введенный в диалоговой панели Authentication (рис. 2.58) | |
| Идентификатор пользователя, введенный в диалоговой панели Authentication (рис. 2.58) |
Если у вас возникли проблемы с отладкой сценария, установите значение параметра Logging, равным единице. Для установки этого параметра запустите программу просмотра регистрационной базы данных REGEDIT32.EXE , откройте раздел HKEY_LOCAL_MACHINE и затем воспользуйтесь ключом со следующим именем:
\SYSTEM\CurrentControlSet\Services\RasMan\Parameters
Открыв окно HKEY_LOCAL_MACHINE установите значение параметра Loggin равное 1. После перезагрузки операционной системы все команды, попадающие в модем, а также ответы от модема будут записываться в файл DEVICE.LOG , расположенный в каталоге WINNT35\SYSTEM32\RAS. Вы сможете просмотреть содержимое этого файла, например, при помощи приложения Notepad.
При необходимости полное описание языка сценариев вы найдете в справочной системе приложения Remote Access.
Маска подсети
При настройке сетевой компоненты TCP/IP вам потребуется указать такой параметр, как маска подсети (subnet mask ). Маска подсети представляет собой 32-разрядное число, которое предназначено для выделения компонент идентификатора сети Network ID и идентификатора узла Node ID из 32-разрядного адреса.Выделение идентификатора сети выполняется простой логической операцией И между адресом и маской подсети.
По умолчанию для маски подсети используются следующие значения (которые зависят от класса адресов сети):
| Класс адреса | Маска подсети, принятая по умолчанию |
| A | 255.0.0.0 |
| B | 255.255.0.0 |
| C | 255.255.255.0 |
Для примера возьмем адрес 193.24.2.23. Исходя из значения первого байта, это адрес сети с адресами класса C. Следовательно, для него по умолчанию используется маска сети 255.255.255.0. В этом случае адрес относится к сети 193.24.2.0. Адрес узла в данной сети получается равным 0.0.0.23.
Маска подсети может применяться для разделения крупных сетей на подсети. Если, например, у вас есть сеть с адресами класса B, допускающая подключение до 65534 узлов, вы можете разделить ее на несколько подсетей, указывая соответствующие маски подсетей.
Например, если для сети 130.10.0.0 с адресами класса B указать маску подсети 255.255.255.0, то сеть будет разделена на 254 подсети с адресами от 130.10.1 до 130.10.254. Каждая из таких подсетей может объединять до 254 узлов. Заметим, что указанная маска должна использоваться в этом случае на всех узлах подсети. Помимо этого, для каждого узла подсети необходимо указывать один и тот же идентификатор сети Network ID.
В этом разделе мы расскажем
В этом разделе мы расскажем вам о том, как можно сделать серевер для собственной глобальной сети на базе операционной системы Microsoft Windows 95.В Microsoft Windows 95 предусмотрена система Dial-Up Networking, в которую входит программное обеспечение клиента Dial-Up Client. Программное обеспечение простейшего сервера Dial-Up Server , допускающего одновременное подключение только одного абонента, поставляется в составе расширения Microsoft Plus.
Операционная система Microsoft Windows NT
версии 3.51 содержит мощный сервер удаленного доступа Remote Access Server, к которому одновременно могут подлкючаться до 256 клиентов. Этот сервер, в отличие от сервера Dial-Up Server, входящего в состав Microsoft Windows 95, может служить мостом для пакетов TCP/IP и использоваться как сервер удаленного доступа в масштабах предприятия. К сожалению, из-за недостатка места мы не сможем рассказать о настройке сервера Remote Access Server.
В начале этой главы мы рассказали вам как настроить программное обеспечение клиента Dial-Up Client, для того чтобы получить с его помощью доступ к ресурсам сети Internet. Теперь мы расскажем вам о том, как превратить ваш компьютер, работающий под управлением Microsoft Windows 95, в простейший сервер удаленного доступа.
Для чего можно использовать такой сервер?
Например, вы уходите домой с работы и переключаете свою рабочую станцию, имеющую модем и подключенную к телефонной линии, в режим удаленного доступа. Затем дома включаете компьютер, на котором установлено программное обеспечение клиента Dial-Up Client, и устанавливаете соединение через телефонную линию с сервером. Теперь в вашем распоряжении находятся те ресурсы сервера, к которым вы разрешили удаленный доступ.
Если в вашем офисе имеется локальная сеть, то таким образом вы сможете получить из дома доступ к ее ресурсам - дискам и принтерам.
Обладая модемом со скоростью передачи данных 28800 bps, вы сможете пересылать файлы достаточно большого объема за приемлимое время. Кроме того, вам будет доступна печать на принтере, который находится в офисе.
Если вы любите путешествовать с блокнотным компьютером, то не будете чувствовать себя оторванным от своей фирмы, так как удаленный сервер позволит вам подключаться к ресурсам сети практически из любого места, где есть телефонная розетка.
Мосты в сети TCP/IP
Глобальная сеть TCP/IP объединяет множество локальных сетей и отдельные компьютеры (узлы), соединенных между собой различным способом с помощью так называемых мостов (routers).Мост обычно создается на базе компьютера, оборудованного несколькими сетевыми адаптерами, а также модемами (если к мосту через телефонные линии подключаются удаленные пользователи).
Основная задача, которую выполняет мост, заключается в фильтрации передаваемых по сети пакетов и передаче их из одной сети в другую. Мост разделяет пакеты, циркулирующие в отдельных логических сетях. Таким образом, пакеты передаются только в те сети, для которых они предназначены.
Сказанное иллюстрируется на рис. 2.5, где изображены две сети, соединенные мостом. Роль моста здесь выполняет сервер, оборудованный двумя сетевыми адаптерами.
Рис. 2.5. Две сети, соединенные мостом
Адреса сетей равны, соответственно, 222.10.10.0 и 222.10.11.0. Адреса узлов, которые в данном случае определены статически, указаны рядом с изображениями соответствующих компьютеров.
В сервере, играющем роль моста, установлено два сетевых адаптера, каждый из которых имеет собственный адрес. Заметьте, что адрес 222.10.10.60 относится к первой сети, а адрес 222.10.11.50 - ко второй.
Когда узел с адресом 222.10.10.23 передает пакет данных в узел с адресом 222.10.10.26, этот пакет не передается через мост, так как получатель имеет адрес, относящийся к той же самой сети, в которой находится отправитель. Если же узел с адресом 222.10.10.23 пожелает отправить пакет данных в узел с адресом 222.10.11.37, ему потребуется передать этот пакет через мост, который в сети отправителя имеет адрес 222.10.10.60.
Сеть TCP/IP позволяет создавать несколько мостов, причем один из них будет использоваться по умолчанию. Если в конфигурацию вашей сети входит мост, при настройке сетевой оболочки вам придется указать адрес указанного выше моста.
А зачем, спросите вы, вообще нужны мосты?
Как правило, физические сети имеют ограничения на длину сегмента и количество узлов. Например, в сети Ethernet на базе тонкого коаксиального кабеля максимальная длина одного физического сегмента не может превышать 185 метров. Вы можете соединять такие сегменты при помощи репитеров (как это было сказано в 3 томе нашей библиотеки "Персональный компьютер. Шаг за шагом", который называется "Локальные сети персональных компьютеров"), однако таким образом разрешается соединять не более пяти физических сегментов. Соединенные физические сегменты образуют при этом один логический сегмент.
Мосты позволяют соединять между собой несклько логических сегментов, в результате чего большинство ограничений снимается.
При подключении к сети Internet мостом служит сервер организации, обеспечивающей такое подключение.
Настройка параметров соединения
Для настройки параметров соединения с сервером поставщика услуг Internet запустите приложение Dial Other Internet Providers, сделав двойной щелчок левой клавишей мыши по соответствующей пиктограмме. На экране появится главное окно этого приложения (рис. 2.65).Рис. 2.65. Главное окно приложения Dial Other Internet Providers, предназначенного для установки соединения с поставщиками услуг Internet
Первоначально список серверов (столбец Name) пуст. На рис. 2.65 показано окно программы после добавления соединений с двумя серверами.
Для того чтобы добавить новое соединение, вы должны нажать кнопку Add Entry. На экране появится диалоговая панель Add Entries, показанная на рис. 2.66.
Рис. 2.66. Диалоговая панель Add Entries
В полях Name и Description страницы Login Info вы должны ввести, соответственно, имя сервера, с которым будет устанавливаться соединение, и его краткое описание. И то, и другое вы можете выбрать по своему усмотрению.
В полях Login ID и Password следует указать имя пользователя и пароль, которые вы используете при подключении к серверу поставщика услуг Internet. Включите переключатель Required, при этом для установки соединения обязательно будет нужно указывать пароль.
Телефонный номер модема, подключенного к серверу, вы можете указать в поле Phone Number.
С помощью редактора текста Login Sequence введите краткий сценарий установки соединения.
Если ввести здесь строку NONE, после установки соединения никаких дополнительных действий выполняться не будет. Если же оставить поле Login Sequrnce пустым, используется простейший сценарий ввода идентификатора пользователя и пароля . А именно, в ответ на следующие две строки вводится имя и пароль пользователя, которые берутся из полей Login ID и Password:
login: password:
Очевидно, такой сценарий подходит далеко не всегда. Например, для подключения к серверу GlasNet с использованием протокола PPP после имени пользователя необходимо ввести через пробел строку ppp. Сценарии других поставщиков услуг Internet могут быть сложнее.
Другой способ заключается в использовании файла сценария, имя которого необходимо указать в поле Login Sequence. Примеры таких файлов вы найдете в каталоге TCPIP\SAMPLES\ETC. Имена этих файлов имеют расширение RSP. Вы можете начать их изучение с файла SAMPLE.RSP.
И, наконец, самый простой, но не самый плохой способ заключается в том, что вы вводите строки сценария непосредственно в поле Login Sequence. Именно так мы и поступили. Ниже приведен пример сценария для подключения к серверу GlasNet:
\r ogin: [LOGINID]\sppp assword: [PASSWORD]
В самом начале сценария удаленному узлу посылается символ перевода строки \r, в ответ на который поступает запрос на ввод идентификатора пользователя.
После того как из удаленного узла приходит строка "ogin:", ему посылается идентификатор пользователя [LOGINID], взятый из поля Login ID (рис. 2.66). Для того чтобы добавить к идентификатору пользователя строку ppp, отделенную пробелом, мы добавляем строку \sppp к идентификатору [LOGINID]. Строка \s служит символом пробела.
Далее по сценарию выполняется ожидание строки "assword:". После того как эта строка поступит из удаленного узла, выполняется передача пароля, взятого из поля Password (рис. 2.66). Как видите, сценарий достаточно прост.
Подготовив поле Login Sequence, на забудьте включить переключатель PPP в группе переключателей Connection Type (или SLIP, если ваш поставщик услуг Internet пользуется только этим протоколом).
Заполнив все необходимые поля на странице Login Info, откройте страницу Connect Info (рис. 2.67).
Рис. 2.67. Заполнение страницы Login Info
Здесь вы должны заполнить поля Domain Nameserver (адрес сервера доменных имен DNS ), Yuor Host Name (имя вашего узла) и Yuor Domain Name (имя вашего домена). Вся эта информация может быть получена от поставщика услуг Internet. Мы привели данные для сети GlasNet.
Поля Yuor IP Address, Destination IP Address и Netmask следует оставить пустыми, так как адрес IP будет вам выделен автоматически при установке соединения.
Теперь мы перейдем к странице Server Info, показанной на рис. 2.68.
Рис. 2.68. Заполнение страницы Server Info
Мы показали заполнение полей для сети GlasNet. В поле News Sever мы указали имя сервера электронных конференций, в полях Gopher Server и WWW Server, соответственно, имена серверов Gopher и WWW. В группе полей Mail Server Information мы указали имена серверов, идентификаторы и пароли для системы электронной почты.
Последняя страница, которую нам предстоит заполнить, называется Modem Info (рис. 2.69).
Рис. 2.69. Страница Modem Info
В этой странице вы должны указать тип модема (поле Modem Type), номер асинхронного последовательного порта, к которому подключен модем (поле Com Port), скорость, с которой этот порт должен работать (поле Speed), количество бит данных (поле Parity), использование бита четности и так далее.
Обратите внимание, что мы использовали относительно низкую скорость передачи данных через последовательный порт. К сожалению, мы не смогли добиться удовлетворительной работы модема при более высоких значениях скоростей.
В поле Prefix вы должны ввести строку ATDP, если только ваша АТС не работает с тональным набором номера.
Строки инициализации записываются автоматически при выборе типа модема. При необходимости вы можете их скорректировать, для чего следует изучить документацию, которая поставляется вместе с модемом.
В группе переключателей Mode вы должны включить переключатель Dial, так как именно ваш компьютер будет набирать номер и звонить на сервер поставщика услуг Internet (а не наоборот).
Подготовив все страницы блокнота Add Entries, закройте его, сделав двойной щелчок левой клавишей мыши по пиктограмме системного меню, расположенной в левом верхнем углу окна блокнота. На экране появится запрос на сохранение внесенных вами изменений (рис. 2.70).
Рис. 2.70. Запрос на сохранение изменений
Нажмите кнопку Save. Теперь в списке Current Connection появилась новая строка.
При необходимости вы можете изменить параметры соединения с помощью кнопки Modify Entry или удалить соединение из списка Current Connection, нажав кнопку Remove Entry.
Настройка программного обеспечения Dial-Up Client
Настройка программного обеспечения Dial-Up Client для доступа к серверам Internet была уже описана, поэтому мы отметим только некоторые отличия.Так как сервер Dial-Up Server не обладает системой динамического выделения адресов IP, вы должны указать адрес клиента самостоятельно, аналогично тому как вы это сделали для сервера.
Другое отличие заключается в том, что вам не нужны ни окно терминальной программы, ни файлы сценария, которые мы составляли для подключения к серверам поставщиков услуг Intrnet.
Для того чтобы у удаленного пользователя была возможнсоть обращения к ресурсам сервера с использованием имен NETBIOS , нужно отредактировать файл LMHOST , расположенный в том каталоге, куда установлена операционная система Microsoft Windows 95. Добавьте в нее строку вида:
200.200.200.20 username
Здесь мы предполагаем, что адрес узла удаленного пользователя равен 200.200.200.20, а имя - username.
Файл HOSTS , расположенный в том же каталоге, заполняется аналогичным образом, но используется для установки соответствия между доменными именами и адресами IP, например:
200.200.200.21 somehost.somedomain
Никаких гарантий
Почему протокол TCP/IP имеет двойное название?Потому, что TCP/IP - это два разных протокола, которые соотносятся друг с другом так же, как протоколы SPX и IPX .
Протокол IP (полное название - Internet Protocol) - это протокол нижнего уровня, который отвечает за передачу пакетов данных в сети. Так же как и протокол IPX , протокол IP является протоколом датаграмм и работает без подтверждений. Последнее означает, что доставка пакетов данных не гарантируется. Не гарантируется так же и то, что пакеты достигнут пункта назначения в той последовательности, в которой они были отправлены.
Тем не менее намного удобнее работать с каналом передачи данных, который работает правильно и доставляет все переданные пакеты по назначению и в правильном порядке. Представьте себе, что вы отправили письмо по электронной почте, а до адресата дошли только некоторые отрывки вашего послания, да и те перепутаны местами.
Поэтому над протоколом IP работает протокол более высокого уровня TCP (протокол передачи данных Transmission Control Protocol). Послылая и принимая пакеты через протокол IP, протокол TCP гарантирует доставку всех переданных пакетов данных в правильной последовательности.
Проткол TCP/IP может служить носителем для других протоколов, например, для протоколов IPX или NETBIOS, а также для служебных протоколов адресации ARP (Address Resolution Protocol ) и протокола межсетевых управляющих сообщений ICMP (Internet Control Message Protocol ).
После завершения установки на поверхности
После завершения установки на поверхности рабочего стола Desktop появится пиктограмма IBM Internet Connection for OS/2 . Откройте ее двойным щелчком левой клавиши мыши. Вы увидите набор средств для работы в сети Internet (рис. 2.62).Рис. 2.62. Содержимое папки IBM Internet Connection for OS/2
Приложение IBM Internet Dialer (рис. 2.63), предназначенное для подключения к сети IBM, скорее всего вам не потребуется, так как оно может работать только с серверами сети IBM. Эта сеть, разумеется, подключена к сети Internet, однако в России она пока, к сожалению, не распространена.
Рис. 2.63. Главное окно приложения IBM Internet Dialer
Приложение WebExplorer позволит вам работать с серверами WWW, как вы это можете делать в среде Microsoft Windows с использованием таких приложений, как Microsoft Internet Explorer, Netscape Navigator или Mosaic.
Книга READ ME FIRST содержит информацию, которая может помочь вам, если при установке возникли какие-либо проблемы.
В книге Introduction to the IBM Internet Connection вы найдете краткое введение в средства, разработанные IBM для Internet.
Приложение Retrieve Software Updates позволит вам обновлять программные компоненты IBM Internet Connection, получая новые версии непосредственно из сети Internet.
Для работы с электронными конференциями в среде IBM OS/2 вы можете использовать приложение NewsReader/2 .
Услуги электронной почты доступны через приложение Ultimedia Mail/2 Lite , однако для использования этого приложения вы должны быть подключены к сети IBM.
Доступ к серверам Gopher возможен с помощью приложения Gopher .
Теперь давайте раскроем папку Internet Utilities (рис. 2.64).
Рис. 2.64. Содержимое папки Internet Utilities
С помощью приложения Dial Other Internet Providers вы будете подключаться к серверу организации, предоставившей вам доступ к сети Internet (если, разумеется, вы не подключены к сети IBM). В этом разделе мы подробно опишем процедуру подключения на примере сервера сети GlasNet.
Приложения Telnet и 3270 Telnet предоставят вам доступ к удаленной консоли компьютеров с использованием протокола TELNET (второе приложение предназначено только для работы с серверами, рассчитанными на терминалы 3270).
Для пересылки файлов по протоколу FTP вы сможете воспользоваться приложением FTP-PM .
Описание языка сценариев
В этом разделе мы приведем сокращенное описание основных конструкций языка сценариев.Прежде всего перечислим системные переменные, которые можно использовать в выражениях.
| Название | Тип | Описание | |
| $USERID | String | Идентификатор пользователя, который вводится в диалоговой панели Connect To | |
| $PASSWORD | String | Пароль, введенный в диалоговой панели Connect To | |
| $SUCCESS | Boolean | Переменная устанавливается в случае успешного завершения некоторых команд | |
| $FAILURE | Boolean | Переменная устанавливается при возникновении ошибки в процессе выполнения команд |
Кроме переменных, вы можете использовать в выражениях следующие литералы:
| Литерал | Описание |
| ^символ | Этот литерал используется для представления управляющих символов, таких как перевод строки или возврат каретки. Если указаны символы от a до z, в результате получается управляющие символы со значениями от 1 до 26, а если символы от @ до _, - получаются управляющие смиволы с кодами от 0 до 31. |
| Символ перевода каретки | |
| Символ перевода строки | |
| \" | Символ "двойная кавычка" |
| \^ | Символ ^ |
| \< | Символ < |
| \\ | Символ \ |
В языке сценариев вы можете использовать унарные операторы "-" (унарный минус) и ! (дополнение до единицы). Из бинарных операторов вам доступны следующие: "*" (умножение), "/" (деление), "+" (сложение) , "-" (вычитание), "<>" (неравенство), "<=" (меньше или равно), ">=" (больше или равно), "==" (равнество), "and" (логическая операция И), "or" (логическая операция ИЛИ).
Ниже мы приведем сокращенный список команд, которые вы можете использовать при подготовке сценария.
| Команда | Описание | |
| delay n | Задержка на n секунд | |
| goto label | Переход на метку label, определенную следующим образом:…goto label…label: | |
| halt | Остановка выполнения сценария. Для установления соединения необходимо нажать кнопку Continue | |
| if условие then командыendif | Условный оператор. При выполнении условия выполняются команды, расположенные между командами if и endif | |
| transmitt строка | Передача строки символов удаленному компьютеру | |
| waitfor строка | Ожидание, пока ваш компьютер не получит от удаленного узла указанную строку символов | |
| wile условие do командыendwhile | Оператор цикла. Последовательность команд будет выполняться до тех пор, пока условие не будет равно FALSE |
Для команды transmitt вы дополнительно можете указать через запятую параметр raw. В этом случае удаленный компьютер не будет воспринимать управляющие символы. Такая возможность удобна, например, при передаче пароля, содержащего управляющие символы.
Для команды waitfor можно указать параметр matchcase. При этом в процессе сравнения будет учитываться различие между строчными и прописными буквами. Если указать параметр until
ПОДКЛЮЧЕНИЕ К СЕТИ INTERNET
В этой главе мы научим вас подключать свой компьютер к глобальной и локальной сети с использованием протокола TCP/IP. Вы узнаете о системе адресов, принятой в сетях с указанным протоколом, и научитесь правильно настраивать сетевые компоненты основных операционных систем Microsoft Windows 95, Microsoft Windows NT и IBM OS/2. Такая настройка является наиболее тонким моментом в создании глобальных и локальных сетей, работающих с протоколом TCP/IP.
Подключение протокола TCP/IP
Прежде всего вы должны убедиться, что на вашей рабочей станции установлен протокол TCP/IP.Для этого запустите приложение Control Panel и сделайте двойной щелчок левой клавишей мыши по пиктограмме Network. На экране появится диалоговая панель Network Settings, показанная на рис. 2.33.
Рис. 2.33. Диалоговая панель Network Settings
Просмотрев список Installed Network Software, убедитесь, что в нем имеется строка TCP/IP Protocol. Если этой строки нет, нажмите кнопку Add Software. На экране появится диалоговая панель со списком названий различных программных компонент. Выберите из этого списка строку TCP/IP Protocol and related components.
На экране появится диалоговая панель Windows NT TCP/IP Installation Options, показанная на рис. 2.34.
Рис. 2.34. Диалоговая панель Windows NT TCP/IP Installation Options
Набор переключателей Components позволяет выбрать программные компоненты, имеющие отношение к протоколу TCP/IP. Включите переключатели Connectivity Utilities и нажмите кнопку Continue. Остальные компоненты при необходимости можно будет добавить позже.
После установки протокола TCP/IP выберите его в списке Installed Network Software и нажмите кнопку Configure. Вы увидите диалоговую панель TCP/IP Configuration (рис. 2.35).
Рис. 2.35. Диалоговая панель TCP/IP Configuration
Хотя это может показаться странным, при использовании системы Remote Access Service вы не должны заполнять поля диалоговой панели TCP/IP Configuration. Дело в том, что такие параметры, как IP Adress и маска подсети будут задаваться при настройке системы Remote Access Service. Процесс настройки мы опишем чуть позже.
А сейчас нажмите кнопку DNS, расположенную на этой диалоговой панели. На экране появится диалоговая панель DNS Configuration, предназначенная, как это видно из названия, для настройки конфигурации сервиса доменных имен DNS (рис. 2.36).
Рис. 2.36. Диалоговая панель DNS Configuration, с помощью которой выполняется настройка конфигурации сервиса доменных имен DNS
В этой панели вы должны указать имя вашего узла (поле Host Name) и имя домена, к которому относится ваш узел (поле Domain Name). Например, если вы подключены к домену сети GlasNet, вы должны указать в этом поле имя glas.apc.org.
Подключение в среде OS/2 Warp Connection
Операционные системы IBM OS/2 Warp версии 3.0 и IBM OS/2 Warp Connect также могут быть с успехом использованы для работы в глобальной сети Internet. Для того чтобы установить соединение в среде IBM OS/2 Warp версии 3.0, вы должны дополнительно установить набор приложений IBM Intenet Connection , который входит в состав пакета BonusPack .Что же касается операционной системы IBM OS/2 Warp Connect, то в нее уже входит набор приложений, предназначенных для работы с Internet. В этом разделе мы рассмотрим процедуру подключения к Internet именно для этой операционной системы.
При разработке операционной системы Microsoft
При разработке операционной системы Microsoft Windows 95 в нее изначально были заложены средства для работы с протоколом TCP/IP, сетью Microsoft Network (MSN ) и сетью Internet. Сеть MSN, на наш взгляд, пока еще не пользуется популярностью в России, поэтому мы сосредоточимся на методах подключения к серверам других поставщиков услуг Internet. В качестве примера мы будем пользоваться ресурсами сети GlasNet. При необходимости пользуясь нашими рекомендациями вы сможете самостоятельно настроить сетевые средства Microsoft Windows 95 для работы с сетями другими поставщиков услуг Internet.Итак, приступим.
При настройке мы будем исходить из того, что в процессе установки операционной системы Microsoft Windows 95 вы указали, что вам необходима поддержка протокола TCP/IP. Кроме того, вы должны установить адаптер Dial-Up Nertworking (т. е. модем). Все это можно сделать, пользуясь стандартной процедурой установки Microsoft Windows 95.
Чтобы проверить установку протокола TCP/IP, откройте папку Control Panel и сделайте двойной щелчок мышью по пиктограмме Network. В списке The following network components are installed помимо других должны быть следующие строки:
Clients for Microsoft networks Dial-Up Adapter TCP/IP -> Dial-Up Adapter
Если какой-либо из перечисленных выше строк нет в списке, нажмите кнопку Add. На экране появится диалоговая панель Select Network Component Type. С помощью этой диалоговой панели вы можете добавить программное обеспечение клиента (строка Client), сетевой адаптер (строка Adapter), протокол передачи данных (Protocol) или сервис (строка Service).
Если у вас не установлен протокол TCP/IP, выдерите в указанном списке строку Protocol и нажмите кнопку Add. В списке, расположенном в левой части появившейся диалоговой панели Select Network Protocol выберите строку Microsoft. Затем в списке Network Protocols выберите строку TCP/IP и нажмите кнопку OK. После этого в списке The following network components are installed
появится строка TCP/IP.
Теперь откройте папку Control Panel, которая находится в папке My Computer, и затем раскройте папку Dial-Up Networking. Содержимое этой папки, в которой уже было определено несколько соединений, показано на рис. 2.8.
Рис. 2.8. Содержимое папки Dial-Up Networking ( телефонные номера приведены только для примера)
Сразу после установки Microsoft Windows 95 в папке Dial-Up Networking имеется только одна пиктограмма Make New Connection, с помощью которой вы можете определить новое соединение. Сделайте по этой пиктограмме двойной щелчок левой клавишей мыши.
После этого запустится программа полуавтоматической настройки параметров соединения, первая диалоговая панель которой показана на рис. 2.9.
Рис. 2.9. Первая диалоговая панель программы полуавтоматической настройки параметров соединения
В поле Type a name for the computer you are dialing вы должны написать название компьютера, с которым будет устанавливаться соединение. Вы можете выбрать любое название, которое вам нравится.
Далее в поле Select a modem необходимо выбрать модем. Обычно в компьютере установлен только один модем, поэтому можете сразу нажимать кнопку Configure для настройки параметров модема.
На экране появится блокнот настройки параметров модема, который содержит три страницы (рис. 2.10).
Рис. 2.10. Блокнот настройки параметров модема
В меню Port страницы General
указан порт, к которому подключен модем. Этот порт выбирается автоматически при установке операционной сиситемы, поэтому вам его можно не изменять.
С помощью регулятора Speaker volume вы можете отрегулировать громкость динамика, встроенного в модем. Такая возможность имеет значение, если вы любите работать по ночам.
Однако наиболее важный параметр, который настраивается с помощью страницы General, - это максимальная скорость, с которой будет работать порт последовательной передачи данных, через который подключен модем. Современные высокоскоростные модемы не станут работать правильно, если вы укажите скорость менее 115200 bps. Нужное значение вы можете узнать из документации, которая поставляется вместе с модемом.
Теперь перейдем к странице Connection
(рис. 2.11), сделав по ее закладке щелчок левой клавишей мыши.
Рис. 2.11. Страница Connection
блокнота настройки параметров модема
Параметры, указанные в полях Connection preferences и Call preferences можно оставить без изменения.
Для настройки параметров порта последовательной передачи данных нажмите кнопку Port Settings. На экране появится диалоговая панель Advanced Port Settings, показанная на рис. 2.12.
Рис. 2.12. Диалоговая панель Advanced Port Settings
Современные порты последовательной передачи данных оборудованы встроенным буфером FIFO, поэтому если вы располагаете таким портом, имеет смысл включить переключатель Use FIFO buffers. Дополнительно с помощью двух регуляторов, расположенных в этом окне, вы можете изменять размер буферов приема (верхний регулятор) и передачи (нижний регулятор).
Настрив параметры порта, нажмите кнопку OK и вернитесь к странице Connection
блокнота настройки параметров модема. Нажмите кнопку Advanced, расположенную на этой панели и приступайте к настройке параметров соединения (рис. 2.13).
Рис. 2.13. Диалоговая панель настройки параметров соединения Advanced Connection Settings
Убедитесь, что включен переключатель Use error control. Это необходимо для использования средств контроля за ошибками при передаче данных. Дополнительно включите переключатель Required to connect. В результате для установки соединения наличие такого контроля будет необходимым.
Кроме того, в группе переключателей Use flow control включите переключатлеь Hardware (RTS/CTS). Аппаратные средства управления передачей данных работают надежнее программных.
Теперь переключитесь на страницу Options, показанную на рис. 2.14.
Рис. 2.14. Страница Options блокнота настройки параметров модема
В группе переключателей Connection control включите переключатель Bring up terminal window after dialing, а переключатель Bring up terminal window before dialing наоборот, выключите. В результате сразу после установки соединения на экране появится окно терминальной программы, с помощью которого вы первое время будете вводить свой идентификатор и пароль. В дальнейшем мы научим вас создавать специальный командный файл, при использовании которого эти параметры будут передаваться удаленному узлу автоматически.
Теперь нажмите кнопку OK. Вы вернетесь в диалоговую панель, показанную на рис. 2.9. В ней нужно нажать кнопку Next.
После этого на экране появится следующая диалоговая панель программы программы полуавтоматической настройки параметров соединения (рис. 2.15).
Рис. 2.15. Вторая диалоговая панель программы программы полуавтоматической настройки параметров соединения (телефонный номер приведен только для примера)
В этой панели вы должны указать код города, в котором расположен узел организации, предоставляющей сервис Internet (поле Area code), код страны (поле Country code) и телефонный номер для соединения (поле Telephone number). Заполнив эти поля, нажмите кнопку Next.
В результате на экране появится последняя диалоговая панель программы полуавтоматической настройки параметров соединения (рис. 2.16).
Рис. 2.16. Последняя диалоговая панель программы программы полуавтоматической настройки параметров соединения
В единственном поле, расположенном на этой диалоговой панели, вы можете отредактировать название пиктограммы, которая будет соответствовать только что созданному вами соединению. Кроме того, вы можете с помощью кнопки Back повторить предыдущие этапы настройки.
Если все было указано правильно, нажмите кнопку Finish. В результате создание соединения будет закончено и в окне DialUp Networking появится новая пиктограмма.
Однако пока мы не будем торопиться пробовать, как работает новое соединение, так как процесс настройки еще не закончен.
Сделайте щелчок правой клавишей мыши по только что созданной пиктограмме в окне DialUp Networking и выберите из контекстного меню строку Properties (рис. 2.17).
Рис. 2.17. Продолжение настройки параметров соединения при помощи контекстного меню
После выбора этой строки на экране появится блокнот, состоящий из единственной страницы с названием General (рис. 2.18). Если вы делаете локальный звонок (по номеру, расположенному в вашем городе), то переключатель Use country code and area code можно выключить.
Рис. 2.18. Страница General, с помощью которой можно настроить параметры созданного соединения
Нажмите кнопку Server Type, которая расположена на этой странице. На экране появится одноименная диалоговая панель (рис. 2.19).
Рис. 2.19. Диалоговая панель Server Type
Установите переключатели так, как это показано на рис. 2.19. Из всех протоколов, перечисленных в группе переключателей Allowed network protocols,
выберите только TCP/IP.
Теперь вы должны настроить драйвер TCP/IP, указав необходимые адреса, полученные в организации, подключившей вас к Internet. Для этого нажмите кнопку TCP/IP Settings. На экране появится диалоговая панель с таким же названием (рис. 2.20).
Рис. 2.20. Диалоговая панель TCP/IP Settings
Если вы - владелец собственного адреса IP, укажите его в поле IP address, включив предварительно переключатель Specify an IP address. Если же адрес IP выдается вам только на время сеанса связи (что скорее всего), включите переключатель Server assigned IP address.
Далее в полях Primary DNS (основной сервер DNS) и Secondary DNS (резевный сервер DNS, который будет использован при недоступности основного сервера) укажите адреса узлов, на которых расположена база данных доменных имен DNS. Если вы подключены к сети GlasNet, можете воспользоваться значениями, указанными на рис. 2.20. В противном случае узнайте эти адреса в организации, подключившей вас к Internet.
Далее включите переключатели Use IP header compression и Use default gateway on remote network. При этом для вас мостом в сеть Internet будет служить узел, к которому вы подключаетесь через данное соединение. Заметьте, что адрес моста вам указывать не нужно.
Все! Теперь можно пробовать.
Сделайте двойной щелчок левой клавишей мыши по пиктограмме созданного и настроенного соединения. На экране появится диалоговая панель Connect To, показанная на рис. 2.21.
Рис. 2.21. Диалоговая панель Connect To
Теперь вы можете нажимать на кнопку Connect и после этого начнется процесс установки соединения. Однако перед этим давайте нажмем кнопку Dial Properties и посмотрим, какие параметры можно изменить в последнюю минуту перед установкой соединения (рис. 2.22).
Рис. 2.22. Диалоговая панель Dialing Properties
Наиболее интересен параметр The phone system at this location uses, с помощью которого вы можете выбрать либо тональный набор номера (Tone Dialing), либо импульсный (Pulse dialing). Последний способ набора номера наиболее распространен в России.
Если ваша операционная система установлена на портативном компьютере, и вы работаете с сетью Internet из разных мест, воспользуйтесь группой органов управления Where I am. С помощью этой группы вы сможете создать несколько комбинаций кода страны и города.
Итак, считаем, что настраивать уже больше нечего. Нажимаем кнопку Connect в диалоговой панели Connect To (рис. 2.21) и через некоторое время слышим, как модем начинает набирать номер. На экране при этом появляется диалоговая панель, показанная на рис. 2.23.
Рис. 2.23. Диалоговая панель Connecting to GlasNet
Если вам не повезло, линия может оказаться занятой. Вас проинформируют об этом с помощью сообщения, показанного на рис. 2.24.
Рис. 2.24. Сообщение о том, что телефонная линия занята
Вы, конечно, можете позвонить позже, однако лучше настроить систему Dial-Up Networking так, чтобы дозвон выполнялся автоматически.
Это можно сделать, если выбрать из меню Connections папки Dial-Up Networking
строку Settings и в появившемся на экране одностраничном блокноте (рис. 2.25) включить переключатель Redial.
Рис. 2.25. Настройка параметров автоматического дозвона
При помощи органа управления Before giving up retry вы можете указать, сколько раз система должна пытаться звонить, прежде чем сообщать вам о невозможности установления соединения. Органы управления Between tries wait дают вам возможность задать продолжительность паузы, которая будет выдерживаться между очередными попытками установки соединения.
В случае удачного соединения на экране появится окно терминальной программы (так как на странице Options блокнота настройки параметров модема (рис. 2.14) был включен переключатель Bring up terminal window after dialing). Это окно показано на рис. 2.26 (мы подключились к узлу GlasNet).
Рис. 2.26. Окно терминальной программы, которое появилось после установки соединения
Для того чтобы установить соединение с узлом GlasNet и использовать при этом протокол PPP, после своего идентификатора мы указали строку ppp. Далее мы ввели пароль и нажали клавишу
Через некоторое время на экране должен появится нечитаемый набор символов. Это признак того, что система приступила к установке соединения с использованием протокола PPP. Вы должны нажать кнопку Continue в окне терминальной программы или функциональную клавишу
Далее начнется процедура проверки имени пользователя и пароля (рис. 2.27).
Рис.2.27. Сообщение о начале процедуры проверки имени пользователя и его пароля
Удаленный узел проверит пароль, и если вы указали его неправильно, отключит вас от сети, отобразив на экране сообщение, показанное на рис. 2.28.
Рис. 2.28. Сообщение об отключении от сети
Если вы увидели такое сообщение, следует повторить попытку соединения.
При успешном соединении вы увидите верхнюю часть диалоговой панели, показанную на рис. 2.29 (для просмотра всей панели нажмите кнопку Details).
Рис. 2.29. Диалоговая панель, которая появляется при успешном соединении
В этой панели отображается скорость передачи данных и продолжительность соединения. В любое время вы можете разорвать соединение, нажав кнопку Disconnect.
Теперь, когда вы научились устанавливать соединение, переходите к следующей главе и работайте с описанными в ней приложениями Internet.
Подключение в среде Windows NT
Операционная система Microsoft Windows NT , и в частности, ее вариант для рабочих станций Microsoft Windows NT Workstation версии 3.51, получает все большую популярность. Это связано, по нашему мнению, в первую очередь с высокой надежностью этой операционной системы, ее отличными сетевыми средствами, совместимостью с приложениями, разработанными для Microsoft Windows версии 3.1 и Microsoft Windows 95. Другой причиной является широкое распространение относительно недорогих рабочих станций на базе процессора Pentium и объемом оперативной памяти 16 и более Мбайт .Благодаря развитой поддержке протоколов TCP/IP и PPP, а также наличию многочисленных сетевых приложений, операционная система Microsoft Windows NT широко используется в сети Internet в качестве серверов WWW, FTP и т. п. Мощные рабочие станции на ее основе легко подключаются к сети в качестве оконечных узлов.
В этой главе мы научим вас подключать рабочую станцию Microsoft Windows NT Workstation версии 3.51 к сети Internet через протокол PPP. Для демонстрации мы будем подключаться, как и в предыдущей главе, к серверу сети GlasNet.
В качестве средства для доступа к Internet мы будем использовать систему Remote Access Service, которая входит в комплект операционной системы Microsoft Windows NT.
Протоколы SLIP и PPP
Протоколы SLIP (Serial Line Internet Protocol ) и PPP (Point to Point Protocol ) специально предназначены для создания соединения с использованием протокола TCP/IP через телефонные линии.Протокол SLIP появился первым и сейчас не рекомендуется к использованию. Этот протокол обладает рядом недостатков. Например, перед установкой соединения через протокол SLIP оба узла должны знать свои адреса IP. Другой недостаток - протокол SLIP не предусматривает коррекции ошибок, возникающих при передаче данных по телефонному каналу.
Протокол PPP более совершенный. Он лишен указанных выше недостатков и дополнительно имеет много преимуществ. Например, в отличие от SLIP, он может служить носителем для других протоколов, причем разные протоколы могут использоваться одновременно. Так как протокол PPP предусматривает автоматическое конфигурирование соединяемых узлов, его настройка очень проста. Кроме того, при случайном разрыве соединения протокол PPP может его восстановить.
В нашей книге мы научим вас устанавливать соединение с узлами поставщиков сервиса Internet с использованием протокола PPP.
Работа с записной книжкой
Как мы уже говорили, сразу после установки приложения Remote Access записная книжка, хранящая параметры соединений с удаленными узлами, пуста. Ее необходимо заполнить, чем мы сейчас и займемся.В главном окне приложения Remote Access (рис. 2.41) нажмите кнопку Add. На экране появится диалоговая панель Add Phone Book Entry, показанная на рис. 2.43.
Рис. 2.43. Диалоговая панель Add Phone Book Entry, предназначенная для добавления нового соединения в записную книжку
В поле Entry Name введите название соединения.
Поле Phone Number позволяет указать список телефонных номеров, по которым нужно дозваниваться для установки соединения. Так как организация, предоставляющая услуги Internet, обычно имеет несколько телефонных номеров для соединения, вы можете указать в этом поле все известные вам номера.
| Для того чтобы указать список дополнительных телефонных номеров, нажмите кнопку, расположенную в правой части поля Phone Number. |
При этом вы увидите диалоговую панель Phone Numbers for, показанную на рис. 2.44.
Рис. 2.44. Диалоговая панель Phone Numbers for, предназначенная для добавления дополнительных телефонных номеров
Набрав номер в поле New Phone Number, нажмите кнопку Add. Введенный вами номер появится в списке Phone Numbers. Для того чтобы изменить любой номер из этого списка, его нужно выделить, набрать новое значение и нажать кнопку Replace.
С помощью кнопок Raise, Lower и Delete вы можете, соответственно, либо перемещать номера по списку вверх или вниз, либо удалять из списка.
С помощью кнопки Modem в диалоговой панели Add Phone Book Entry вы можете настоить параметры последовательного порта, к которому подключен модем.
В большинстве случаев вам подойдут значения, принятые по умолчанию, однако нужно проследить, чтобы скорость передачи данных через порт не была слишком низкой. Нужное значение скорости вы можете определить из документации, которая поставляется вместе с модемом.
На следующем этапе вам нужно настроить для нового соединения параметры сетевого протокола. Для этого в диалоговой панели Add Phone Book Entry нажмите кнопку Network. На экране появится диалоговая панель Network Protocol Settings (рис. 2.45).
Рис. 2.45. Диалоговая панель Network Protocol Settings
В этой панели вам нужно включить переключатели PPP, TCP/IP и Request LCP extensions, а затем для настройки параметров протокола TCP/IP нажать кнопку TCP/IP Settings.
Сразу после этого на экране появится диалоговая панель PPP TCP/IP Settings, показанная на рис. 2.46.
Рис. 2.46. Диалоговая панель PPP TCP/IP Settings
Если ваш компьютер имеет постоянный адрес IP, включите переключатель Require specific IP address и укажите этот адрес в поле IP address. Если же вы получаете адрес IP динамически при подключении к узлу поставщика услуг Internet, оставьте включенным переключатель Server assigned IP Address (именно так следует поступить при работе с серверами сети GlasNet).
Далее включите переключатель Use specific name server addresses. В полях DNS и DNS backup укажите адреса основного и запасного серверов доменных имен, полученные у поставщика услуг Internet. Оставьте также включенными переключатели Use VJ header compression (сжатие заголовков) и Use default gateway on remote network (использование принятого по умолчанию моста в удаленную сеть).
Теперь в диалоговой панели Add Phone Book Entry (рис. 2.43) нажмите кнопку Security. На экране появится диалоговая панель Security Settings, показанная на рис. 2.47.
Рис. 2.47. Диалоговая панель Security Settings
Эта панель используется для определения способа идентификации пользователя, подключаемого к удаленному узлу. Вначале мы будем работать с окном терминальной программы, которая позволяет ввести имя и пароль пользователя вручную, затем научимся создавать файлы сценариев для автоматизации процесса подключения.
Итак, включите в диалоговой панели Security Settings переключатель Use clear text Terminal login only. В списке Before dialing выберите строку (none), а в списке After dialing - строку Terminal (как это показано на рис. 2.47). Затем нажмите кнопку OK.
На следующем этапе необходимо проверить привязку протоколов.
Для этого запустите приложение Control Panel и сделайте двойной щелчок левой клавишей мыши по пиктограмме Network. На экране появится диалоговая панель Network Settings. Нажмите в этой диалоговой панели кнопку Bindings. На экране появится диалоговая панель Network Bindings.
Выберите в списке Show Bindings for строку TCP/IP Protocol. Убедитесь, что этот протокол привязан так, как это показано на рис. 2.48.
Рис. 2.48. Проверка привязки протокола TCP/IP
На рис. 2.49 показана привязка сервиса рабочей станции Workstation.
Рис. 2.49. Проверка привязки сервиса рабочей станции Workstation
Создание файла сценария
С целью автоматизации процесса подключения к узлу поставщика сервиса Internet вы можете подготовить файл сценария .Для подготовки файла сценария вы должны отредактировать файл SWITCH.INF, расположенный в каталоге WINNT35\SYSTEM32\RAS (предполагается, что операционная система Microsoft Windows NT установлена в каталог WINNT35, принятый по умолчанию.)
Откройте этот файл текстовым редактором Notepad и запишите в его конец следующие строки (мы привели пример для узлов GlasNet):
;============================================================== [GlasNet login]
COMMAND= OK=
COMMAND=frolov ppp
COMMAND=YourPassword
Первая команда в этом сценарии (COMMAND=) инициирует процесс предачи данных. Далее сценарий игнорирует все символы, пока не найдет текстовую строку ogin (окончание слова Login).
После этого в удаленный узел передается идентификатор пользователя frolov (вы должны поставить свой идентификатор), после которого следует строка ppp (необходимая для соединения с использованием протокола PPP).
Затем сценарий ожидает приглашение для ввода пароля и вводит ваш пароль, игнорируя все остальные строки, появляющиеся на экране.
Для подключения сценария (который в нашем случае называется GlasNet login) выделите строку GlasNet в окне приложения Remote Access и нажмите кнопку Edit. Затем в появившейся диалоговой панели нажмите кнопку Security. На экране появится диалоговая панель Security Settings. Вы должны установить органы управления, расположенные в этой диалоговой панели, в состояние, которое показано на рис. 2.57.
Рис. 2.57. Настройки для подключения файла сценариев
После подключения сценария процедура соединения будет выполняться немного по-другому. После того как в окне приложения Remote Access вы нажмете кнопку Dial, на экране появится диалоговая панель Authentication, показанная на рис. 2.58.
Рис. 2.58. Диалоговая панель Authentication
Здесь вы должны указать имя и пароль, которые вы используете для входа в Windows NT (которые могут отличаться от полученных у поставщика услуг Internet). Затем следует нажать кнопку OK и если вы все ввели правильно, соединение будет установлено.
Установка IBM OS/2 Warp Connect для работы с Internet
При установке IBM OS/2 Warp Connect вы должны выбрать вариант установки Advanced Installation, который позволит вам выбрать диск, куда будут скопированы файлы операционной системы, а также установить необходимые программные компоненты. В двадцатом томе "Библиотеки системного программиста", который называется "Операционная система OS/2 Warp" мы подробно рассмотрели указанный вариант установки для операционной системы IBM OS/2 Warp версии 3.0.Что же касается IBM OS/2 Warp Connect, то вам придется дополнительно выбрать сетевые программные продукты, которые будут установлены на диск вашего компьютера. Выбор необходимо сделать в диалоговой панели Product Selection, показанной на рис. 2.59.
Рис. 2.59. Выбор программных продуктов для установки
Даже если ваш компьютер подключен к локальной сети, для начала вы можете ограничиться установкой только тех компонент, которые абсолютно необходимы для работы с Internet через протокол TCP/IP. Для этого в только что приведенной диалоговой панели вам нужно включить переключатель IBM TCP/IP for OS/2 3.0 (как это показано на рис. 2.59) и нажать кнопку OK.
На экране появится блокнот Set up selected products, в котором вам нужно выбрать страницу TCP/IP, состоящую из двух частей (рис. 2.60).
Рис. 2.60. Первая часть страницы TCP/IP в блокноте Set up selected products
В этой странице вы должны указать имя своего узла (в поле Host name) и маску подсети (в поле Subnet mask). Эти параметры вы можете получить в организации, предоставляющей вам доступ к Internet.
Что же касается полей IP address и Router address, то если у вас нет собственного адреса IP, вам их заполнять не нужно. Это связано с тем, что в этом случае адрес IP вам будет выделяться динамически и от сеанса к сеансу этот адрес будет изменяться. Вместе с адресом IP будет изменяться и адрес моста Router address.
Заполнив поля, как это показано на рис. 2.60, перейдите ко второй части страницы TCP/IP (рис. 2.61).
Рис. 2.61. Вторая часть страницы TCP/IP в блокноте Set up selected products
Здесь вы должны ввести в поле TCP/IP domain name доменное имя сервера, к которому вы подключены, а в поле Name server - адрес IP сервера имен DNS. На рис. 2.61 показаны значения для сервера сети GlasNet. Если вы подключены к серверу другой организации, вы должны будете ввести другое имя домена и другой адрес сервера имен DNS.
Установка сервера Dial-Up Server
Сервер удаленного доступа Dial-Up Serverвходит в состав Microsoft Plus. Поэтому все, что вы должны сделать для создания сервера, это установить систему Dial-Up Networking и указанную компоненту из расширения
Microsoft Plus. Проще всего это сделать сразу в процессе установки операционной системы Microsoft Windows 95, однако такую установку можно выполнить и позже.
Для добавления компоненты удаленного доступа сделайте двойной щелчок по пиктограмме Add/Remove Program, расположенной в папке Control Panel. На экране появится блокнот Add/Remove Program Properties, показанный на рис. 2.72. Откройте в нем страницу Windows Setup.
Рис. 2.72. Страница Windows Setup блокнота Add/Remove Program Properties
В списке Components выберите строку Communications и нажмите кнопку Details. Вы увидите диалоговую панель Communications (рис. 2.73).
Рис. 2.73. Диалоговая панель Communications
Включите переключатель, расположенный слева от строки Dial-Up Networking и нажмите кнопку OK. Далее следуйте инстркуциям, которые появляются на экране.
На следующем этапе вы должны подключить все необходимые сетевые протоколы и привязать их к адаптеру Dial-Up Adapter , который появится в списке установленных сетевых адаптеров.
Если вы будете подключаться к серверу удаленного доступа с помощью средств удаленного доступа операционной системы Microsoft Windows for Workgroups, достаточно установить протоколы NetBEUI и IPX/SPX .
В нашем случае необходимо дополнительно подключить протокол TCP/IP и, что очень важно, выбрать для сервера и клиента адреса IP.
На рис. 2.74 показана страница IP Address блокнота TCP/IP Properties, на которой показано, как нужно задавать адрес IP.
Рис. 2.74. Страница IP Address блокнота TCP/IP Properties
Обратите внимание, что для сервера мы не включаем перключатель Obtain an IP address automatically. Эти переключатели мы включали при настройке рабочей станции, служившей клиентом для серверов Internet. Такие серверы обычно способны предоставлять адреса IP во временное пользование, назначая их динамически.
Установка системы Remote Access Service
Если вы не установили систему Remote Access Service при первоначальной установке операционной системы Microsoft Windows NT, вы должны сделать это сейчас.Для этого из окна Control Panel запустите приложение Network и в появившейся на экране диалоговой панели Network Settings нажмите кнопку Add Software. Затем выберите из предложенного вам списка строку Remote Access Service и нажмите кнопку Continue. Вам будет предложено установить компакт-диск с дистрибутивом операционной системы Microsoft Windows NT, поэтому держите его наготове.
После копирования всех необходимых файлов укажите в диалоговой панели Add Port последовательный порт, к которому подключен модем (COM1, COM2, COM3 или COM4). Далее программа установки попытается определить тип модема, подключенного к указанному вами порту и отобразит его в диалоговой панели Configure Port, показанной на рис. 2.37.
Рис. 2.37. Диалоговая панель Configure Port
Вы можете согласиться с результатом определения типа модема или выбрать другой из списка Attached Device.
Обратите внимание на группу переключателей с зависимой фиксацией Port Usage. С помощью этих переключателей вы можете выбрать один из трех режимов работы порта.
В режиме Dial out only порт используется только для исходящих звонков. Это обычный режим для рабочей станции.
Если компьютер работает только в качестве сервера, вы можете выбрать режим Receive calls only. В этом случае модем будет автоматически снимать трубку при поступлении входящих звонков.
И, наконец, режим Dial out and Receive calls является комбинацией двух описанных выше режимов и используется в том случае, если компьютер используется и как сервер, и как рабочая станция.
Мы ограничимся первым вариантом. В этом случае вам не следует нажимать кнопку Settings, предназначенную для установки параметров порта, так как эта операция будет выполнена при формировании телефонной книги, о которой мы расскажем дальше.
А сейчас нажмите кнопку OK. На экране появится диалоговая панель Remote Access Setup, показанная на рис. 2.38.
Рис. 2.38. Диалоговая панель Remote Access Setup
Все, что вам нужно на данном этапе сделать в этой диалоговой панели, это нажать кнопку Network и в появившейся диалоговой панели Network Configuration (рис. 2.39) выбрать протокол TCP/IP.
Рис. 2.39. Диалоговая панель Network Configuration
Протокол NetBEUI указывать не обязательно, если только вы не собираетесь использовать ресурсы удаленного сервера, такие как сетевые каталоги и сетевые принтеры. О возможности такого использования вы можете поинтересоваться у вашего поставщика услуг Internet.
На этом установка системы Remote Access Service может считаться оконченной.
Запустите вновь из окна Control Panel приложение Network Settings. Теперь в списке Installed Network появилась строка Remote Access Service (рис. 2.40).
Рис. 2.40. В диалоговой панели Network Settings появилась строка Remote Access Service
После установки в окне Program Manager появилась группа Remote Access Service. Сделайте двойной щелчок по пиктограмме Remote Access. После этого вы увидите главное окно приложения с таким же именем, предназначенное для установки модемного соединения (рис. 2.41). На этом рисунке показан случай, когда в записной книжке приложения Remote Access уже определено три соединения. Сразу после установки записная книжка будет пустой.
Рис. 2.41. Главное окно приложения Remote Access
Дополнительно на экране появится окно Remote Access Monitor (рис. 2.42), в котором отображается состояние модема.
Рис. 2.42. Окно Remote Access Monitor отображает состояние модема
Когда соединение установлено, должен светиться индикатор CD. В процессе передачи данных включается индикатор TX, в процессе приема - индикатор RX. При возникновении ошибки загорается индикатор RX.
С помощью меню Settings вы можете настроить звуковое "сопровождение" для выполнения операций приема или передачи данных, а также для индикации момента разрыва соединения.
Установка соединения
Для установки соединения в окне приложения Remote Access (рис. 2.41) вы должны выделить нужную строку и нажать кнопку Dial. На экране появится окно, в котором будет отображаться процесс установки соединения (рис. 2.50).Рис. 2.50. Окно, в котором отображается процесс установки соединения
Нажав кнопку Cancel, вы можете отменить устанвку соединения.
Через некоторое время на экране появится окно терминальной программы, показанное на рис. 2.51.
Рис. 2.51. Окно терминальной программы, которое появляется после соединения с удаленным узлом
Вначале в этом окне вы увидите только приглашение сети GlasNet для ввода идентификатора пользователя. Вы должны ввести свой идентификатор и пароль, как вы это делали в аналогичном терминальном окне при соединении в среде операционной системы Microsoft Windows 95. После того как появится хаотический набор символов, нажмите кнопку Done.
В результате вы увидите окно Login Terminal (рис. 2.52), в котором нужно также нажать кнопку Done.
Рис. 2.52. Окно Login Terminal
Если вы все сделали правильно, на экране появится сообщение о завершении процесса соединения (рис. 2.53). Для того чтобы это сообщение не машало вам в дальнейшем, включите переключатель Do not display this message in the future.
Рис. 2.53. Сообщение о завершении процесса соединения
После установки соединения соответствующая строка в главном окне приложения Remote Access будет отмечена изменением пиктограммы (рис. 2.54).
Рис. 2.54. Главное окно приложения Remote Access после установки соединения
После установки соединения вы можете запускать приложения Internet, описанные в следующей главе.
В любой момент вы можете разорвать соединение, нажав кнопку Hang Up.
Для определения состояния соединения выделите соответствующую строку в окне приложения Remote Access и нажмите кнопку Status. На экране появится диалоговая панель Port Status, в котором есть немало интересной информации (рис. 2.55).
Рис. 2.55. Диалоговая панель Port Status
Обратите внимание на строку в поле Connect Response. Эта строка была получена от модема при установке соединения. Как видно из рисунка, скорость передачи данных в данном случае составила 24000 bps, что неплохо.
В поле Local Workstation проставлен IP-адрес вашей рабочей станции. В данном случае этот адрес был выделен динамически узлом GlasNet.
Более подробную информацию о конфигурации и состоянии протокола TCP/IP можно получить с помощью приложения IP Configuration , которое входит в состав комплекта Resource Toolkit for Windows NT (приобретается отдельно). Главное окно этого приложения показано на рис. 2.56.
Рис. 2.56. Главное окно приложения IP Configuration
Обратите внимание на поле Default Gateway. В нем отображается адрес моста в сеть Internet. В данном случае компьютер был также оборудован сетевым адаптером, соответствующий адрес отображается в поле Adapter Address. Была также включен сервер имен Windows (WINS Server ), который в нашей книге не описан из-за недостатка места.
Запуск сервера Dial-Up Server
Запуск сервера Dial-Up Serverвыполняется очень просто. Раскройте папку Dial-Up Networking, расположенную в папке My Computer и выберите из меню Connections строку Dial-Up Server. На экране появится одноименный блокнот, содержащий страницу, название которой соответствует названию установленного модема (рис. 2.75).
Рис. 2.75. Внешний вид блокнота Dial-Up Server после подключения к удаленному серверу пользователя Grigory
Для запуска сервера достаточно включить перключатель Allow caller access и затем нажать кнопку Apply или OK.
Если вам потребуется остановить работу сервера, это можно сделать, включив переключатель No caller access, и затем нажав кнопку Apply или OK.
При необходимости вы можете ограничить доступ к серверу, указав пароль в диалоговой панели, которая появится, если нажать кнопку Change Password.
После запуска сервер переводится в режим ожидания звонка. Как только удаленный абонент сделает вызов, модем снимет трубку. Вслед за этим начнется процесс соединения. Сообщение об удачном соединении появится в окне Status.
С помощью кнопки Server Types вы можете выбрать один из нескольких типов сервера (рис. 2.77) в зависимости от того, какие программные средства для доступа к серверу будут использованы на стороне клиента.
Рис. 2.77. Диалоговая панель Server Types
По умолчанию в списке Type of Dial-Up Server выбрана строка Default, которая соответствует протоколу PPP. Вы можете оставить это без изменения, так как по умолчанию сервер автоматически распознает тип клиента и при возможности устанавливает с ним соединение.
Если клиентом служит только операционная система Microsoft Windows 95 или
Microsoft Windows NT версии 3.51, можно выбрать тип сервера PPP: Windows 95, Windows NT, Internet. В этом случае доступ к серверу для клиентов, использующих операционную систему Microsoft Windows for Workgroups и Microsoft Windows NT версии 3.1 будет закрыт, так как эти операционные системы используют другой протокол.
Если включить переключатель Enable software compression, передаваемые данные будут сжиматься до того, как они попадут в модем. Учтите, однако, что современные модемы способны сжимать данные самостоятельно на аппаратном уровне, поэтому большого выигрыша от программной компресии данных может и не получиться. Разумеется, не будет никакого выигрыша при передаче уже сжатых данных.
Для повышения безопасности вы можете включить переключатель Require encrypted password, после чего пароли будут передаваться в зашифрованном виде.
Для того чтобы отключить пользователя, вы должны нажать кнопку Disconnect User, расположенную в блокноте Dial-Up Server.
Практическое введение в Internet, E-Mail, FTP, WWW и HTML
Как получить Netscape Navigator Gold
В отличие от навигатора Microsoft Internet Explorer, который поставляется бесплатно всем владельцам операционной системы Microsoft Windows 95, приложение Netscape Navigator Gold нужно покупать у фирмы Netscape. Однако, как и большинство других приложений Internet, вы можете получить Netscape Navigator Gold или Netscape Navigator в виде бета-версии бесплатно, переписав его с сервера WWW фирмы Netscape, имеющего адрес http://home.netscape.com.Кнопки в главном окне приложения WS_FTP
Ниже мы приведем список кнопок, расположенных в главном окне приложения WS_FTP вместе с кратким описанием их назначения.| Кнопка | Описание |
| Connect | Вызов на экран диалоговой панели Session Profile для выбора сервер FTP , к которому будет выполняться подключение |
| Cancel | Отмена выполнения операции |
| LogWnd | Отображение окна протоколирования выполненных команд |
| Help | Получение справки по использованию приложения |
| Option | Настройка параметров приложения |
| About | Просмотр информации о разработчике приложения |
| Exit | Завершение работы приложения |
| ChgDir | Смена каталога |
| MkDir | Создание нового каталога |
| RmDir | Удаление каталога |
| *.* | Указание маски для имен |
| Send | Передача файла |
| View | Просмотр файла |
| Exec | Выполнение файла |
| Rename | Переименование файла |
| Delete | Удаление файла или каталога |
| Refresh | Обновление окна, отображающего содержимое каталога |
| DirInfo | Просмотр подробной информации о каталоге |
Команды программы FTP
После запуска программы FTP вы увидите командное приглашение:ftp>
В этом командном приглашении вы можете вводить команды из приведенного ниже списка:
| Команда | Описание | |
| ! | Запуск команды на удаленном компьютере | |
| ? | Получение справки по использованию команд программы FTP | |
| append | Добавление локального файла к файлу на удаленном компьютере | |
| ascii | Установка текстового режима пересылки файлов | |
| binary | Установка двоичного режима пересылки файлов | |
| bell | Включение или выключение звуковой сигнализации окончания процесса пересылки файлов | |
| bye | Завершение сеанса связи с удаленным узлом и выход из программы FTP | |
| cd | Изменение текущего каталога на удаленном узле | |
| close | Завершение сеанса связи с удаленным узлом | |
| debug | Переключение режима отладки | |
| delete | Стирание указанных файлов на удаленном компьютере | |
| dir | Отображение списка каталогов и файлов на удаленном узле | |
| disconnect | Отсоединение от удаленного компьютера | |
| get | Копирование файла из удаленного узла на диск локального компьютера | |
| glob | Переключение режима использования символов шаблона в имени файлов или каталогов | |
| hash | Переключение режима отображения символа # после передачи каждого блока данных размером 2048 байт | |
| help | Получение справки по использованию команд программы FTP | |
| lcd | Изменение текущего каталога на локальном компьютере | |
| ls | Отображение списка файлов и каталогов на удаленном узле | |
| mdelete | Стирание файлов на удаленном узле | |
| mdir | Отображение списка каталогов и файлов на удаленном узле с возможностью одновременного указания нескольких файлов | |
| mget | Копирование нескольких файлов из удаленного узла на диск локального компьютера | |
| mkdir | Создание каталога на удаленном узле | |
| mls | Отображение списка каталогов и файлов на удаленном узле с возможностью одновременного указания нескольких файлов | |
| mput | Передача файлов с локального диска на диск удаленного узла с возможностью передачи нескольких файлов сразу | |
| open | Подключение к указанному серверу FTP | |
| prompt | Переключение режима подтверждения пересылки файлов в случае передачи нескольких файлов командами mget или mput | |
| put | Передача файлов с локального диска на диск удаленного узла | |
| pwd | Отображение текущего каталога на удаленном компьютере | |
| quit | Завершение сеанса связи с удаленным узлом и выход из программы FTP | |
| recv | Копирование файла из удаленного узла на диск локального компьютера | |
| remotehelp | Получение справки по использованию команд программы FTP для удаленного компьютера | |
| rename | Переименование файла, расположенного на диске удаленного узла | |
| rmdir | Стирание каталога с диска удаленного узла | |
| send | Передача файлов с локального диска на диск удаленного узла | |
| status | Отображение текущего состояния соединения с удаленным узлом и текущих режимов работы программы FTP | |
| trace | Переключение режима трассировки. При включенной трассировке отображается маршрутизация пакетов данных | |
| type | Установка или отображение типа передаваемых файлов (текстовые или двоичные) | |
| user | Определение идентификатора пользователя для удаленного компьютера | |
| verbose | Включение или выключение режима, при котором отображаются сообщения при завершении передачи данных и статистика |
Не все команды из этого длинного списка вам будет нужно использовать.
Настройка параметров навигатора Microsoft Internet Explorer
Параметры навигатора Microsoft Internet Explorer, которые выбираются по умолчанию при установке вполне пригодны для использования, однако в некоторых специальных случаях может потребоваться их настройка.Для настройки параметров навигатора выберите из меню View строку Options. На экране появится блокнот настройки параметров Options, показанный на рис. 3.18.
Рис. 3.18. Страница Appearance блокнота Options
Если переключатель Show pictures включен, при загрузке страниц автоматически отображаются расположенные на ней графические изображения. В том случае, когда ваш модем не может обеспечить достаточно высокой скорости передачи данных, имеет смысл выключить этот переключатель. При этом графические отображения отображаться не будут. При необходимости вы все же сможете их загрузить, если сделаете щелчок правой клавишей мыши по пиктограмме, которая отображается вместо графического изображения и выберете из появившегося меню строку Show Picture.
Аналогичное назначение имеют переключатели Play sounds и Show animations. Первый из них отключает автоматическую загрузку и проигрывание звукового сопровождения, размещенного на странице, а второй - загрузку и отображение анимации.
Включив переключатель Use custom colors вы можете выбрать для отображения страницы произвольный цвет текста и фона. Для этого надо сделать двойной щелчок левой клавишей мыши по прямоугольникам, расположенным, соответственно, в полях Text и Background.
Однако наибольшее значение имеют меню шрифтов Proportional font и Fixed-width font. Эти шрифты используются для отображения текста загруженных страниц. С помощью первого из них задаются шрифт с пропорциональной шириной букв, а с помощью второго - с фиксированной широной букв.
Если вы будете работать со страницами WWW , подготовленными на русском языке, вы можете столкнуться с одной неприятной проблемой - вместо русских букв отображаются нечитаемые символы. Это связано с тем, что русские страницы подготавливаются с использованием шрифтов либо в кодировке Microsoft Windows, либо в кодировке KOI-8 , либо в какой-либо другой.
Как правило, поставщик услуг Internet может предоставить в ваше распоряжение набор шрифтов с кодировкой KOI-8 . Пользуясь меню Proportional font и Fixed-width font, вы можете указать навигатору, что нужно пользоваться шрифтами с выбранной вами кодировкой.
Откроем теперь страницу Start and Search Pages, показанную на рис. 3.19.
Рис. 3.19. Страница Start and Search Pages блокнота Options
С помощью этой страницы вы можете указать, что текущая страница (т. е. та страница, которую вы просматриваете в момент настройки параметров) должна стать домашней. Для этого выбрав из меню Your строку Start Page (как это показано на рис. 3.19) нажмите кнопку Use Current.
Если же выбрать из меню Your строку Search Page, вы можете указать, что текущая страница должна стать странцей, которая используется при поиске, когда вы нажимаете кнопку поиска в линейке инструментальных средств главного окна навигатора Microsoft Internet Explorer.
Далее мы займамся страницей Advanced, которая показана на рис. 3.20.
Рис. 3.20. Страница Advanced
блокнота Options
При помощи органов управления группы History вы можете указать, сколько посещенных вами страниц следует хранить на диске, чтобы впоследствии можно было вернуться к их просмотру без повторной загрузки. Кнопка Change позволяет вам выбрать папку для хранения сохраненных страниц.
Органы управления группы Cache позволяют настроить параметры кэширования страниц. С помощью движкового регулятора Maximum size вы можете указать максимальный процент использования дискового пространства для кэша страниц. С помощью кнопки Change можно выбрать папку для хранения кэшированных страниц.
Переключатель On startup, perform check for default browser должен быть включен, если помимо Microsoft Internet Explorer вы используете другие навигаторы Internet и при этом желаете, чтобы навигатор Microsoft Internet Explorer
использовался по умолчанию.
Старница News блокнота Options (рис. 3.21) позволяет настроить параметры системы просмотра электронных конференций, встроенную в навигатор Microsoft Internet Explorer.
Рис. 3.21. Страница News блокнота Options
На этой странице вы должны включить переключатель Use Internet Explorer to read Internet newsgroups и указать адрес сервера новостей в поле News server address. На рис. 3.21 показано заполнение страницы для сети GlasNet. Если вы подключены к сети другого поставщика услуг Internet, адрес сервера новостей будет другим.
В некоторых случаях для доступа к конференциям требуется дополнительно указывать имя пользователя и пароль. Об этом вы можете узнать в организации, которая подключила вас к Internet. Если нужно указывать имя и пароль, включите переключатель This server requires authorization и введите имя и пароль, соответственно, в полях User name и Password.
Кроме того, если вы собираетесь посылать собственные статьи в конференцию, в полях Name и Email address необходимо указать ваше имя и электронный почтовый адрес. Введенные вами строки будут отображаться в списке заголовков статей конференции.
Настройка параметров навигатора Netscape Navigator Gold
В этом разделе мы расскажем о настройке самых важных параметров навигатора Netscape Navigator Gold , необходимой для его правильной работы.Для настройки параметров предназначено меню Options.
Прежде всего выберите из этого меню строку General Preferences. На экране появится блокнот Preferences. Откройте его на странице Appearance (рис. 3.32).
Рис. 3.32. Страница Appearance блокнота Preferences
Группа переключателей Toolbars отвечает за внешний вид инструментальной линейки с кнопками, расположенной в верхней части главного окна приложения.
По умолчанию кнопки на поверхности инструментальной линейки изображаются с подписью, в результате чего они выглядят несколько громоздко. Если включить переключатель Pictures, подпись под пиктограммами исчезнет.
Группа переключателей Startup предназначена для настройки параметров запуска навигатора. В зависимости от того, для чего вы чаще всего используете навигатор, вы можете выбрать режим, в котором запускается приложение Netscape Navigator Gold .
По умолчанию в группе переключателей On Startup Launch включен переключатель Netscape Browser, поэтому сразу после запуска навигатор отображает только одно окно, предназначенное для просмотра страниц WWW . Если же включить переключатели Netscape Mail или Netscape News, сразу после запуска навигатора на экране появятся окна, предназначенные для работы с электронной почтой или электронными конференциями, соответственно. Вы можете включить любую комбинацию указанных выше трех переключателей.
Если в группе переключателей Start With включить переключатель Blank Page, сразу после запуска навигатор не будет подключаться ни к одному серверу WWW . В том случае, когда включен переключатель Home Page Location, вы можете выбрать домашнюю страницу, которая будет загружаться автоматически при запуске навигатора. По умолчанию сразу после установки в качестве домашней используется страница http://home.netscape.com, принадлежащая фирме Netscape, однако вы можете указать адрес любой другой страницы в поле, расположенном под указанными переключателями.
Если вы работаете с русскими страницами WWW , вы должны указать шрифты для отображения текста, содержащие символы кириллицы. Это можно сделать с помощью страницы Fonts блокнота Preferences (рис. 3.33).
Рис. 3.33. Страница Appearance блокнота Preferences
В этой странице вы должны выбрать два шрифта - один пропорциональный шрифт, и один с шрифт с фиксированной шириной букв. Для выбора пропорционального шрифта нажмите кнопку Choose Font, расположенную справа от надписи Use the Proportional Font, а для выбора шрифта с фиксированной шириной букв - кнопку Choose Font, расположенную справа от надписи Use the Fixed Font.
Выбор шрифта вы сможете сделать при помощи диалоговой панели, показанной на рис. 3.34.
Рис. 3.34. Диалоговая панель Choose Base Font, предназначенная для выбора шрифта
Для работы с русскими страницами WWW вы можете выбрать либо шрифты Windows, содержащие символы кириллицы, либо шрифты KOI-8 . Многие русские серверы WWW содержат несколько вариантов своих страниц в разной кодировке, поэтому вы можете выбрать любой удобный для вас вариант.
Для настройки параметров работы с электронной почтой и серверами электронных конференций выберите из меню Options строку Mail and News Preferences. На экране появится блокнот Preferences. На рис. 3.35
показана страница Appearance этого блокнота.
Рис. 3.35. Страница Appearance блокнота Preferences, который появляется при выборе строки Mail and News Preferences из меню Options
Переключатели группы Messages and Articles are shown with позволяют вам выбрать для отображения статей и почтовых сообщений шрифт с фиксированной шириной букв (переключатель Fixed Width Font) либо с переменной шириной букв (переключатель Variable Width Font).
При выборе шрифта учтите, что шрифт с переменной шириной букв легче читается, однако если статья была создана с использованием шрифта с фиксированной шириной букв, ее внешний вид может измениться при изменении типа шрифта. Особенно это заметно при чтении листингов программ и таблиц, когда для выравнивания отдельных конструкций языка или столбцов были использованы символы пробела.
Если вы собираетесь использовать навигатор Netscape Navigator Gold для работы с электронной почтой и серверами электронных конференций, убедитесь в том, что включен переключатель Use Netscape for Mail and News. В том случае, когда для работы с указанными ресурсами Internet вы собираетесь использовать другие приложения (в частности, Microsoft Exchange Client ), включите переключатель Use Exchange Client for Mail and News.
Для нормальной работы навигатора с почтой и электронными конференциями необходимо настроить параметры в странице Servers
блокнота Preferences, показанной на рис. 3.36.
Рис. 3.36. Страница Servers блокнота Preferences, который появляется при выборе строки Mail and News Preferences из меню Options
В полях Outgoing Mail (SMTP ) Server и Incoming Mail (POP ) Server вы должны указать адреса, соответственно, почтовых серверов SMTP и POP. Напомним, что сервер SMTP принимает вашу почту для ее передачи адресату, а сервер POP присылает почту, которая пришла к вам.
В поле Pop User Name вы должны указать ваш почтовый адрес.
Так как за хранение почты на сервере берется плата, имет смысл удалять ее оттуда сразу после получения на свой компьютер. Для использования этого режима следует включить переключатель Removed from the server в группе переключателей Messages are copied from the server to the local disk, then. В некоторых случаях вы можете пожелать оставить почту лежать на сервере. Для этого следует включить переключатель Left on the server.
Для того чтобы вы могли работать с электронными конференциями при помощи навигатора Netscape Navigator Gold , необходимо в поле News (NNTP) Server указать адрес сервера электронных конференций, к которому вы подключены. Эту информацию, так же как и адреса почтовых серверов, вы должны получить у своего поставщика услуг Internet.
При необходимости вы можете изменить количество статей, которые прочитываются из конференций за один раз. Это количество задается в поле Get и по умолчанию равно 100.
В странице Identity блокнота Preferences (рис. 3.37) вы должны указать некоторые сведения о себе.
Рис. 3.37. Страница Identity блокнота Preferences, который появляется при выборе строки Mail and News Preferences из меню Options
В полях Your Name и Your Email необходимо указать, соответственно, свое имя и почтовый адрес. В поле Reply-to-Address следует указать электронный почтовый адрес, по которому вы желаете получать сообщения.
Поле Your Organization заполнять не обязательно, однако здесь вы можете записать название своей фирмы.
В поле Signature File вы можете указать имя текстового файла, содержащего вашу подпись. Строки подписи будут автоматически добавляться снизу к посылаемым вами сообщениям. Воспользовавшись кнопкой Browse, вы сможете выбрать файл подписи.
Теперь выберите из меню Options строку Network Preferences. На экране появится блокнот Preferences, показанная на рис. 3.38.
Рис. 3.38. Страница Cache блокнота Preferences, который появляется при выборе строки Network Preferences из меню Options
В этом блокноте для нас интересна страница Cache, позволяющая настроить параметры кэширования страниц WWW .
В полях Memory Cache и Disk Cache вы можете указать объем, соответственно, оперативной и дисковой памяти, отведенной для кэширования страниц. При помощи кнопок Clear Memory Cache Now вы можете стереть содержимое кэша.
Настройка параметров приложения News Express
Если вы запускаете приложение News Express в первый раз сразу после установки, на экране появляется блокнот Options, предназначенный для настройки параметров. В дальнейшем для работы с этим блокнотом следует выбрать из меню File строку Options.Прежде всего в блокноте Options вы должны заполнить страницу Servers and Directory, показанную на рис. 3.55.
Рис. 3.55. Страница Servers and Directory блокнота Options
В поле News (NNTP) server вы должны указать имя сервера конференций, которое можно узнать у вашего поставщика услуг Internet. При необходимости (о чем можно опять же узнать у поставщика услуг Internet) в полях Username и Password следует указать имя пользователя и пароль для доступа к серверу конференций.
В поле Mail (SMTP ) server вы должны указать имя почтового сервера SMTP, что необходимо для обеспечения возможности посылки сообщений из приложения News Express .
Затем откройте страницу Personal Information, показанную на рис. 3.56.
Рис. 3.56. Страница Personal Information блокнота Options
В поле Full name вы должны указать свое имя (или псевдоним, если для публикации статей в конференции вы предпочитаете пользоваться псевдонимом).
Свой электронный почтовый адрес следует записать в поле E-mail address.
При необходимости вы также можете указать название своей фирмы в поле Organization и имя файла подписи в поле Default signature file, однако эти поля заполнять не обязательно.
Далее мы будем заполнять страницу Newsgroup (рис. 3.57).
Рис. 3.57. Страница Newsgroup блокнота Options
Группа переключателей After connected устанавливает режим работы со списком активных конференций сразу после установки соединения с сервером конференций.
Если включить переключатель Retrive all active groups, каждый раз после установки соединений вы будете заново получать весь список конференций. Так как этот список имеет большие размеры и на его загрузку требуется много времени, такой режим нужно использовать только при крайней необходимости.
По умолчанию включен переключатель Retrieve new groups only (if any), сразу после запуска приложение News Express проверяет, не появились ли в списке новые конференции, и если появились, получает их названия. Этот режим наиболее рационален.
В том случае, если вы работаете только с определенным набором конференций, а новые конференции вас не интересуют, включите переключатель Do not retrieve any groups. В этом случае проверка появления новых конференция выполняться не будет.
Обратите также внимание на переключатель Automatically connect to news server at startup, расположенный в группе переключателей Options. Если его включить, сразу после запуска приложение News Express предпримет попытку подключится к серверу конференций.
Настройки, установленные по умолчанию на странице Article (рис. 3.58), устроят вас в большинстве случаев.
Рис. 3.58. Страница Article блокнота Options
При необходимости вы можете выключить переключатель Display inline image (JPEG ), так как бета-версия приложения News Express , расположенная на сервере http://www.hk.super.net на момент создания этой книги плохо работает в режиме отображения графических сообщений, опубликованных в двоичных конференциях.
Теперь откройте страницу Miscellaneous, показанную на рис. 3.59.
Рис. 3.59. Страница Miscellaneous блокнота Options
Группа органов управления Decode устанавливает параметры для раскодирования двоичных файлов, опубликованных в двоичных конференция.
В поле Saving directory вы должны указать путь к каталогу, куда будут записываться раскодированные файлы.
При необходимости сразу после загрузки статьи из двоичной конференции вы сможете тут же просматривать раскодированные файлы, если включите переключатель Execute files after decoded. В этом случае для раскодированного файла запускается та программа, которая зарегистрирована в операционной системе Microsoft Windows 95 или Microsoft Windows NT для обработки файлов с данным расширением имени.
Если вы собираетесь работать с русскими конференциями, с помощью группы кнопок Fonts необходимо указать шрифты, содержащие символы кириллицы. Как правило, в русских конференциях используется кодировка KOI-8 .
Настройка параметров программы WS_FTP
Для настройки программы WS_FTP необходимо закрыть диалоговую панель Session Profile (если она открыта), нажав на ней кнопку Cancel, и затем нажать кнопку Options в главном окне приложения.После этого на окне появится диалоговая панель Options, показанная на рис. 3.9.
Рис. 3.9. Диалоговая панель Options, предназначенная для настройки параметров программы WS_FTP
В этой диалоговой панели нажмите кнопку Program Option, после чего вы увидите одноименную диалоговую панель, позволяющую настроить наиболее важные параметры приложения (рис. 3.10).
Рис. 3.10. Диалоговая панель Program Option
Воспользовавшись группой переключателей Listbox Font, вы можете выбрать шрифт, которым отображаются имена файлов и каталогов в окне приложения. Выберите тот шрифт, который вам больше нравится.
С помощью переключателя Alternate Screen Layout вы можете изменить расположение окон, отображающих содержимое каталогов локального и удаленного узла. Если этот переключатель включен, содержимое каталогов локального узла отображается в верхней части окна приложения, а содержимое каталогов удаленного узла - в нижней. Такое альтернативное расположение окон удобнее в том отношении, что для имен файлов в окнах остается больше места. Это имеет значение, если вы работаете с длинными именами файлов.
Включив переключатель Show Buttons at Top of Screen вы можете изменить расположение управляющих кнопок, переместив их в верхнюю часть экрана.
В поле Text Viewer вы можете указать имя программы, которая будет использована для просмотра содержимого текстовых файлов. По умолчанию используется приложение Notepad.
Так как для подключения к серверам FTP вы должны указывать пароль, в поле E-Mail Address следует занести свой электронный почтовый адрес.
С помощью группы переключателей Double Click вы можете изменить действие, выполняемое после того как пользователь сделает двойной щелчок по имени файла в окне просмотра. По умолчанию файл будет передаваться, так как включен переключатель Transfer. Включив переключатель View вы можете заменить передачу файла просмотром. А если включить переключатель Nothing, на двойной щелчок со стороны приложения не будет никакой реакции.
Описание остальных органов управления, расположенных в этой диалоговой панели, вы найдете в справочной системе приложения, для чего следует нажать кнопку Help.
Нажав в диалоговой панели Options
(рис. 3.9) кнопку Session Options, вы можете настроить параметры, которые будут использоваться по умолчанию при соединении с серверами FTP . Соответствующая диалоговая панель показана на рис. 3.11.
Рис. 3.11. Диалоговая панель Session Options
В поле Host Type можно указать тип операционной системы, работающей на удаленном узле (если вы его знаете). По умолчанию выполняется автоматическое определение, которое работает практически во всех случаях.
Обратите внимание на группу переключателей Transfer Mode, определяющую режим передачи файлов. По умолчанию файлы передаются в двоичном режиме (включен переключатель Binary). Вы также можете включить текстовый режим (ASCII) или режим L8, предназанченный для передачи двоичных файлов из узлов, работающих под управлением операционной системы VMS .
Еслив диалоговой панели Options (рис. 3.9) нажать кнопку ASCII Extensions, на экране появится диалоговая панель Auto Detect Extensions (рис. 3.12).
Рис. 3.12. Диалоговая панель Auto Detect Extensions
В этой диалоговой панели вы можете отредактировать список расширений имен файлов, которые приложение WS_FTP передает в текстовом режиме. Для того чтобы добавить новое расширение в этот список, его следует ввести в поле ASCII Mode, а затем нажать кнопку Add. Для удаления расширения из списка его нужно выделить и нажать кнопку Delete.
Программа WS_FTP способна автоматически изменять расширение имен файлов при передаче. Для редактирования списка соответствия расширений вы должны нажать в диалоговой панели Options кнопку Extensions Conversions. При этом на экране появится диалоговая панель Convert Extensions, показанная на рис. 3.13. По умолчанию список соответствия пуст.
Рис. 3.13. Диалоговая панель Convert Extensions
Нажав в диалоговой панели Options
кнопку File Associations, вы можете в диалоговой панели Associate (рис. 3.14) указать связь между расширением имени файла и приложением, которое должно обрабатывать этот файл при его запуске кнопкой Exec.
Рис. 3.14. Диалоговая панель Associate
Навигатор IBM WebExplorer
В составе пакета приложений IBM Internet Connection поставляется приложение IBM WebExplorer (рис. 3.22), аналогичное по назначению приложениям Microsoft Internet Explorer, Netscape Navigator и Mosaic. К сожалению, в отличие от приложений Microsoft Internet Explorer и Netscape Navigator, приложение IBM WebExplorer не способно работать с электронными конференциями или посылать почтовые сообщения.Рис. 3.22. Главное окно навигатора IBM WebExplorer, поставляемого в составе пакета приложений IBM Internet Connection
Для того чтобы открыть новую страницу, вы должны выбрать из меню File строку Open Document (URL). После этого на экране появится одноименная диалоговая панель (рис. 3.23), в которой вы должны ввести полный адрес страницы WWW .
Рис. 3.23. Диалоговая панель Open Document (URL), предназначенная для перехода к просмотру произвольной страницы WWW
Практически все операции, необходимые вам в процессе просмотра страниц, вы можете выполнять с помощью кнопок, расположенных на инструментальной линейке в верхней части главного окна приложения IBM WebExplorer. Приведем список этих кнопок с кратким описанием их назначения.
| Кнопка | Описание |
| Переход к просмотру предыдущей страницы | |
| Переход к просмотру следующей страницы | |
| Эта кнопка предназначена для открывания страницы по ее адресу | |
| Изменение шрифта, которым отображается текст, расположенный на странице | |
| Настройка цветов, которые используются для отображения страницы | |
| Просмотр вашей карты Internet, создаваемой автоматически в процессе перемещения по страницам WWW | |
| Просмотр списка наиболее интересных страниц, который вы формируете самостоятельно | |
| Добалвение текущей страницы в список наиболее интересных страниц | |
| Печать текущей страницы | |
| Переход к просмотру домашней страницы |
Что касается настройки шрифтов, то навигатор IBM WebExplorer дает вам возможность указать только один шрифт, которым и будет отображаться текст, расположенный на странице (рис. 3.24).
Рис. 3.24. Изменение шрифта, которым отображается текст, расположенный на странице
Это обстоятельство может вызвать некоторые неудобства, так как при оформлении страниц WWW часто используют шрифты двух типов - пропорциональные и с фиксированной шириной букв.
Диалоговая панель Configure Colors (рис. 3.25) позволяет настроить цвета для изображения текста, гиперсвязей и фона.
Рис. 3.25. Диалоговая панель Configure Colors
Наиболее интересная, на наш взгляд, особенность навигатора IBM WebExplorer заключается в том, что он умеет строить карту серверов WWW (IBM Web Map). Эта карта отображает в иерархическом виде названия посещенных вами страниц WWW (рис. 3.26).
Рис. 3.26. Карта IBM Web Map
Сделав двойной щелчок мышью по любой строке карты, вы сможете просмотреть ее содержимое.
Так же как и другие навигаторы Internet, рассмотренные нами в этой книге, навигатор IBM WebExplorer позволяет коллекционировать наиболее интересные для вас страницы в отдельном списке, который в данном случае называется Quick List (рис. 3.27).
Рис. 3.27. Диалоговая панель Quick List, содержащая список наиболее интересных страниц
С помощью кнопок, расположенных в правой части диалоговой панели Quick List, вы можете загружать страницы из списка, а также редактировать список, добавляя или удаляя из него страницы. Вы также можете изменить название страницы.
Если включить переключатель List as URLs (как это показано на рис. 3.27), вместо названий страниц в списке будут отображаться их адреса URL.
Для просмотра текста и графики вы можете использовать любые программы, которые есть в вашем распоряжении. Диалоговая панель Configure Viewers (рис. 3.28) позволяет вам закрепить за каждым типом данных свою программу просмотра.
Рис. 3.28. Диалоговая панель Configure Viewers
Навигатор IBM WebExplorer может кэшировать страницы WWW , избавляя вас от необходимости ждать их загрузки при повторном просмотре. С помощью диалоговой панели Configure Caching (рис. 3.29) вы можете настроить параметры кэширования или отключить кэширование совсем.
Рис. 3.29. Диалоговая панель Configure Caching
Выбрав из меню Configure строку Servers, вы можете настроить адреса серверов в диалоговой панели Configure Servers (рис. 3.30).
Рис. 3.30. Диалоговая панель Configure Servers
В частности, в поле Home document URL вы можете указать адрес домашней страницы. Если дополнительно включить переключатель Load at startup, домашняя страница будет загружаться автоматически при запуске приложения IBM WebExplorer.
Навигаторы Internet
В этом разделе мы рассмотрим наиболее популярные приложения, предназначенные для работы с серверами WWW . Это такие навигаторы Internet, как Microsoft Internet Explorer, Netscape Navigator и другие.Небольшие, но полезные программы
Прежде чем приступть к описанию приложений Internet, мы расскажем о программах, с помощью которых можно проверить прохождение пакетов TCP/IP по сети, а также проверить и настроить маршрутизацию пакетов.NETSTAT
С помощью программы NETSTAT , которая входит в состав операционных систем Microsoft Windows 95 и Microsoft Windows NT, вы можете получить информацию об установленных соединениях.Эта программа показывает список соединений, созданных с использованием протокола NETBIOS , работающим поверх протокола TCP/IP.
Ниже мы привели сообщение, которое программа NETSTAT вывела на экран при подключении к серверу электронных конференций GlasNet:
Active Connections Proto Local Address Foreign Address State TCP frolov:1026 bird.glas.apc.org:nntp ESTABLISHED
Одновременно вы можете установить несколько соединений с использованием протокола NETBIOS. Вот что показала нам программа NETSTAT, после того как мы дополнительно к программе просмотра конференций запустили навигатор Internet и программу Telnet :
Active Connections Proto Local Address Foreign Address State TCP frolov:1026 bird.glas.apc.org:nntp ESTABLISHED TCP frolov:1031 www.home.msn.com:80 ESTABLISHED TCP frolov:1041 glas.apc.org:telnet ESTABLISHED
Отключение от сервера FTP
Если сервер FTP вам больше не нужен, закройте соединение с ним командой close.Параметры программы FTP
Запуская программу FTP в среде указанных выше операционных систем, вы можете при необходимости задать параметры, перечисленные ниже:| Параметр | Описание |
| Адрес удаленного узла | Доменное имя или адрес IP удаленного узла, к которому необходимо подключиться для передачи файлов с использованием протокола FTP |
| -v | Этот параметр отменяет отображение данных, поступающих от удаленного узла в ваш компьютер |
| -n | Параметр отменяет процедуру автоматического подлкючения к серверу |
| -i | Выключение отображения командного приглашения при одновременной передаче нескольких файлов |
| -d | Используется при отладке. Вызывает отображение всех команд, передаваемых между вашим компьютером и удаленным узлом |
| -g | Запрещение использования символов шаблонов в именах каталогов и файлов |
| -s:имя файла | Имя текстового файла, содержащего команды, которые будут автоматически выполнены после запуска программы FTP |
Обычно в качестве параметра при запуске программы FTP указывают имя или адрес удаленного сервера FTP, с которым собираются соединиться для передачи файлов:
c:\>ftp ftp.microsoft.com
В данном случае предпринимается попытка подключения к серверу FTP корпорации Microsoft.
PING
Программа PING возникла в мире UNIX. Сейчас она входит в состав операционных систем Microsoft Windows 95 (при установленном расширении Microsoft Plus)и Microsoft Windows NT. С помощью этой программы вы сможете проверить, доходят ли пакеты данных протокола TCP/IP до любого узла Internet, адрес которого вы знаете.
Сделать это очень просто - достаточно указать программе PING при запуске в виде параметра адрес или доменное имя узла, например:
c:\>ping 254.123.45.6
или
c:\>ping some.node.com
Запуск программы PING в среде операционных систем Microsoft Windows 95 и Microsoft Windows NT необходимо выполнять из командного приглашения. В первом случае это должно быть командное приглашение сеанса MS-DOS, запущенного в середе Microsoft Windows 95, во втором - командное приглашение Microsoft Windows NT.
После запуска программа PING сделает четыре попытки передачи указанному узлу диагностического эхо-пакета и отобразит на экране результат:
Pinging some.node.com [254.123.45.6] with 32 bytes of data:
Reply from 254.123.45.6: bytes=32 time=110ms TTL=32 Reply from 254.123.45.6: bytes=32 time=80ms TTL=32 Reply from 254.123.45.6: bytes=32 time=110ms TTL=32 Reply from 254.123.45.6: bytes=32 time=110ms TTL=32
По умолчанию между передачами пакетов выдерживается интервал в одну секунду.
Если указанный узел недоступен или не существует в сети, вы увидите следующее сообщение:
C:\>ping 200.200.200.100 Pinging 200.200.200.100 with 32 bytes of data:
Request timed out. Request timed out. Request timed out. Request timed out.
В этом случае вы должны проверить, правильно ли вы указали адрес. Если в качестве параметра программе PING было указано доменное имя, то следует проверить настройку сервиса DNS (в первую очередь следует проверить адрес сервера DNS).
Для проверки настройки сетевой компоненты TCP/IP нужно указать программе PING адрес 127.0.0.1 или локальное доменное имя localhost, которое отображается на указанный адрес в файле HOSTS в операционной системе Microsoft Windows 95.
PM Ping
Приложение PM Ping предназначено для решения той же задачи, что и только что описанная программа PING , однако она работает под управлением операционной системы OS/2 Warp.Для запуска этой программы откройте папку OS/2 System и сделайте двойной щелчок левой клавишей мыши по пиктограмме TCP/IP. В результате откроется папка с одноименным названием, содержимое которой показано на рис. 3.1.
Рис. 3.1. Содержимое папки TCP/IP
В этой папке есть уже знакомые вам пиктограммы, о которых мы рассказывали в предыдущей главе. Обращаем ваше внимание на книгу Introduction to TCP/IP и приложение TCP/IP Configuration , которые помогут вам настроить протокол TCP/IP.
Сейчас нас интересует папка TCP/IP Utilities , в которой находится программа PM Ping и другие программы (рис. 3.2).
Рис. 3.2. Папка TCP/IP Utilities
Установив соединение с сервером поставщика услуг Internet (как это было описано в предыдущей главе), запустите приложение PM Ping, сделав двойной щелчок левой клавишей мыши по ее пиктограмме. На экране появится главное окно приложения, показанное на рис. 3.3.
Рис. 3.3. Главное окно приложения PM Ping
Вначале в этом окне есть только пиктограмма и строка Result Displayed. Для того чтобы приступить к проверке соединения, необходимо выбрать из меню Settings строку Hosts. В результате на экране появится диалоговая панель PM Ping Host Editor (рис. 3.4), в которой отображаются адреса проверяемых узлов. Заметим, что можно одновременно контролировать соединение с несколькими узлами.
Рис. 3.4. Диалоговая панель PM Ping Host Editor
Первоначально список Hosts в диалоговой панели PM Ping Host Editor пуст. Для добавления в него адреса проверяемого узла нажмите кнопку Add. В появившейся после этого диалоговой панели Add a Host (рис. 3.5) укажите адрес узла и произвольный текстовый комментарий. Адрес можно задавать только в виде четырех десятичных цифр, разделенных точками, что неудобно, если вам известно только доменное имя узла.
Рис. 3.5. Добавление адреса узла к списку проверяемых узлов
После добавления адреса узла в главном окне приложения PM Ping появляется соответствующая строка, в которой отображается время ответа на диагностический пакет.
С помощью меню Interval вы можете задать интервал посылки диагностических пакетов в пределах от одной секунды до пяти минут.
Если по какой-либо причине соединение с одним из проверяемых узлов разрывается, в окне приложения PM Ping напротив адреса и комментария появляется сообщение об ошибке (рис. 3.6).
Рис. 3.6. Сообщение об ошибке, которое появилось после того как мы завершили работу IBM Internet Connection
Подключение к серверу FTP
Для подключения к удаленному серверу FTP введите команду open, указав ей в качестве параметра имя сервера или его адрес IP. В ответ на эту команду удаленный серевер предложит вам ввести имя пользователя и пароль. Как правило, вы всегда должны указывать имя anonymous и свой электронный почтовый адрес в качестве пароля.В любой момент времени после установки соединения с сервером FTP вы можете ввести имя пользователя при помощи команды user.
Получение файлов
Основная команда, которой вы будете пользоваться для переписывания файлов с дисков удаленного узла на диски локального компьютера, это команда get. В качестве параметра ей необходимо указать имя нужного вам файла.Если вам нужно одновременно получить все или несколько файлов из текущего каталога удаленного узла, воспользуйтесь командой mget, указав ей в качестве параметра шаблон имени файла (аналогичный тому, что используется в MS-DOS).
Получение программы WS_FTP
Прежде всего вам необходимо переписать к себе на диск программу WS_FTP с одного из серверов, указанных в документации к программе:ftp.coast.net/SimTel/win3/winsock/ws_ftp.zip ftp.coast.net/SimTel/win3/winsock/ws_ftp32.zip winftp.cica.indiana.edu/pub/pc/win3/winsock/ws_ftp.zip winftp.cica.indiana.edu/pub/pc/win3/winsock/ws_ftp32.zip ftp.usma.edu/pub/msdos/winsock.files/ws_ftp.zip ftp.usma.edu/pub/msdos/winsock.files/ws_ftp32.zip ftp.csra.net/pub/win32 ftp>
Мы воспользуемся сервером ftp.csra.net.
Итак, запустите программу FTP и подсоединитесь к указанному серверу:
ftp> open ftp.csra.net Connected to news2.csra.net. 220 news2 Windows NT FTP Server (Version 3.5). User (news2.csra.net:(none)): anonymous 331 Anonymous access allowed, send identity (e-mail name) as password. Password:frolov@glas.apc.org 230 Anonymous user logged in as ftpuser (guest access). ftp>
В качестве имени используйте anonymous, а для пароля используйте свой полный почтовый адрес. Затем перейдите в каталог pub и посмотрите, какие файлы и каталоги в нем имеются:
ftp> cd pub 250 CWD command successful. ftp> dir 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. dr-xr-xr-x 1 owner group 0 Mar 1 22:01 msdos dr-xr-xr-x 1 owner group 0 Mar 1 22:00 win3 dr-xr-xr-x 1 owner group 0 Mar 2 7:21 win32 226 Transfer complete. 197 bytes received in 0.05 seconds (3.94 Kbytes/sec) ftp>
Нас интересуют версии программы WS_FTP для операционных систем Microsoft Windows 95 и Microsoft Windows NT, поэтому перейдите в каталог win32 и просмотрите его содержимое:
ftp> cd win32 250 CWD command successful. ftp> dir 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. -r-xr-xr-x 1 owner group 11906 Mar 1 21:59 watch95.txt -r-xr-xr-x 1 owner group 308610 Mar 1 20:09 watch95.zip -r-xr-xr-x 1 owner group 8631 Mar 1 21:57 ws_ftp32.txt -r-xr-xr-x 1 owner group 197468 Mar 2 7:21 ws_ftp32.zip -r-xr-xr-x 1 owner group 11851 Mar 1 21:57 ws_watch.txt -r-xr-xr-x 1 owner group 307757 Mar 1 20:10 ws_watch.zip -r-xr-xr-x 1 owner group 9006 Mar 1 21:57 wsftp32a.txt -r-xr-xr-x 1 owner group 201386 Mar 1 20:39 wsftp32a.zip -r-xr-xr-x 1 owner group 4633 Mar 1 21:58 wsping32.txt -r-xr-xr-x 1 owner group 57314 Mar 1 20:10 wsping32.zip 226 Transfer complete. 728 bytes received in 0.22 seconds (3.31 Kbytes/sec) ftp>
Теперь мы займемся получением текстовых и двоичных файлов, расположенных в этом каталоге. Сначала давайте получим все текстовые файлы, воспользовавашись для этого командой mget:
ftp> mget *.txt mget watch95.txt? y 200 PORT command successful. 150 Opening ASCII mode data connection for watch95.txt. mget wsftp32a.txt? y 200 PORT command successful. 150 Opening ASCII mode data connection for wsftp32a.txt. 226 Transfer complete. 9006 bytes received in 8.29 seconds (1.09 Kbytes/sec) mget wsping32.txt? y 200 PORT command successful. 150 Opening ASCII mode data connection for wsping32.txt. 226 Transfer complete. 4633 bytes received in 6.59 seconds (0.70 Kbytes/sec) mget ws_ftp32.txt? y 200 PORT command successful. 150 Opening ASCII mode data connection for ws_ftp32.txt. 226 Transfer complete. 8631 bytes received in 8.24 seconds (1.05 Kbytes/sec) ftp>
Перед тем как выполнить пересылку файла, команда mget запрашивает подтверждение, на которое вы должны ответить вводом символа y. Если вы запустили программу FTP в среде Microsoft Windows 95, то все принятые файлы по умолчанию будут записаны в тот каталог, где установлена эта операционная система.
Для передачи файлов программных архивов переключитесь в двоичный режим пересылки файлов:
ftp> binary 200 Type set to I. ftp>
Теперь можно выполнять пересылку:
ftp> mget *.zip mget watch95.zip? y 200 PORT command successful. 150 Opening BINARY mode data connection for watch95.zip. 226 Transfer complete. 308610 bytes received in 155.99 seconds (1.98 Kbytes/sec) mget wsftp32a.zip? y 200 PORT command successful. 150 Opening BINARY mode data connection for wsftp32a.zip. 226 Transfer complete. 201386 bytes received in 160.93 seconds (1.25 Kbytes/sec) mget wsping32.zip? y 200 PORT command successful. 150 Opening BINARY mode data connection for wsping32.zip. 226 Transfer complete. 57314 bytes received in 87.11 seconds (0.66 Kbytes/sec) mget ws_ftp32.zip? y 200 PORT command successful. 150 Opening BINARY mode data connection for ws_ftp32.zip. 226 Transfer complete. 197468 bytes received in 150.26 seconds (1.23 Kbytes/sec)
Выполнив пересылку, отключитесь от сервера FTP и завершите работу программы FTP про помощи команды bye.
Посылка ответа на статью в конференцию
Процедура посылки ответа на статью в конференцию очень похожа на только что описанную процедуру посылки ответа автору статьи по электронной почте. Разница заключается в том, что для подготовки отправляемого сообщения вы должны нажать кнопку подготовки ответа на статью для записи в конференцию, расположенную в инструментальной линейке главного окна приложения News Express .После этого на экране появится окно, показанное на рис. 3.51.
Рис. 3.51. Окно, предназначенное для подготовки ответа на статью, посылаемого в конференцию
В этом окне поля Newsgroups и Subject (название конференции и тема сообщения) уже заполнены. Вы можете указать ключевое слово для поиска в поле Keyword
и краткое содержание вашего ответа в поле Summary, однако это необязательно.
Далее в окне цитируется текст исходной статьи. Вы можете отредактировать цитату и дописать свой ответ или комментарий к статье. Затем нажмите кнопку отправки статьи или сообщения, расположенную в инструментальной линейке главного окна приложения News Express и подтвердите свое желание послать сообщение в диалоговой панели Notice, нажав кнопку Yes.
Посылка письма автору статьи
Для того чтобы ответить на текущую статью (которую вы в настоящий момент просматриваете) и направить ответ автору в виде электронного письма, нажмите в инструментальной линейке кнопку подготовки к отправке ответа на сообщение в виде письма.После этого на экране появится окно, показанное на рис. 3.49, в котором вы должны подготовить текст письма.
Рис. 3.49. Подготовка ответа на статью
Обратите внимание, что поля Subject и To уже заполнены. Если вы желаете отправить кому-либо копию письма, заполните также поле Cc, записав в него электронный адрес второго корреспондента.
В окно автоматически копируются строки исходной статьи, которые выделяются символом ">". Вы можете удалить их все или только некоторые, Эти строки нужны для того, чтобы получив ваше письмо, автор статьи сразу понял, о чем идет речь. Свой ответ вы должны написать ниже цитируемых строк исходного сообщения.
Окно подготовки сообщения имеет свою инструментальную линейку с кнопками, перечисленными ниже.
| Кнопка | Описание | |
| Операция удаления с копированием в универсальный буфер обмена Clipboard | ||
| Операция копирования в Clipboard | ||
| Операция вставки из Clipboard | ||
| Изменение шрифта, которым отображается текст сообщения (пропорциональный шрифт или шрифт с фиксированной шириной букв) | ||
| Вставка текстового файла, подготовленного заранее | ||
| При помощи этой кнопки можно отправить вместе с письмом двоичный файл | ||
| Отправка копии письма по почте | ||
| Копирование ответа в личный каталог | ||
| Использование для передачи данных протокола MIME |
После того как вы подготовите текст письма, нажмите кнопку отправки статьи или сообщения, расположенную в инструментальной линейке главного окна приложения News Express . На экране появится диалоговая панель, в которой вы должны подтвердить свое желание отправить сообщение (рис. 3.50).
Рис. 3.50. Запрос на отправку сообщения
Приложение FTP -PM для IBM OS/2 Warp Connect
В составе пакета IBM Internet Connection входит приложение FTP -PM, которое предназначено для обмена файлами с серверами FTP. И хотя это приложение не такое многофункциональное, как только что описанное приложение WS_FTP, оно также достаточно удобно в работе.Для запуска приложения сделайте двойной щелчок левой клавишей мыши по пиктограмме FTP -PM, расположенной в папке Internet Utilities (рис. 2.64). Если вы уже установили соединение с Internet, то через некоторое время на экране появится главное окно приложения FTP-PM, показанное на рис. 3.15.
Рис. 3.15. Главное окно прилжоения FTP -PM после подключения к серверу GlasNet с адресом ftp.glas.apc.org
Для подключения к удаленному серверу FTP вы должны выбрать строку Open Remote Host из меню File. В появившейся на экране диалоговой панели FTP-PM - Open Remote Host (рис. 3.16) следует указать адрес удаленного сервера, имя пользователя и пароль.
Рис. 3.16. Диалоговая панель FTP -PM - Open Remote Host
В качестве имени пользователя следует указать anonymous, а в качестве пароля - свой электронный почтовый адрес.
После подключения в нижней части окна приложения FTP -PM появится содержимое каталогов удаленного узла. Передвигаться по дереву каталогов можно с помощью мыши, делая двойной щелчок по имени каталога или строке "..". В последнем случае будет выполнен переход в каталог более высокого уровня.
Перед тем как копировать файлы, вы должны указать режим передачи данных - текстовый или двоичный. Для этого выберите из меню Options строку Transfer mode. Далее в меню второго уровня выберите строку ASCII для текстового режима и Binary для двоичного.
Затем в том окне, где отображаются каталоги и файлы удаленного сервера, выделите нужный вам файл и выберите из главного меню строку QuickTrans. На экране появится диалоговая панель FTP -PM - Get Remote Files, на которой будет показано имя выбранного вами файла и другая информация. В этой диалоговой панели вы должны нажать кнопку YES, после чего начнется процесс передачи данных. Вы сможете наблюдать за этим процессом с помощью диалоговой панели FTP-PM - Transfer Progress, в которой будет отображаться объем переданных данных.
Приложение News Express
Несмотря на то что современные навигаторы Internet включают в себя средства работы с электронными конференциями, эти средства не всегда удобны. Особенно это сказывается при работе с двоичными конференциями .В этом разделе мы расскажем вам о приложении News Express , которое нам кажется достаточно удобным и легким в использовании.
Приложение WS_FTP для Microsoft Windows
Программа WS_FTP представляет собой шаг (или несколько шагов?) вперед по сравнению с только что описанной программой FTP, так как она обеспечивает существенно более удобный способ работы с серверами FTP. Еще один способ работы с серверами FTP основан на использовании приложений-навигаторов WWW , о которых мы расскажем в этой главе немного позже.Общее представление об использовании программы WS_FTP вы получили из первой главы нашей книги. Здесь мы дадим конкретные рекомендации по получению этой программы из сети Internet, по ее установке, настройке и использованию.
ПРИЛОЖЕНИЯ ДЛЯ INTERNET
По мере развития сети Internet появился новый класс приложений, ориентированных на эту сеть (мы будем называть их приложениями Internet). Эти приложения обеспечивают доступ к серверам WWW , FTP , GOPHER, предоставляют возможность работать с электронными конференциями и электронной почтой. Приложения Internet созданы для самых разных операционных систем, от MS-DOS до Microsoft Windows NT, IBM OS/2 и различных версий UNIX.
В предыдущей главе мы научили вас устанавливать соединение с Internet, пользуясь протоколами PPP и TCP/IP. Теперь вы узнаете о том, как использовать установленное соединение.
Прочие команды
Если вы забыли команды программы FTP , воспользуйтесь командой help. Указав ей в качестве параметра имя любой команды, вы сможете посмотреть ее краткое описание. При вводе команды без параметров отображается полный список команд. Аналогичные действия выполняются по команде ?.Командой bye вы можете воспользоваться для завершения работы программы FTP .
Что же касается команд пересылки файлов с локального компьютера на диски удаленного узла, создания каталогов, стирания и переименования файлов, а также каталогов на удаленном компьютере, то они обычно вам недоступны. Администратор никогда не разрешит любому пользователю выполнять подобные операции на своем сервере FTP .
Программа FTP для IBM OS/2 Warp Connect
Если вы работаете в среде операционной системы IBM OS/2 Warp Connect, вы тоже можете работать с программой FTP , запустив ее из папки TCP/IP Utilities. После запуска на экране появляется окно программы FTP и вы можете вводить в нем только что описанные команды (рис. 3.7).Рис. 3.7. Программа FTP для IBM OS/2 Warp Connect
Программы для работы с протоколом FTP
Первое, что вы можете попробовать, подключившись к сети Internet, это воспользоваться программой FTP для того чтобы загрузить из Internet на диск своего компьютера другие приложения, специально ориентированные на работу с серверами FTP, WWW , а также предназначенные для работы с электронной почтой и конференциями.Программа FTP есть в составе операционных систем Microsoft Windows 95 (при добавлении расширения Microsoft Plus) и Microsoft Windows NT, поэтому как только вы установите соединение с Internet, то сможете сразу ей воспользоваться.
Просмотр содержимого каталогов сервера
Для просмотра содержимого текущего каталога, расположенного на диске удаленного компьютера, воспользуйтесь командами dir или ls. Перемещаться по дереву каталогов удаленного узла вы сможете при помощи команды cd.Просмотр страниц
Для перехода к просмотру других страниц вы можете либо сделать щелчок левой клавишей мыши по гиперсвязи (выделенному фрагменту текста или графическому изображению), либо набрать полный адрес URL новой страницы в поле Address, расположенному ниже линейки инструментальных средств, и нажать клавишуВ процессе загрузки новой страницы флаг оживает, так как вновь возобновляется процесс передачи данных по сети.
Заметим, что каждый раз, когда навигатор переходит к просмотру новой страницы WWW , он заново устанавливает соединение с сервером WWW, принимает данные и затем разрывает соединение. Если на загружаемой странице есть несколько графических изображений, то для загрузки каждого изображения повторяется цикл "соединение" - "передача данных" - "разрыв соединения".
| После того как вы перешли к просмотру новой страницы, вы можете вернуться к старой, нажав кнопку с изображением треугольника, направленного острием влево. |
Если загрузка страницы была выполнена полностью, она сразу появится на экране, так как навигатор сохраяет загруженные страницы на диске в кэше страниц (это просто каталог с файлами). В том случае когда вы не дождались окончания загрузки страницы и перешли к просмотру новой, при возвращении к просмотру предыдущей страницы последняя будет загружаться заново.
| Кнопка с изображением треугольника, направленного острием вправо, предназначена для просмотра следующей страницы, записанной в кэше страниц. |
Таким образом, если вы последовательно просматривали несколько страниц и каждая из них была загружена до конца, то с помощью двух только что описанных кнопок вы можете их просматривать без повторной загрузки данных из сети. Последнее обстоятельство позволит вам сэкономить немало времени.
Содержимое страниц периодически изменяется, поэтому время от времени их нужно обновлять в кэше.
| Для повторной загрузки текущей отображаемой страницы вы можете нажать кнопку с изображением двух стрелок, показанную слева. |
Мы уже говорили, что сразу после запуска навигатора он пытается загрузить домашнюю страницу, указанную в параметрах настройки.
| С помощью кнопки с изображением домика вы в любой момент можете перейти к просмотру домашней страницы. |
| Кнопка | Назначение |
| Переход к просмотру страницы сервера сети Microsoft Network, на которой находятся многочисленные средства поиска информации в сети Internet | |
| Работа с серверами электронных конференций | |
| С помощью этой кнопки вы можете открыть папку Favorites, в которой находятся наиболее интересные для вас страницы. Для перехода к просмотра страницы из этой папки вам достаточно сделать двойной щелчок левой клавишей мыши по пиктограмме или названию нужной страницы | |
| Если нажать на эту кнопку, на экране появится диалоговая панель, с помощью которой можно добавить текущую страницу в папку Favorites | |
| Увеличение высоты шрифта, которым отображается содержимое страницы | |
| Уменьшение высоты шрифта, которым отображается содержимое страницы | |
| Операция удаления (работает только в режиме редактирования страниц) | |
| Операция копирования в универсальный буфер обмена Clipboard | |
| Операция вставки содержимого Clipboard (работает только в режиме редактирования страниц) | |
| Переход в режим редактирования страницы. Отредактированную страницу можно сохранить в файле на локальном диске | |
| С помощью этой пиктограммы вы можете открыть любую страницу, расположенную на любом удаленном сервере WWW либо на локальном диске | |
| Печать текущей страницы | |
| Отправка электронного письма |
Для подключения к такому серверу в поле Address необходимо вместо адреса сервера WWW указать адрес сервера FTP, например так:
http://ftp.microsoft.com
На экране появится страница, на которой изображено содержимое каталогов сервера FTP в виде папок. Для просмотра папки достаточно сделать по ней двойной щелчок левой клавишей мыши. После этого вы увидите новую страницу с содержимым каталога.
Чтобы загрузить нужный файл, вы должны сделать двойной щелчок по пиктограмме файла. На экране появится диалоговая панель, с помощью которой вы сможете сохранить файл на локальном диске в выбранном вами каталоге.
Работа с электронной почтой
Приложение Netscape Navigator Gold содержит весь инструментарий, необходимый вам для работы с электронной почтой.Сделайте двойной щелчок левой клавишей мыши по пиктограмме, на которой изображен почтовый конверт (эта пиктограмма находится в правом нижнем углу главного окна навигатора). Вы увидите диалоговую панель Password Entry Dialog, в которой нужно ввести ваш пароль для доступа к почтовому серверу POP (рис. 3.39). Этот пароль вы должны получить у вашего поставщика услуг Internet.
Рис. 3.39. Диалоговая панель Password Entry Dialog
После ввода пароля на экране появится окно почтовой программы, показанное на рис. 3.40.
Рис. 3.40. Окно почтовой программы, которая входит в комплект навигатора Netscape Navigator Gold
В левом верхнем углу этого окна находятся папки Inbox и Send, в которых хранится, соответственно, принятая почта и почта, предназначенная для отправления.
Если сделать двойной щелчок левой клавишей мыши по одной из этих папок, в окне, расположенном в правом верхнем углу главного окна, вы увидите список писем, хранящихся в папке.
Для просмотра письма достаточно сделать двойной щелчок левой клавишей мыши по названию письма. После этого в нижней части главного окна приложения вы увидите содержимое письма.
Таким образом, процедура просмотра почты достаточно проста.
В верхней части главного окна располагается инструментальная линейка с кнопками, с помощью которой удобно выполнять наиболее нужные функции по обработке почты. Ниже мы привели краткое описание этих кнопок.
| Кнопка | Описание |
| С помощью этой кнопки можно получить новую почту | |
| Удаление ненужного письма | |
| Создание нового письма | |
| Ответ на письмо | |
| Ответ сразу всем корреспондентам | |
| Распространение сообщения (функция Forward) | |
| Просмотр предыдущего непрочитанного сообщения | |
| Просмотр следующего непрочитанного сообщения | |
| Печать сообщения | |
| Останов процесса передачи данных |
Когда вы нажмете кнопку создания нового письма, на экране появится диалоговая панель, показанная на рис. 3.41.
Рис. 3.41. Диалоговая панель Netscape - (Message Composition)
В поле, расположенном справа от кнопки Mail To вы должны ввести электронный почтовый адрес своего корреспондента. Если одновременно с ним ваше письмо должен получить другой человек, то в поле Cc нужно указать еще один адрес.
В поле Subject следует ввести краткое описание содержимого письма.
Если вместе с письмом посылается файл, то путь к нему указывается в поле, расположенном справа от кнопки Attachment. Нажав кнопку Attachment, вы можете выбрать файл с помощью диалоговой панели.
В нижней части окна диалоговой панели находится поле, в котором вы должны ввести текст письма.
После подготовки перечисленных выше полей можно отправить письмо, нажав самую левую кнопку в инструментальной линейке диалоговой панели. Ниже мы привели краткое описание этой кнопки, а также остальных кнопок.
| Кнопка | Описание |
| Отправка подготовленного сообщения | |
| Вставка содержимого текущего письма, отображаемого в нижнем окне просмотра писем | |
| С помощью этой кнопки можно "прикрепить" к письму файл (двоичный или текстовый) | |
| Вставка адреса из адресной книги | |
| Останов процесса передачи данных |
Рис. 3.42. Главное окно адресной книги
Для добавления нового адреса выберите из меню Item строку Add User. После этого на экране появится страница Properties блокнота Address Book (рис. 3.43), предназначенная для добавления в адресную книгу нового адреса.
Рис. 3.43. Страница Properties блокнота Address Book
В поле Nick Name вы должны ввести алиасное имя (псевдоним), которое может быть аббревиатурой или сокращенным именем, соответствующем добавляемому вами адресу.
Помимо обычных адресов, вы можете добавлять в адресную книгу списки рассылки, облегчающие отправку почты сразу нескольким адресатам. В этом случае в поле Nick Name следует ввести краткое имя списка рассылки. Для того чтобы добавить новый список рассылки, из меню Options следует выбрать строку Add List. На экране появится приведенная на рис. 3.43 страница блокнота Address Book, в которой поле E-Mail Address будет заблокировано.
Работа с электронными конференциями
Навигатор Netscape Navigator Gold , так же как и навигатор Microsoft Internet Explorer , содержит встроенные средства, предназначенные для работы с электронными конференциями. Однако в отличие от последнего, навигатор Netscape Navigator Goldобеспечивает более удобную работу с бинарными конференциями, в которых публикуются графические изображения. Другое, еще более удобное приложение, специально предназначенное для работы с электронными конференциями, мы рассмотрим позже. Это приложение называется News Express .
А сейчас установите соединение с сетью Internet, запустите навигатор Netscape Navigator Gold и откройте окно приложения, предназначенного для работы с электронными конференциями, выбрав из меню Window строку Netscape News. После этого вы увидите окно, показанное на рис. 3.46.
Рис. 3.46. Окно навигатора Netscape Navigator Gold , предназначенное для работы с электроными конференциями
В верхней части окна находится инструментальная линейка с кнопками, предназначенными для выполнения наиболее нужных функций. В левой верней части окна под инструментальной линейкой располагается окно News Server просмотра списка конференций, полученного от сервера конференций. Правее него находится окно просмотра статей той конференции, что была выделена в левом окне. И, наконей, в ниженй части находится окно для просмотра содержимого статьи, выделенной в правом верхнем окне (т. е. в окне просмотра статей).
Если статья содержит внутри себя графическое изображение, закодированное программой UUENCODE , это изображение автоматически раскодируется и отображается в окне просмотра содержимого статьи.
Когда вы начинаете работу, прежде всего вы должны выбрать в окне News Server ваш сервер конференций. Например, для сети GlasNet это будет сервер news.glas.apc.org. Раскрыв папку, соответствующему выбранному серверу конференций, вы можете выбрать нужную вам конференцию или папку с конференциями. Далее нужно сделать щелчок левой клавишей мыши по названию выбранной вами конференциии, после чего начнется процесс заполнения окна списка статей.
Учтите, что список конференций очень большой (в нем несколько тысяч названий), поэтому при самом первом подключении к серверу конференций процесс загрузки этого списка может отнять у вас несколько минут.
| Кнопка | Описание |
| Посылка новой статьи в электронную конференцию | |
| Посылка нового почтового сообщения | |
| Посылка ответа на почтовое сообщение | |
| Посылка ответа на статью в электронной конференции | |
| Посылка сообщения и ответа одновременно | |
| Передача сообщения другому корреспонденту | |
| Просмотр предыдущей непрочитанной статьи | |
| Просмотр следующей непрочитанной статьи | |
| С помощью этой кнопки можно отметить статью как прочитанную | |
| С помощью этой кнопки можно отметить все статьи как прочитанные | |
| Печать содержимого текущей отображаемой статьи | |
| Отмена процесса передачи данных |
Работа с навигатором Microsoft Internet Explorer
Навигатор Microsoft Internet Explorer устанавливается вместе с расширением Microsoft Plus, которое предназначено для операционной системы Microsoft Windows 95.Расширение списка серверов FTP
Для того чтобы добавить новый сервер FTP в список Profile Name, расположеный в диалоговой панели Session Profile (рис. 3.8), вы должны нажать кнопку New, которая находится в указанной диалоговой панели.Далее вы должны заполнить поля диалоговой панели так, как это сделано для других серверов FTP , имеющихся в списке.
В поле Host Name следует указать доменное имя сервера или его адрес IP в виде четырех десятичных чисел, разделенных точками.
Далее вам нужно включить переключатлеь Anonymous Login. При этом поля User ID (идентификатор пользователя) и Password (пароль) будут заполнены автоматически. При необходимости вы можете изменить содержимое указанных полей.
В группе органов управления Initial Directories можно задать пути к локальному и удаленному каталогу, которые будут текущими после установки соединения.
Сделав все изменения, нажмите кнопку Save. Список Profile Name будет дополнен.
ROUTE
Программа ROUTE предназначена для работы с таблицей маршрутизации. С ее помощью вы можете просматривать и изменять содержимое этой таблицы, добавляя в нее новые мосты или удаляя существующие.Ниже мы привели результат работы программы ROUTE, запущенной с параметром print:
Active Routes: Network Address Netmask Gateway Address Interface Metric 0.0.0.0 0.0.0.0 193.232.236.48 193.232.236.48 1 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 193.232.236.0 255.255.255.0 193.232.236.48 193.232.236.48 1 193.232.236.48 255.255.255.255 127.0.0.1 127.0.0.1 1193.232.236.255 255.255.255.255 193.232.236.48 193.232.236.48 1 224.0.0.0 224.0.0.0 193.232.236.48 193.232.236.48 1255.255.255.255 255.255.255.255 193.232.236.48 193.232.236.48 1
В данном случае при подключении к сети GlasNet нам был выделен адрес 193.232.236.48. Этот адрес и является адресом моста, через которого пакеты IP попадают в сеть Internet.
Если все что вы делаете в сети, это получаете доступ к Internet пользуясь выделенным для вас каналом, вам едва ли придется настраивать таблицу маршрутизации. Однако мы все же кратко опишем некоторые из приведенных в ней адреса.
Адрес 0.0.0.0 - это адрес моста, который используется по умолчанию. Так как адрес состоит из одних нулей, то это адрес вашего узла.
Остальные строки таблицы маршрутизации, приведенные выше, создаются автоматически при установке протокола TCP/IP.
Адрес 127.0.0.0 является адресом локального тестового моста. Адрес 127.0.0.1 также используется для локальных тестов сетевых приложений.
Локальный мост, через который пакеты попадают "во внешний мир", как мы уже говорили, имеет адрес 193.232.236.48.
Адрес 193.232.236.0 является адресом сети, к которой подключен ваш узел. Этой сети соответствует маска 255.255.255.0.
Адрес 255.255.255.255 используется для посылки пакетов всем узлам сети (это широковещательный адрес).
Ниже представлен список параметров программы ROUTE для операционной системы Microsoft Windows NT.
| Параметр | Назначение |
| Вывод таблицы маршрутизации | |
| add | Добавление нового моста |
| delete | Удаление моста |
| change | Изменение адреса моста |
Универсальный навигатор Netscape Navigator Gold
Если вам нужно, чтобы одно-единственное приложение предоставляло доступ ко всем (или почти ко всем) услугам сети Internet, мы советуем вам обратить внимание на Netscape Navigator Gold , которому посвящен этот раздел.С помощью навигатора Netscape Navigator Gold можно не только просматривать содержимое серверов WWW и FTP , но и работать с электронной почтой, читать и посылать статьи в электронные конференции, а также создавать собственные страницы WWW для их размещения на вашем собственном или любом другом сервере WWW. На тот момент, когда мы писали эту книгу, навигатор Netscape Navigator Gold был самым многофункциональным приложением, созданным для работы с глобальной сетью Internet.
Фирма Netscape выпускает также упрощенную версию навигатора, лишенную средств разработки сраниц WWW , которая называется Netscape Navigator. Так как по своим остальным возможностям эти приложения примерно эквивалентны, мы ограничимся расказом только о навигаторе Netscape Navigator Gold .
Установка и запуск навигатора Netscape Navigator Gold
Для установки навигатора вы должны запустить полученный файл на выполнение в среде операционной системы Microsoft Windows 95 или Microsoft Windows NT. В результате на поверхности рабочего стола появится пиктограмма с изображением штурвала и названием Netscape Navigator Gold .Чтобы запустить навигатор, установите соединение с сервером поставщика услуг Internet и сделайте двойной щелчок по пиктограмме навигатора. На экране появится основное окно приложения, показанное на рис. 3.31.
Рис. 3.31. Главное окно навигатора Netscape Navigator Gold
Сразу после запуска приложение начнет подключение к серверу WWW фирмы Netscape, имеющего адрес http://home.netscape.com. Полученная страница содержит последнюю информацию о разработках фирмы Netscape. Заметим, что помимо навигатора, фирма Netscape выпускает собственные серверные приложения для Internet.
По мере появляения новых бета-версий приложений Netscape вы можете получать их черезх Internet непосредственно с сервера WWW фирмы Netscape.
В верхней части главного окна навигатора Netscape Navigator Gold имеется линейка инструментальных средств, предназначенная для выполнения наиболее нужных операций. Ниже мы привели краткое описание кнопок, расположенных на этой инструментальной линейке.
| Кнопка | Описание | |
| Переход к просмотру предыдущей страницы | ||
| Переход к просмотру следующей страницы | ||
| Переход к просмотру домашней страницы | ||
| Редактирование загруженной страницы | ||
| Обновление текущей страницы | ||
| Загрузка графических изображений | ||
| Переход к просмотру страницы WWW , заданной своим адресом URL | ||
| Печать текущей страницы | ||
| Поиск информации в сети Internet | ||
| Отмена загрузки страницы |
В поле Location вы можете ввести адрес страницы WWW . После того как вы нажмете клавишу
Ниже поля Location находятся кнопки What's New!, What's Cool!, Handbook, Net Search, Net Directory и Software, которые открывают доступ к информации, расположенной на сервере Netscape.
Отметим один интересный факт. Обычно приложения поставляются вместе со справочной системой и электронной документацией в виде hlp-файлов или файлов аналогичного назначения. Навигаторы фирмы Netscape также имеют такие файлы. Однако если для того чтобы почитать руководство пользователя вы попробуете выбрать строку Handbook из меню Help, приложение Netscape Navigator Gold отобразит в своем окне соответствующую страницу WWW , расположенную на сервере Netscape (при условии, что вы установили соединение с Internet).
Таким образом, все пользователи навигатора Netscape Navigator Gold имеют доступ к самой последней версии руководства, расположенной на сервере Netscape.
Теперь обратите внимание на нижний левый угол главного окна приложения Netscape Navigator Gold .
| В этом углу расположены две небольшие пиктограммы с изображением почтового конверта и вопросительного знака. |
Установка и запуск программы WS_FTP
Получив все необходимые файлы архивов, прочтите их описание, которое должно находиться в текстовых файлах. Затем создайте на своем диске каталог, например с именем WS_FTP , и скопируйте в него все файлы из архива wsftp32a.zip (это самая последняя бета-версия программы FTP_32 на момент написания данной книги).Затем создайте на поверхности рабочего стола или в любой выбранной вами папке теневую пиктограмму, соответствующую файлу ws_ftp32a.exe.
Для запуска соединитесь с сервером поставщика услуг Internet и сделайте двойной щелчок левой клавишей мыши по созданной пиктограмме. Вы увидите главное окно программы WS_FTP (рис. 3.8).
Рис. 3.8. Главное окно программы WS_FTP
Сразу после запуска на переднем плане появится диалоговая панель Session Profile, с помощью которой можно выбрать сервер FTP для подключения. В дальнейшем вы будете вызывать на экран эту диалоговую панель, нажимая кнопку Connect, расположенную в левом нижнем углу главного окна программы WS_FTP.
Установка режима передачи файлов
Перед началом передачи файлов необходимо установить текстовый или двоичный режим передачи данных, пользуясь командами ascii или binary, не имеющих параметров. Если вы ошибетесь и попытаетесь передать двоичные данные в текстовом режиме, содержимое файла будет искажено. Передача текстовых данных в двоичном режиме также ни к чему хорошему не приведет.Как определить тип данных, хранящихся в файле?
Можно попытаться использовать для этого расширение имени файла или имя файла. Например, файл readme.txt скорее всего текстовый, в то время как файл virus.exe, очевидно, двоичный, так как представляет собой программу.
К сожалению, трудно дать какие-либо более конкретные рекомендации по определению типа данных. Скажем только, что обычно в каждом каталоге хорошо организованного сервера FTP находится описание содержимого в виде текстового файла с характерным именем (readme.txt, index00.txt и так далее).
Загрзука приложения News Express из сети Internet
Приложение New Express вы сможете найти на сервере WWW в Гонконге по адресу http://www.hk.super.net/shware/winsock-l/Windows95/News/index.shtml.Просматривая страницы сервера http://www.hk.super.net, вы найдете и другие интересные приложения, предназначенные для работы с электронными конференциями, например, WINVN .
Запись в конференцию новой статьи
Для того чтобы записать в конференцию новую статью, нажмите кнопку подготовки новой статьи к отправке в конференцию, расположенную расположенную в инструментальной линейке главного окна приложения News Express .В результате на экране появится окно New article, показанное на рис. 3.52.
Рис. 3.52. Окно New article, предназначенное для подготовки новой статьи к отправке в конференцию
В поле Newsgroups уже указано название конференции, с которой вы работаете. Заметим, что на сервере конференций сети GlasNet имеется специальная конференция glas.test, предназначенная для тестирования и обучения приемам работы с конференциями.
При подготовке новой статьи вы должны заполнить поля Subject (тема вашей статьи), Keyword (ключевое слово для поиска) и Summary (краткое описание содержимого статьи).
Далее вы можете набрать текст статьи или вставить содержимое текстового файла, нажав соответствующую кнопку на инструментальной линейке окна New article.
При добавлении к статье двоичного файла вы должны нажать на указанной инструментальной линейке кнопку с изображением скрепки. После этого вы увидите диалоговую панель Attachment, показанную на рис. 3.53.
Рис. 3.53. Диалоговая панель Attachment
Здесь вам следует указать в поле Filename имя добавляемого двоичного файла. Для поиска файла можно воспользоваться кнопкой Browse.
Далее следует выбрать в поле Encoding метод кодировки UUEncode. Обратите также внимание на переключатель Cut size. Если его включить, то двоичный файл будет разрезан на несколько частей. Размер этих частей вы можете установить (в строках текста) в поле, расположенном справа от указанного переключателя.
Внешний вид окна New article, содержащего текст статьи и добавленный к статье двоичный файл, показан на рис. 3.54.
Рис. 3.54. К тексту статьи был добавлен двоичный файл
Запуск навигатора
Работать с навигатором Microsoft Internet Explorer достаточно просто.Установив соединение с сервером поставщика услуг Internet, сделайте двойной щелчок левой клавишей мыши по пиктограмме The Internet с изображением земного шара. Эта пиктограмма расположена на поверхности рабочего стола Microsoft Windows 95. Через некоторое время на экране появится главное окно навигатора Microsoft Internet Explorer, показанное на рис. 3.17.
Рис. 3.17. Главное окно навигатора Microsoft Internet Explorer, в котором отображается главноая страница сервера WWW АО "ДиалогНаука"
Сразу после установки навигатор автоматически попытается подключиться к сранице сети Microsoft Network. Эта страница отмечена в параметрах настройки навигатора как домашняя (Home Page). В последствии вы можете изменить домашнюю страницу, если вы предпочитаете начинать "плавание" по сети серверов WWW с другого места.
В правом верхнем углу окна навигатора Microsoft Internet Explorer вы видите изображение флага - логотипа операционной системы Microsoft Windows. Если флаг трепещет "на ветру", это означает что в настоящий момент выполняется загрузка страницы из сети (точнее говоря, из сервера WWW , с которым установлено соединение) в память вашего компьютера. Подождите, пока флаг не станет неподвижным - это означает, что загрузка страницы завершена.
| В любой момент вы можете прекратить загрузку текущей страницы, сделав двойной щелчок левой клавишей мыши по изображению флага или по кнопке с изображением страницы, не загруженной до конца. |
Запуск приложения и настройка параметров
Перед запуском приложения News Express установите соединение с сервером поставщика услуг Internet и сделайте двойной щелчок левой клавишей мыши по пиктограмме приложения.На экране появится главное окно прилжоения, показанное на рис. 3.47.
Рис. 3.47. Главное окно приложения News Express
В блокноте Newsgroups отображается список конференций (страницы Subscribed, All, New) или список локальных папок (страница Folder). На странице All отображается полный список конференций.
Если вы постоянно работаете с некоторыми из них, имеет смысл "оформить подписку". Это можно сделать с помощью строки Subscribe из меню Group или нажав кнопку подписки в инструментальной линейке (описание этих кнопок мы приведем ниже).
Если вы подписались на конференцию при помощи приложения News Express , это не означает, что вам будут приходить по электронной почте все новые статьи, появившиеся в конференции. Просто имя такой конференции появится на странице Subscribed
блокнота Newsgroups. Вы будете получать при подключении к серверу конференций только заголовки новых статей, да и то только после того, как сделаете двойной щелчок левой клавишей мыши по названию конференции.
Для отображения списка статей приложение News Express создает отдельное окно. На рис. 3.47 это окно называется usenet.comp.binaries.psion, так как для работы была выбрана именно эта конференция.
Аналогично, если сделать двойной щелчок левой клавишей мыши по заголовку статьи, внутри главного окна приложения News Express появится еще одно окно, в котором будет отображаться содержимое статьи.
Просматривая двоичные конференции, обратите внимание на то, что слева от заголовка статьи располагается маленькая пиктограмма, по которой можно судить о содержимом этой статьи. Приведем список таких пиктограмм.
| Пиктограмма | Описание |
| Обычная статья, в которой находится текст или двоичные данные, закодированные программой UUENCODE | |
| Статья, разделенная на несколько частей, которые можно загружать все сразу или по отдельности. | |
| Аналогично предыдущей пиктограмме, однако архив пока еще не полный. Вы должны подождать, пока в конференцию не будут загружены остальные части этой статьи | |
| Этой пиктограммой отмечается статья, которая загружается на ваш локальный диск в настоящий момент |
При загрузке в двоичные конференции больших по объему файлов их обычно разбивают на несколько частей. При этом в случае разрыва соединения вам не придется загружать весь файл заново, что может иметь значение, если у вас низкоскоростной модем или телефонная линия плохого качества.
Если сделать щелчок левой клавишей мыши по пиктограмме статьи, разделенной на несколько частей, вы увидите список содержимого такого архива с указанием размера каждой части.
Для загрузки всех частей одновременно сделайте двойной щелчок левой клавишей мыши по указанной пиктограмме. В том случае, если вы решили загружать статью по частям, раскройте архив щелчком мыши и загружайте его отдельные части как самостоятельные статьи.
Одно из достоинств приложения News Express заключается в том, что вы можете легко сортировать список статей по дате, заголовку, имени автора или теме простым щелчком левой клавишей мыши по соответствующему заголовку окна просмотра названий статей. Аналогично можно отсортировать список конференций в окне Newsgroups.
В верхней части главного окна приложения News Express находится инструментальная линейка с кнопками, предназначенными для выполнения наиболее нужных операций.
Ниже мы привели краткое описание указанных кнопок.
| Кнопка | Описание |
| Остановка процесса передачи данных | |
| Удаление | |
| Настройка параметров для выделенного объекта (папки, статьи, конференции и т. д) | |
| Подписка на конференцию | |
| Отмена подписки | |
| Прерывание работы с конференцией | |
| Сохранение статьи на диске | |
| Печать статьи | |
| Раскодировка двоичного файла, опубликованного в конференции | |
| Подготовка новой статьи к отправке в конференцию | |
| Подготовка ответа на статью для записи в конференцию | |
| Отправка электронного письма | |
| Подготовка к отправке ответа на сообщение в виде письма | |
| Запись статьи в архив | |
| Отправка статьи или сообщения | |
| Поиск | |
| Поиск на удаленном узле | |
| Получение справочной информации |
Если статья содержит закодированные двоичные данные, в окне просмотра статьи отображается название соответствующего двоичного файла, как это показано на рис. 3.48.
Рис. 3.48. Статья, в которой закодированы двоичные данные
Вы можете сохранить такой файл как обычный текстовый и раскодировать его позже при помощи программы UUDECODE , однако проще это сделать, нажав кнопку раскодирования двоичного файла, которая находится в инструментальной линейке главного окна приложения News Express .
Заметим, что для просмотра статей создается только одно окно. Таким образом, вы можете одновременно загружать и просматривать только одну статью.
В окне просмотра статьи имеется своя инструментальная линейка. Описание кнопок, расположенных в этой линейке, мы привели ниже.
| Кнопка | Описание |
| Просмотр предыдущей статьи в списке статей конференции | |
| Просмотр следующей статьи в списке статей конференции | |
| Просмотр следующей непрочитанной статьи | |
| Переход назад к только что прочитанной статье | |
| Переход вперед после использования предыдущей кнопки | |
| Просмотр статьи в текстовом формате | |
| Включение режима свертки слов | |
| Переключение шрифта в окне просмотра. Вы можете выбирать для просмотра статьи либо пропорциональный шрифт, либо шрифт с фиксированной шириной букв |
Практическое введение в Internet, E-Mail, FTP, WWW и HTML
Другие возможности языка HTML
Язык HTML непрерывно развивается, поэтому к настоящему моменту нет никакого стандартного описания для этого языка. Как вы могли заметить, фирмы Microsoft и Netscape, доминирующие на рынках приложений для Internet, вводят свои собственные расширения языка, которые могут использоваться навигаторами конкурента, а могут и не использоваться.В настоящий момент фирма Netscape активно внедряет одну из реализаций языка JAVA, который позволяет организовать интерпертацию программ, полученных из сети, на локальном компьютере пользователя. Рассмотрение этого языка выходит за рамки нашей книги, однако отметим, что с помощью специальных команд вы можете включать такие программы в документ HTML .
Подход Microsoft заключается в использовании технологии OLE, позволяющей запускать приложения OLE, полученные из сети. Для вставки объектов OLE в документы HTML фирма Microsoft используются собственные средства.
Все шире в сети Internet распространяется наиболее современная технология виртуальной реальности. Используя специальный язык виртуальной реальности VRML и специальные инструментальные средства, вы можете создавать, например, виртуальные здания, состоящие из многих этажей и комнат. Файл VRML можно включить в текст документа HTML , после чего пользователи получат возможность ходить по вашему виртуальному зданию, как в популярной игре DOOM, созданной фирмой Id Software.
Одтметим однако, что для просмотра файлов виртуальной реальности вы должны установить к своему навигатору специальные расширения. Эти расширения можно получить на серверах Microsoft (для навигатора Microsoft Internet Explorer ) и Netscape (для навигатора Netscape Navigator).
Еще одна возможность, не описанная в нашей книге из-за отсутствия места, заключается в том, что вы можете размещать на страницах WWW средствами языка HTML так называемые формы. Формы похожи на диалоговые панели Windows и могут включать в себя кнопки, поля ввода, списки и т. д. В зависимости от того, как пользователь заполнит такую форму или в зависимости от установки переключателей может осуществляться переход к различным страницам сервера WWW или выполяться другие действия.
Формы очень удобны, например, для организации электронной торговли, когда покупатель может выбрать на странице WWW нужный ему товар, и, указав номер своей кредитной карточки, купить его, не вставая с места.
Главное окно Microsoft Internet Assistant
Создавая новый документ HTML , сделайте щелчок правой кнопкой мыши по поверхности рабочего стола или внутри папки и выберите из контекстного меню строку New. Затем из появившегося меню второго уровня выберите строку Internet Document (HTML). Затем укажите имя для нового документа.Для редактирования документа сделайте щелчок правой клавишей мыши по созданной пиктограмме и выберите из контекстного меню строку edit. Запустится текстовый процессор Microsoft Word for Windows, однако его инструментальные линейки будут иметь несколько непривычный вид (рис. 4.8).
Рис. 4.8. Редактирование документа при помощи расширения Microsoft Internet Assistant for Microsoft Word
Изменится и меню текстового процессора.
Приведем описание кнопок, которые появятся в инструментальных линейках при редактировании докумета HTML .
| Кнопка | Описание | |
| Кнопка предназначена для включения или выключения режима отображения информации HTML в полях текстового процессора Word for Windows | ||
| Просмотр документа HTML с использованием текущего навигатора WWW | ||
| Переключение редактора в режим просмотра страниц WWW (в этом режиме можно просматривать как создаваемую страницу, так и любую другую, доступную через Internet) | ||
| Возврат к просмотру предыдущей страницы из числа просмотренных ранее | ||
| Переход к просмотру следующей страницы из числа просмотренный ранее | ||
| Выбор стиля оформления для текущего параграфа | ||
| Увеличение размера шрифта | ||
| Уменьшение размера шрифта | ||
| Выделение жирным шрифтом | ||
| Выделение наклоном | ||
| Выделение подчеркиванием | ||
| Выравнивание параграфа по левой границе окна просмотра | ||
| Центрирование параграфа в окне просмотра | ||
| Создание нумерованного списка | ||
| Создание ненумерованного списка | ||
| Уменьшение отступа | ||
| Увеличение отступа | ||
| Вставка горизонтальной разделительной линии | ||
| Вставка графического изображения или видеофрагмента | ||
| Вставка закладки | ||
| Вставка гипертекстовой ссылки | ||
| Ввод заголовка документа |
Если нажать кнопку переключения редактора в режим просмотра страниц WWW, расположенную слева во второй сверху инструментальной линейке, вы сможете посмотреть, как будет выглядеть ваша страница при просмотре. Кроме того, вы сможете загрузить из сети Internet любую другую страницу и, например, скопировать из нее гипертекстовую ссылку, для того чтобы затем вставить ее в свой документ.
На рис. 4. 9 показан внешний вид окна текстового процессора с расширением Microsoft Internet Assistant for Microsoft Word в режиме просмотра страниц WWW.
Рис. 4.9. Главное окно текстового процессора Microsoft Word в режиме просмотра страниц WWW
Ниже мы привели назначение новых кнопок, которые появляются в инструментальных линейках текстового процессора при его переключении в режим просмотра страниц WWW.
| Кнопка | Описание |
| Переключение в режим редактирования документа HTML | |
| Переход к странице, заданной своим адресом URL | |
| Просмотр списка посещенных страниц с возможностью копирования гипертекстовых ссылок на них | |
| Просмотр списка наиболее интересных страниц | |
| Добавление текущей страницы в список наиболее интересных страниц | |
| Переход к просмотру домашней страницы | |
| Останов передачи данных | |
| Повторная загрузка страницы | |
| Копирование гипертекстовой ссылки | |
| Поиск текстовой строки в документе |
Использование стилей
Продолжая аналогию с оформлением обычного текста при помощи текстовых процессоров, мы расскажем вам о так называемом стилевом оформлении параграфов.Что это такое?
Стилевым оформлением параграфа или стилем параграфа мы будем называть совокупность параметров оформления, определяющих внешний вид и расположение параграфа. Это такие параметры, как тип и размер шрифта, отступы от левого и правого края документа, тип выравнивания текста в параграфе, межстрочное расстояние и т. д.
Каждому стилю можно присвоить свое имя. В процессе оформления документа вы можете указать, что данный параграф оформлен, например, при помощи стиля Heading и потому будет иметь внешний вид заголовка.
Количество стилей, используемых для оформления даже сложных документов и книг, не очень велико. Подготовив один раз набор стилей, вы в дальнейшем сможете оформлять документы быстро и качественно.
В языке HTML определены шесть стилей для оформления заголовков различного уровня. Для того чтобы оформить параграф с использованием этих стилей, вы должны вместо команды использовать команды
, , …, . Перечисленные команды используются в паре с командами
, , …, . . Перечисленные команды используются в паре с командами
Ниже мы привели текст страницы WWW, на которой демонстрируется использование всех шести стилей заголовков и обычного текста:
Heading 1
Normal textHeading 2
Heading 3
Heading 4
Heading 5
Heading 6
Внешний вид этой страницы при ее просмотре с помощью навигатора Microsoft Internet Explorer показан на рис. 4.2.
Рис. 4.2. Использование стилей заголовков при оформлении страниц WWW
Строго говоря, навигатор вправе сам выбирать параметры для отображения параграфов, так как в документе задано только имя стиля. Однако стиль более высокого уровня отображается более крупным шрифтом и это будет справедливо в любом случае.
Изучая исходный текст документа, обратите внимание, что тексты заголовков первого, второго и третьего уровня отображаются с использованием разных цветов. Указанные в примере цвета были установлены редактором Microsoft Internet Assistant for Microsoft Word. Если вы подготавливаете документ простым текстовым редактором, то можете либо не указывать параметр COLOR, либо задать другие цвета по своему усмотрению.
Редактор Microsoft Internet Assistant устанавливается как расширение для текстового процессора Microsoft Word for Windows, поэтому стилевое оформление вы можете задавать с использованием списка стилей, расположенным в левой части соответствующей инструмнтальной линейки текстового процессора. Это очень удобно, особенно если вы привыкли работать с приложением Microsoft Word for Windows.
На рис. 4.3 и 4.4 мы показали соновные стили, которые можно использовать при работе в редакторе Microsoft Internet Assistant for Microsoft Word.
Рис. 4.3. Использование стилей при создании документа в среде Microsoft Internet Assistant for Microsoft Word
Рис. 4.4. Использование стилей при создании документа в среде Microsoft Internet Assistant for Microsoft Word (продолжение)
Исходный текст, соответствующий странице, которая изображена на этих рисунках, приведен ниже:
Blockquote
Default
- Definition Compact
- Definition List
- Definition Term
PRE WIDE Perforatted
Sample
CODE - Definition
Address
Variable
В этом тексте встречаются как уже известные вам команды логического оформления символов, так новые для вас команды стилевого оформления. Ниже мы приведем краткое описание новых команд.
| Команда | Описание |
, |
Это стилевое оформление используется для цитирования |
|
Этот стиль используется для формирования списка терминов и их описания |
Используется вместе с командами
|
|
| Используется для формирования списка | |
| , | Текст, оформленный с использованием этой команды, будет отображаться на экране шрифтом с фиксированной шириной символов |
| , | Этот стиль используется для оформления впервые упоминающегося термина |
| , | Этот стиль применяется для оформления авторской подписи под страницей, адресов и т. п. |
Рис. 4.5. Список стилей оформления параграфов, доступных в редакторе Netscape Navigator Gold версии 2.0
Язык HTML
Хотя для вас это может оказаться неожиданностью, но страницы WWW хранятся в виде самых обычных текстовых файлов. Все графические вставки, видео и звуковые данные записаны в отдельные файлы с использованием соответствующего формата (например, GIF или JPEG ). При этом страницы WWW содержат ссылки на эти файлы, но не двоичные данные.Все многообразие стилевого и шрифтового оформления страниц WWW достигается с помощью управляющих команд, которые вставляются в соответствующие места текста. Именно поэтому для подготовки страниц WWW можно воспользоваться любым текстовым редактором (хотя специальные средства разработки страниц намного удобнее).
Набор управляющих команд и правил их использования определяется языком разметки гипертекста HTML (Hypertext Markup Language), который произошел от ранее разработанного мощного языка разметки текста SGML (Standard Generalized Markup Language ). Описание основных возможностей языка HTML является предметом данного раздела нашей книги.
Почему для представления страниц WWW, содержащих мультимедийную информацию, выбран именно текстовый формат?
Причина заключается в том, что такой способ представления страниц гарантирует переносимость на любую платформу. Эта возможность очень важна, так как сеть Internet объединяет компьютеры, имеющих самые разные архитектуры. А текст всегда остается текстом, записан ли он в файловой системе NTFS в операционной системе Microsoft Windows NT или лежит в наборах данных операционной системы IBM MVS на "большом" компьютере.
Развитие сети Internet и технологии WWW в настоящее время находится на стадии взрыва, поэтому каждый месяц появляются все новые средства разработки приложений Internet вообще и страниц WWW
в частности. Помимо этого, постоянно развивается язык разметки страниц HTML . Если вы подключены к сети Internet и уже научились ориентироваться среди бесчисленного количества серверов WWW, для вас не составит труда получить самую последнюю информацию по данным вопросам.
Современные средства создания страниц WWW работают в режиме WYSIWYG. При этом вы редактируете документ и сразу видите, как он будет выглядеть при его размещении на сервере WWW. Используя такие средства, вы будете избавлены от необходимости глубокого изучения языка HTML . Однако в нашей книге мы все же приведем основные сведения об этом языке, так как они могут вам пригодиться либо для ручной "доводки" страниц, либо в том случае, если по какой-либо причине вы не сможете использовать высокоуровневые инструментальные средства разработки страниц.
Назначение стилей параграфам документа
Для назначения стиля параграфам документа проще всего нажать соответствующую кнопку на инструментальной панели текстового процессора.Если вам необходимо переопределить параметры стиля, можно воспользоваться обычной методикой, принятой в текстовом процессоре Microsoft Word for Windows. А именно, выберите из меню Format строку Style и при помощи появившейся на экране диалоговой панели укажите новые параметры стиля, сохранив их, если это нужно, в файле шаблона.
Оформление фона документа
Для оформления фона документа выберите из меню Format строку Background and Links. После этого на экране появится одноименная диалоговая панель, показанная на рис. 4.10.Рис. 4.10. Диалоговая панель Background and Links
В поле Image вы должны ввести путь к файлу изображения, которое будет использовано для оформления фона страницы. Этот файл можно найти на диске с помощью диалоговой панели, которая появится на экране, если нажать кнопку Browse.
Если нужно сделать так, чтобы фоновое изображение оставалось на месте в процессе просмотра страницы, включите переключатель Do not scroll image.
С помощью списка Color вы можете выбрать цвет для фона страницы (только в том случае, если вы не используете для оформления фона графическое изображение).
В списке Body Text вы можете выбрать цвет текста. Для выбора цвета гипертекстовый связей, указывающих на еще не посещенные и уже посещенные страницы, воспользуйтесь, соответственно, списками Hyperlink to pages not yet viewed и Hyperlink to pages already viewed.
Если выбрать из меню Format строку Background Sound, в появившейся на экране одноименной диалоговой панели (рис. 4.11) можно указать звуковой файл, который будет проигрываться после загрузки стрницы.
Рис. 4.11. Диалоговая панель Background Sound
В поле Sound вы должны указать путь к файлу в формате WAV или MIDI . Последний формат удобен тем, что файлы в этом формате обычно занимают немного места, а значит будут быстро загружены из сети.
В поле Playback loop вы можете указать количество раз, которое будет проигрваться файл (до 999).
Обратите также внимание на предупреждение в ниженй части диалоговой панели о том, что для успешного воспроизведения фонового звукового сопровождения навигатор должен уметь распознавать и обрабатывать команду
Оформление фона страницы
Очень часто при оформлении фона страниц WWW используют небольшое графическое изображение, которое будет заполнять собой фон страницы.Для того чтобы указать путь к файлу, содержащему фон страницы, вы должны добавить к команде параметр BACKGROUND, как это показано ниже:
Для команды вы можете указать и другие параметры, некоторые из них приведены ниже:
| Параметр | Описание | |
| BGCOLOR | С помощью этого параметра вы можете задать цвет фона страницы в следующем виде: где RR, GG и BB определяют, соответственно, красную, зеленую и голубую компоненту цвета. Все значения необходимо указывать в шестнадцатеричном формате | |
| TEXT | Параметр TEXT используется для управления цветом текста в документе. Значение этого параметра уазывается таким же образом, как и значение параметра BGCOLOR | |
| LINK | Управление цветом текста гипертекстовых ссылок | |
| VLINK | Управление цветом текста гипертекстовых ссылок, соответствующих ранее просмотренным страницам | |
| ALINK | Управление цветом текста активных гипертекстовых ссылок | |
| BGPROPERTIES | При свертке содержимого окна просмотра документа HTML графическое изображение, использованное для оформления фона, будет оставаться на месте, если установить значение этого параметра следующим образом: BGPROPERTIES=FIXEDЭтот параметр распознается только навигатором Microsoft Internet Explorer |
Оформление параграфов
Простейшие текстовые редакторы, такие как Notepad, Norton Editor или Лексикон для DOS, предполагают, что текст состоит из отдельных строк, каждая из которых завершается специальным символом - символом конца строки.Такой подход вызывает много неудобств при форматировании документа, так как для установки расстояния между параграфами текста нужно вставлять пустые строки, а отступ первой строки и выравнивание столбцов в таблицах приходится делать с помощью символов пробела и табуляции.
Современные текстовые процессоры, например, Microsoft Word for Windows, пользуются символом конца строки по-другому. Вместо того чтобы вставлять этот символ в конец каждой строки текста, они отмечают указанным символом конец параграфа.
Таким образом, в текстовых процессорах используется понятие параграфа как текста, состоящего, возможно, из нескольких строк, в конце которого расположен специальный символ.
Удобство такого подхода заключается в том, что при редактировании документа вы можете легко изменять такие параметры параграфа, как отступы от левой и правой границы листа, отступ для первой строки, расстояние между строками и между параграфами, не заботясь о том, как при этом будут располагаться слова, из которых состоит параграф. При изменении параметров параграфа текстовый процессор будет автоматически выполнять перенос слов на другую строку и вам не придется делать это вручную.
При создании страниц WWW вы также работаете не с отдельными строками текста, а с параграфами. При этом в процессе просмотра, когда пользователь изменит размер окна навигатора, последний выполнит автоматический перенос слов и параграф снова займет всю полезную ширину окна.
Такое пространное введение в параграфы мы сделали для тех, кто никогда не прибегал к услугам текстовых процессоров и потому не знаком с этим понятием. К этой категории можно отнести многих программистов, так как текстовые редакторы, встроенные даже в мощные средства разработки программного обеспечения, ничего не знают о параграфах, трактуя исходный текст программ просто как набор отдельных строк.
Оформление символов
Любой современный (и даже не очень современный) текстовый процессор предоставляет возможность шрифтового оформления символов. Как правило, вы можете выбрать для символов любой шрифт, установленный в системе, выбрать высоту символов, выделить символы жирным шрифтом, наклоном или подчеркиванием.Соответствующие средства встроены и в язык HTML .
Все команды форматирования символов, определенные в языке HTML , можно разделить на команды логического форматирования и команды физического форматирования.
Команды логического форматирования определяют не конкретный способ оформления, а указывают навигатору тип информации, подлежащей выделению. Способ выделения выбирается навигатором.
Ниже мы привели список команд логического форматирования символов с кратким описанием.
| Команда | Описание |
| , | Цитата |
| , | Текст, имеющий особое значение |
| , | Сильное выделение текста |
| , | Текст, введенный пользователем |
, |
Листинг программы |
| , | Последовательность литералов |
| , | Имя переменной |
| Комментарий |
По возможности следует использовать логическое форматирование символов, так как такое форматирование позволяет пользователю самостоятельно выбирать способ оформления указанных логических составляющих текста в соответствии со своим вкусом.
Вот пример фрагмента текста, оформленного с выделением:
В этой команде переменной
TimeCnt присваивается значение, равное нулю.Команды физического форматирования указывают явным образом, как следует оформить символы текста:
| Команда | Описание |
| , | Выделение жирным шрифтом |
| , | Выделение наклоном |
| , | Оформление шрифтом с фиксированной шириной букв |
| , | Выделение подчеркиванием |
| Выделение перечеркиванием | |
| , | Текст с крупным размером букв |
| , | Текст с малым размером букв |
| Мигающий текст | |
| , | Подстрочный индекс |
| , | Надстрочный индекс |
Еще одна возможность оформления символов, удобная, например, для размещения в документе листингов программ, связана с использованием команд
и.
Эти команды называются командами включения предварительно отформатированного текста.
Под форматированием в данном случае понимается подготовка текста простым текстовым редактором с использованием шрифта с фиксированной шириной букв. В этом смысле листинги программ являются отформатированными. Вы можете добавить их в документ следующим образом:
int main(int argc, char *argv[]) { printf("Hello, world!"); } Параметр WIDTH указывает максимальное количество символов в одной строке. По умолчанию значение этого параметра равно 80.
Еще одна команда, предназначенная для форматирования символов, это команда , с помощью которой можно задать параметры шрифта.
Команда с параметром SIZE определяет размер шрифта. Фирмы Microsoft и Netscape трактуют эту команду по-разному, что может привести к неприятным последствиям.
В трактовке Microsoft команда определяет абсолютный размер шрифта в пикселах следующим образом:
| Размер букв в пикселах | Значение параметра x в команде |
| 9 | 1 |
| 10 | 2 |
| 12 | 3 |
| 14 | 4 |
| 18 | 5 |
| 24 | 6 |
| 36 | 7 |
Хотя оператор допускает указание относительного изменения размера шрифта (для чего перед числом x достаточно поставить знак плюс или минус), редактор Microsoft Internet Assistant for Microsoft Word пользуется только абсолютными значениями.
Редактор страниц навигатора Netscape Navigator Gold напротив, указывает относительные значения изменения высоты шрифта (относительно размера 3, принятого по умолчанию).
Другой параметр оператора - параметр COLOR - позволяет задать цвет символов. Формат этого параметра приведен ниже:
Здесь вместо RR, GG и BB следует указать шестнадцатиричные значения для, соответственно, красной, зеленой и голубой компонент цвета.
Ниже для примера мы привели фрагмент документа, оформленного с помощью редактора Microsoft Internet Assistant for Microsoft Word:
Text
Здесь текстовая строка Text отображается красным цветом, причем размер шрифта равен 6 и указан в виде абсолютного значения.
Аналогичное оформление, полученное с помощью редактора навигатора Netscape Navigator Gold , показано ниже:
Text 2
Обратите внимание, что размер символов указан относительно текущего.
Способ указания размера символов, использованный фирмой Netscape, имеет на наш взгляд то преимущество, что пользователь может изменять текущий размер шрифта, при этом пропорции высоты символов для всех строк останутся неизменными.
Если вам нужно изменить базовое значение высоты букв, это можно сделать командой
К сожалению, на момент создания этой книги команду
Переход к следующей строке
Бывают случаи, когда вам необходимо сделать переход к другой строке, оставаясь при этом в рамках текущего параграфа. Такая возможность имеется во всех текстовых процессорах.При подготовке документа HTML вы можете сделать принудительный переход к другой строке с помощью команды
, например:
Простейшие текстовые редакторы, такие как:
Notepad,
Norton Editor,
Лексикон для DOS,
предполагают, что текст состоит из отдельных строк, каждая из которых завершается специальным символом - символом конца строки.
При отображении этот текст будет выглядеть следующим образом:
Простейшие текстовые редакторы, такие как: Notepad, Norton Editor, Лексикон для DOS, предполагают, что текст состоит из отдельных строк, каждая из которых завершается специальным символом - символом конца строки.
В данном случае мы использовали переход к следующей строке для организации списка, однако, как мы увидим дальше, для решения этой задачи в языке HTML имеются более удобные средства.
Получение и установка Microsoft Internet Assistant
Вы можете получить этот редактор бесплатно с сервера www.microsoft.com в виде файла с именем wrdia20z.exe. Для установки вы должны просто запустить указанный файл и следовать инструкциям, появляющимся на экране. Разумеется, перед установкой редактора Microsoft Internet Assistant необходимо установить текстовый процессор Microsoft Word for Windows. Мы рекомендуем использовать версию 7.0 этого процессора, специально разработанную для операционных систем Microsoft Windows 95 и Microsoft Windows NT.Представление табличных данных
Рано или поздно вам придется размещать на своей странице WWW табличные данные. Самый простой, но далеко не самый хороший способ создания таблиц известен со времен текстового редактора Лексикон - вы оформляете таблицу шрифтом с фиксированной шириной букв, а для выравнивания колонок используете символы пробела или табуляции.Разумеется, вы можете поступить аналогичным образом и при размещении таблиц на странице WWW, однако лучше сделать это средствами языка HTML .
Воспользовавшись редактором Microsoft Internet Assistant for Microsoft Word одним легким движением мыши мы создали таблицу, состоящую из трех строк и трех столбцов, а затем с помощью клавиатуры заполнили ячейки этой таблицы, как это показано на рис. 4.6.
Рис. 4.6. Таблица, подготовленная с помощью редактора Microsoft Internet Assistant for Microsoft Word
Ниже мы привели текст полученного при этом документа:
| 000 | 001 | 002 |
| 010 | 011 | 012 |
| 100 | 101 | 102 |
Из этого текста хорошо видно, что таблица определена между командами
есть параметр - ширина столбца.
При необходимости вы можете создать таблицу с видимой рамкой, разделяющей строки и столбцы. Для этого в команде
| Пример | Описание |
| HREF="http://..." | Ссылка на документ HTML , расположенный на сервере WWW |
| HREF="ftp://..." | Ссылка на сервер FTP |
| HREF="mailto:..." | Ссылка на электронный почтовый адрес. Когда пользователь выбирает такую ссылку, на экране появляется окно почтовой программы, встроенной в навигатор. С помощью этого окна пользователь может послать электронной письмо по адресу, указанному в ссылке |
| HREF="news:..." | Ссылка на электронную конференцию |
| HREF="nntp://..." | Ссылка на сервер электронной конференции |
| HREF="telnet://..." | Активизация сеанса удаленного доступа к узлу сети Internet с использованием протокола TELNET |
| HREF="gopher://..." | Ссылка на сервер Gopher |
Структура документа HTML
В своем наиболее общем виде структура документа HTML выглядит следующим образом:. . . Содержимое документа . . .
Команда должна быть первой в документе. Она всегда используется в паре с командой , завершающей документ. Между этими двумя командами располагается текст страницы и другие команды.
Для примера приведем содержимое простейшего документа, содержащего только одно слово Text. Этот весьма несложный документ был подготовлен с использованием расширения текстового процессора Microsoft Word for Windows, которое называется Microsoft Internet Assistant for Microsoft Word:
Text
Как видите, весь документ ограничивается командами и , между которыми находятся другие команды.
Команда используется всегда в паре с командой и предназначена для оформления заголовка документа.
В данном случае документ называется Untitled, причем текст заголовка находится между командами
Команда предназначена для вставки в документ дополнительной информации о самом документе. В данном случае с помощью этой команды в документ была добавлена информация о программе, с помощью которой был создан документ.
Пара команд и ограничивают текст документа, то есть текст, который должен быть расположен на странице:
Text
Команда начинает новый параграф.
Далее следует команда , которая работет в паре с командой . Как нетрудно догадаться из названия, эта команда в данном случае предназначена для определения шрифта, который следует использовать при отображении текстовой строки Text, заключенной между командами и . Дополнительно команда позволяет указать другие атрибуты шрифтового форматирования, например, высоту букв.
Учтите однако, что команда имеет рекомендательный характер, так как пользователь, например, может установить собственный набор шрифтов, в котором отсутствует шрифт Times New Roman или другой, указанной в команде .
На рис. 4.1 мы показали, как выглядит созданная нами страница в окне навигатора Microsoft Internet Explorer .
Рис. 4.1. Внешний вид созданной простейшей страницы
Текст документа HTML , подготовленного при помощи другого средства редактирования страниц WWW, может несколько отличаться от текста, созданного с помощью расширения Microsoft Internet Assistant for Microsoft Word. В частности, там могут использоваться другие команды.
Вот, например, как выглядит та же самая страница, содержащая одно только слово Text, но подготовленная с использованием навигатора Netscape Navigator Gold :
Text
Нетрудно заметить, что заголовок документа содержит сведения об авторе. Дополнительно к текстовой строке Text был добавлен символ неразбивающего пробела, закодированный как " ". Кроме того, параграф был закрыт командой
, которая не используется расширением Microsoft Internet Assistant for Microsoft Word.
Данный простейший пример показывает, что в настоящий момент еще нет единых стандартов на средства разработки страниц WWW. Обнаруженные только что различия между текстами, созданными при помощи разных средств для казалось бы одинаковых документов - это капля в море. Изучая конкретные реализации языка HTML в высокоуровневых средствах разработки страниц WWW вы найдете немало гораздо более серьезных разногласий.
Причина заключается в том, что на рынке средств разработки приложений для Internet доминируют две фирмы. Это Microsoft и Netscape.
Каждая из них проводит свою политику освоения этого весьма привлекательного сектора рынка. А нам, вероятно, остается либо ждать всеобщей стандартизации приложений для Internet (когда то она еще произойдет!), либо становиться приверженцем какой-нибудь одной линии.
Вставка гипертекстовой ссылки
Вставка гипертекстовой ссылки выполняется очень просто - достаточно установить курсор в нужное место текста и нажать кнопку вставки ссылки. После этого на экране появится диалоговая панель Hyperlink, показанная на рис. 4.16.Рис. 4.16. Диалоговая панель Hyperlink
В поле Text to Display вы должны написать текст, который увидит пользователь на месте гипертекстовой ссылки. По этому тексту он будет делать щелчок левой клавишей мыши, чтобы сделать гипертекстовый переход.
В поле File or URL вы должны определить имя файла или адрес URL, по которому будет выполняться переход с помощью данной гипертекстовой ссылки. Кнопка Browse поможет вам в этом.
Если нужно создать ссылку на закладку, определенную на этой же странице, вы должны выбрать имя закладки из списка Bookmark Location in File.
Кнопка Unlink предназначена для удаления ссылки. После удаления в документе остается текст, введенный ранее в поле Text to Display, однако теперь этот текст уже не будет связан со ссылкой.
Вставка гипертекстовых ссылок
Гипертекстовые ссылки обеспечивают возможность перехода от просмотра одной страницы WWW к просмотру другой страницы или другого места той же самой страницы. С помощью гипертекстовых ссылок можно выполнять и другие функции, например, отправить электронное письмо по адресу, указанному в виде ссылки.Ссылка создается с помощью пары команд и . Между этими командами располагается текст ссылки, который отображается в окне просмотра навигатора и выделяется подчеркиванием, а также изменением цвета. Сделав щелчок мышью по такому тексту, пользователь перемещается в место, указанное в параметре HREF команды .
Ниже показан пример гипертекстовой ссылки на файл Seminar.HTM, расположенной на локальном диске C: в каталоге My Documents:
Seminar
Внешне эта ссылка выглядит для пользователя как строка Seminar, выделенная цветом и подчеркиванием.
При необходимости вы можете использовать для ссылки графическое изображение, вставленное между командами и с помощью команды
В качестве значения параметра HREF вы можете указать адрес URL страницы, включая имя сервера WWW, например:
Seminar
Этот способ определения ссылок очень распространен.
Выше были приведены примеры абсолютной адресации документов в ссылках с полным указанием диска, каталога или полного имени сервера WWW. Абсолютная адресация лучше всего подходит для ссылки на документы, расположенные на других серверах WWW, когда, разумеется, вы знаете их точный адрес.
Если же вы подготовили несколько страниц и желаете разместить их в одном каталоге сервера WWW, да еще так, чтобы этот каталог можно было перемещать в дереве каталогов сервера, лучше пользоваться относительной ссылкой. В этом случае имя сервера и каталога указывать не нужно.
Если документ HTML имеет большой размер, вы можете вставить в него несколько закладок и организовать ссылки на эти закладки при помощи оператора .
Для того чтобы вставить в документ закладку, вы должны воспользоваться парой команд и , указав в команде параметр NAME - имя закладки:
End
Ссылка на эту закладку будет выглядеть следующим образом:
End of page
Редакторы Microsoft Internet Assistant for Microsoft Word и редактор навигатора Netscape Navigator Gold имеют удобные средства для работы с закладками и гипертекстовыми ссылками.
Вставка графических изображений
Серверы WWW получили такое широкое распространение не в последнюю очередь за счет возможности размещения на страницах WWW графических изображений.Однако как и в любом деле, здесь нельзя перебарщивать. Когда разработчик размещает на странице графическое изображение большого размера, он должен учитывать, что удаленный абонент, подключенный к сети Internet
через низкоскоростной модем, может потратить немало времени на загрузку страницы. Едва ли это ему понравится. Поэтому будет лучше, если вы разместите на странице графическое изображение небольшого размера, и сделаете ссылку, пользуясь которой пользователь при необходимости сможет просмотреть полноформатное изображение.
Однако вернемся к вставке графических изображений.
Для вставки графического изображения в документ HTML вы можете воспользоваться командой

Параметр SRC задает указатель на файл графического изображения, который в данном случае при размещении страницы на диске сервера WWW должен находиться в том же каталоге, где и страница.
Вы можете включать в указатель полный путь к файлу, содержащему графическое изображение, однако такой подход может затруднить перенос файла документа HTML из одного каталога в другой.
Параметр ALT задает текст, который отображается вместо графического изображения, если возможность вывода графики отсутствует или отключена, либо если файл изображения еще не успел загрузиться на локальный диск пользователя. Так как некоторые пользователи могут просматривать вашу страницу WWW в текстовом режиме (например, при помощи программы LYNX ), мы рекомендуем всегда указывать параметр ALT.
Помимо параметров SRC и ALT
вы можете использовать и другие. Например, параметр ALIGN. Этот параметр, который может иметь значения TOP, MIDDLE или BOTTOM, определяет расположение текста, который находится в том же параграфе, что и графическое изображение:
| Параметр | Описание |
| TOP | Если параметр ALIGN имеет значение TOP, текст параграфа выравнивается по верхнему краю графического изображения |
| MIDDLE | Текст центрируется по высоте изображения |
| BOTTOM | Текст параграфа выравнивается по нижнему краю графического изображения |
Фирма Netscape разработала собственные расширения для команды
| Параметр | Описание |
| right | Если указан параметр right, графическое изображение будет выравнено по правой границе окна просмотра, а текст, размещенный в том же параграфе, что и графическое изображение, окажется слева |
| texttop | Параметр texttop аналогичен параметру TOP, за исключением того что выравнивание текста выполняется по наиболее высоким буквам в верхней строке |
| absmiddle | При использовании параметра absmiddle средняя линия текста центруется по вертикали относительно изображения |
| baseline | Параметр baseline предназначен для выравнивания базовой линии текста по нижнему краю изображения |
| absbottom | С помощью параметра absbottom выполняется выравнивание нижней линии текста по нижнему краю изображения |
Из-за недостатка места мы не будем подробно останавливаться на параметрах, позволяющих размещать на странице так называемую сегментированную графику. Это параметры USEMAP и ISMAP.
Сегментированное графическое изображение - это специальным образом подготовленное битовое изображение, в котором при помощи специальных программ определены "чувствительные точки". При этом описание этих точек находится в отдельном файле, размещенном на сервере WWW.
Обычно сегментированную графику используют для создания графических инструментальных линеек с кнопками, с помощью которых пользователь может переходить на те или иные страницы WWW. Однако создавая такие страницы, не забывайте о тех пользователях сети Internet, которые просматривают страницы WWW в текстовом режиме. В этом случае вы должны предусмотреть либо полностью текстовый вариант страницы, либо предоставить альтернативную возможность для доступа к страницам, ссылки на которые организованы в виде графического меню.
Вставка графического изображения
Нажав кнопку вставки графического изображения или видеофрагмента, вы увидите на экране блокнот Picture, показанный на рис. 4.12.Рис. 4.12. Страница Picture блокнота Picture
В поле Image Source вы должны ввести имя файла с графическим изображением. Файл можно найти на диске, нажав кнопку Browse.
Если нажать кнопку Link Path, то в появившейся на экране диалоговой панели можно включить переключатель, указывающий на необходимость использования фиксированного пути к файлу изображения. По умолчанию используется относительный путь, что удобно для перемещения файлов страницы в другой каталог (если возникнет необходимость такого перемещения).
В поле Alternative Text необходимо указать текст, который будет отображаться вместо графического изображения, если режим просмотра графики отключен или недоступен.
Если вы собираетесь вставить в документ видеофрагмент, откройте страницу Video (рис. 4.13).
Рис. 4.13. Страница Video блокнота Picture
Здесь в поле Video Source вы должны указать имя файла AVI, содержащего видеофрагмент. Как мы уже говорили, процедура создания таких файлов была нами описана в 15 томе "Библиотеки системного программиста", который называется "Мультимедиа для Windows".
В списке Start Play вы можете выбрать один из двух возможных режимов проигрывания видеофрагмента. Если выбран режим File
Open (выбран по умолчанию), проигрывание начинается сразу после загрузки файла. Если же выбран режим MouseOver, проигрывание начинается, когда пользователь переместит курсор мыши в область окна, предназначенного для проигрывания видеоизображения.
С помощью органа управления Loop вы можете указать количество раз, которое должно проигрываться изображение, или выбрать режим бесконечного проигрывания.
Если включить переключатель Show Controls, под окном с видеоизображением появятся органы управления, позволяющие управлять процессом проигрывания.
Страница Options блокнота Picture (рис. 4.14) позволяет определить размер окна, в котором будет показано изображение или видеофрагмент, а также выбрать выравнивание текста, расположенного в том же параграфе, что и окно с изображением.
Рис. 4.14. Страница Options блокнота Picture
В полях Height и Width вы можете указать, соответственно, высоту и ширину окна для изображения или видеофрагмента.
Если включить переключатель Display Border, вокруг окна появится рамка. Толщину этой рамки можно задать в поле Border Size.
В списке Alignment with Text можно задать один из нескольких способов выравнивания текста, перечисленных ранее при описании языка HTML .
Что же касается переключателя Image is a sensitive map, то его нужно включить в том случае, если вы размещаете в документе HTML сегментированную графику. Для сегментированного изображения необходимо подготовить файл описания, рассказ о котором выходит за рамки нашей книги.
Вставка произвольного символа
При необходимости вы можете вставить в документ HTML байт с произвольным шестнадцатиричным кодом. Для этого вы должны включить в текст последовательность символов вида X, где XX - шестнадцатеричное число в диапазоне от 0 до FF.Вставка символьного объекта
Символы, которые не входят в таблицу ASCII, могут быть представлены в специальном виде - как символьные объекты (character entities ). К сожалению, редактор Microsoft Internet Assistant for Microsoft Word представляет символы кириллицы именно таким образом, что существенно увеличивает объем документов HTML .Ниже мы привели список символьных объектов. Пользуясь этим списком, вы можете, например, составить программу, которая послужит дополнением для редактора Microsoft Internet Assistant for Microsoft Word и будет выполнять обратную замену символьных объектов на символы кириллицы. Дополнительно такая программа могла бы перекодировать русские документы HTML в коды KOI-8 и другие.
| Имя объекта | Символы кириллицы | Латинские символы | Описание соответствующего латинского символа |
| À | А | А | Прописная A, тупое ударение |
| Á | Б | Б | Прописная A, сильное ударение |
| Â | В | В | Прописная A, диактрическое ударение |
| Ã | Г | Г | Прописная A, тильда |
| Ä | Д | Д | Прописная A, умляут |
| &Аring; | Е | Е | Прописная A, звонкое произношение |
| &Aelig; | Ж | Ж | Прописная AE, дифтонг |
| Ç | З | З | Прописная C, седиль |
| È | И | И | Прописная E, тупое ударение |
| É | Й | Й | Прописная E, сильное ударение |
| Ê | К | К | Прописная E, диактрическое ударение |
| Ë | Л | Л | Прописная E, умляут |
| Í | Н | Н | Прописная I, сильное ударение |
| Ì | М | М | Прописная I, тупое ударение |
| Î | О | О | Прописная I, диактрическое ударение |
| Ï | П | П | Прописная I, умляут |
| Ð | Р | Р | Прописная Eth |
| Ñ | С | С | Прописная N, тильда |
| Ó | У | У | Прописная O, сильное ударение |
| Ò | Т | Т | Прописная O, тупое ударение |
| Å | У | У | Прописная A, звонкое произношение |
| Ô | Ф | Ф | Прописная O, диактрическое ударение |
| Õ | Х | Х | Прописная O, тильда |
| Ö | Ц | Ц | Прописная O, умляут |
| Ø | Ш | Ш | Прописная O, слэш |
| Ù | Щ | Щ | Прописная U, тупое ударение |
| Ú | Ъ | Ъ | Прописная U, сильное ударение |
| Ü | Ь | Ь | Прописная U, умляут |
| Û | Ы | Ы | Прописная U, диактрическое ударение |
| Ý | Э | Э | Прописная Y, сильное ударение |
| Þ | Ю | Ю | Прописная THORN |
| ß | Я | Я | Строчная немецкая буква s с резким произношением |
| à | а | а | Строчная a, тупое ударение |
| á | б | б | Строчная a, сильное ударение |
| â | в | в | Строчная a, диактрическое ударение |
| ã | г | г | Строчная a, тильда |
| ä | д | д | Строчная a, умляут |
| å | е | е | Строчная a, звонкое произношение |
| æ | ж | ж | Строчная ae, дифтонг |
| ç | з | з | Строчная c, седиль |
| è | и | и | Строчная e, тупое ударение |
| é | й | й | Строчная e, сильное ударение |
| ê | к | к | Строчная e, диактрическое ударение |
| ë | л | л | Строчная e, умляут |
| í | н | н | Строчная i, сильное ударение |
| ì | м | м | Строчная i, тупое ударение |
| î | о | о | Строчная i, диактрическое ударение |
| ï | п | п | Строчная i, умляут |
| ð | р | р | Строчная eth |
| ñ | с | с | Строчная n, тильда |
| ò | т | т | Строчная o, тупое ударение |
| ó | у | у | Строчная o, сильное ударение |
| ô | ф | ф | Строчная o, диактрическое ударение |
| õ | х | х | Строчная o, тильда |
| ö | ц | ц | Строчная o, умляут |
| ø | ш | ш | Строчная o, слэш |
| ù | щ | щ | Строчная u, тупое ударение |
| ú | ъ | ъ | Строчная u, сильное ударение |
| ü | ь | ь | Строчная u, умляут |
| û | ы | ы | Строчная u, диактрическое ударение |
| ý | э | э | Строчная y, сильное ударение |
| þ | ю | ю | Строчная thorn |
| ÿ | я | я | Строчная y, умляут |
| ® | ® | ® | Зарегистрированная марка TradeMark |
| © | © | © | Права собственности Copyright |
| Неразбивающий пробел |
В приведенном выше списке нет букв "Ч" и "ч". Редактор Microsoft Internet Assistant for Microsoft Word заменяет первую из этих букв на строку ×, а вторую - на строку ÷.
А что делать, если вам нужно вставить в текст документа HTML одну из приведенных выше строк, соответстующих именам символьных объектов, но при этом необходимо, чтобы навигатор не выполнял замену объекта на символ (это может вам понадобиться, например, если вы решили опубликовать приведенный выше список на странице WWW)?
В этом случае вы должны добавить заменить символ & на строку &, как это показано ниже:
é
Вставка специальных символов
В языке HTML определены четыре специальных символа, предназначенных для служебных целей (например, для вставки команд или символьных объектов, описанных ниже). Это символы <, >, & и ". Вы не можете вставлять специальные символы в обычный текст, вместо этого необходимо использовать следующую замену:| Символ | Замена |
| < | < |
| > | > |
| & | & |
| " | " |
Будьте внимательны, вставляя в документ HTML листинги программ, изобилующие только что перечисленными символами. Перед вставкой таких листингов их надо обработать, заменив специальные символы, например, в автоматическом режиме при помощи текстового редактора.
Вставка видеофрагментов
Наиболее впечатляющая возможность технологии WWW - возможность размещения на страницах мультимедийной информации и, в частности, видеофрагментов со звуковым сопровождением или "немого кино".Для того чтобы разместить видеофрагмент на странице WWW вы должны подготовить файл в формате Microsoft Video for Windows (файл AVI ), содержащий видеофрагмент. Вы можете создать такой файл с помощью специальных контроллеров, предназначенных для ввода видеосигналов от видеокамеры или видеомагнитофона, либо сделать его как мультфильм из отдельных изображений, нарисованных любым графическим редактором.
Технология подготовки таких видеофайлов с использованием пакета программ Microsoft Video for Windows была нами подробно описана в 15 томе "Библиотеки системного программиста", который называется "Мультимедиа для Windows".
Подготавливая видеофайл, следите за тем, чтобы его размер не был слишком большим (не более нескольких Кбайт или в крайнем случае, нескольких десятков Кбайт). Файл большого размера будет слишком долго загружаться из сети через медленный модем.
Для вставки видеофрагментов вы можете использовать описанную выше команду
В данном случае при загрузке страницы автоматически начинается проигрывание файла video.avi, причем окно снабжается органами управления в виде кнопки запуска/остановки проигрывания и движкового регулятора, позволяющего перемещаться в произвольное место видеофрагмента (рис. 4.7).
Рис. 4.7. Страница WWW, в которую вставлен видеофрагмент
Приведем список параметров, которые используются для вставки видеофрагментов с кратким описанием.
| Параметр | Описание |
| DYNSRC | Этот параметр аналогичен параметру SRC и определяет путь к файлу, содержащему видеофрагмент |
| START | Параметр определяет момент, когда нужно начинать проигрывание видеофрагмента. Если этот параметр имеет значение FILEOPEN, проигрывание начинается сразу, как только файл будет загружен. Если же значение параметра равно MOUSEMOVE, проигрывание начнется после того, как пользователь поместит курсор на окно, предназначенное для проигрывания видеофрагмента |
| CONTROLS | Если указан этот параметр, под окном с видеофрагментом отображаются органы управления, позволяющие управлять процессом проигрывания |
| LOOP | Параметр LOOP определяет, сколько раз будет проигрываться видеофрагмент. Если значение этого параметра равно -1 или INFINITE, проигрывание будет выполняться бесконечно (т. е. пока вы не перейдете к просмотру другой страницы или не завершите работу навигатора) |
| LOOPDELAY | С помощью параметра LOOPDELAY можно задать задержку в миллисекундах перед началом очередной операции проигрывания видеофрагмента |
Вставка закладки
Если документ HTML содержит много строк, вы можете вставить в нее несколько закладок для того чтобы пользователь мог перемещаться внутри страницы с помощью гипертекстовых ссылок.Если нажать на кнопку вставки закладки, на экране появится диалоговая панель Bookmark, изображенная на рис. 4.15.
Рис. 4.15. Диалоговая панель Bookmark
В поле Bookmark Name вы должны ввести имя закладки, после чего следует нажать кнопку Add.
При необходимости в этой же диалоговой панели вы можете просмотреть список закладок, удалить ненужные (с помощью кнопки Delete) или перейти к просмотру фрагмента страницы, отмеченного закладкой (с помощью кнопки Go To).
Ввод заголовка документа
Чтобы ввести или отредактировать заголовок создаваемого документа HTML , вы можете нажать соответствующую кнопку на инструментальной панели или выбрать из меню File строку HTML Document Info. В поле Title появившейся диалоговой панлеи введите новый заголовок документа.Выделение параграфа горизонтальной линией
При оформлении страниц WWW часто используется такой прием, как разделение параграфов горизонтальной линией. И хотя горизонтальную линию можно сделать из символов дефиса, намного лучше использовать для этого средства языка HTML . Если вы вставили линию при помощи команды HTML, навигатор может отобразить ее в красивом трехмерном виде с тенями, в результате чего она будет выглядеть намного привлекательнее.Редактор Microsoft Internet Assistant for Microsoft Word просто вставляет в соответствующем месте текста команду
и ограничивается этим. В результате выполнения аналогичной операции редактором навигатора Netscape Navigator Gold получается следующая последовательность команд:
Первая строка в этом примере задает центровку параграфа. Команда
указывает, что необходимо провести горизонтальную линию шириной 100 процентов от ширины окна, в котором отображается документ.
Помимо параметра width, для команды
можно указывать команды align и . Первый параметр может иметь значения left, right или center, при этом линия будет выравнена, соответственно, по левой или правой границе окна просмотра, либо отцентрирована. Если указан параметр , навигатор не будет отображать эту линию в трехмерном виде.
Несмотря на различия в применяемых командах между редакторами Microsoft Internet Assistant for Microsoft Word и Netscape Navigator Gold , навигатор Microsoft Internet Explorer обрабатывает команду
без ошибок.
Выделение параграфа
Как мы уже говорили, в языке HTML начало параграфа отмечается командой . Начало следующего параграфа является концом предыдущего параграфа, последний параграф в документе завершается командой , которая всегда ставится в конце тела документа.Несмотря на то что в описании языка HTML упоминается специальная команда
, завершающая параграф, эта команда не используется навигаторами и не вставляется расширением Microsoft Internet Assistant for Microsoft Word.
Вот вам пример первого параграфа настоящего раздела, подготовленного для вставки в документ HTML :
Простейшие текстовые редакторы, такие как Notepad, Norton Editor или> Лексикон для DOS, предполагают, что текст состоит из отдельных строк, каждая из которых завершается специальным символом - символом конца строки.
Выравнивание текста по горизонтали
По умолчанию текст в параграфе выравнивается по левой границе онка просмотра. Используя команды языка HTML , вы можете выполнить центрирование текста.Центрирование текста выполняется парой команд
При отображении указанный параграф будет отображаться так:
Простейшие текстовые редакторы, такие как Notepad, Norton Editor или Лексикон для DOS, предполагают, что…
Описанный выше способ центрирования текста используется расширением Microsoft Internet Assistant for Microsoft Word. Что же касается навигатора Netscape Navigator Gold , то он эту операцию выполняет по-другому.
Вот пример форматирования текстовой строки Text, отцентрированной средствами Netscape Navigator Gold :
Text
Команда
используется фирмой Netscape в сочетании с параметром align для определения способа выравнивания параграфа. В примере, приведенном выше, выполняется центрирование. Однако указав значение параметра align, равное left или right, можно выполнить выравнивание, соответственно, по левой и правой границе окна просмотра.
Если вы используете для выравнивания текста способ фирмы Netscape, то навигатор Microsoft Internet Explorer покажет параграф выровненым по левой границе. Аналогично, выравнивание по правой границе при помощи команды
Если вы используете для выравнивания текста способ фирмы Netscape, то навигатор Microsoft Internet Explorer покажет параграф выровненым по левой границе. Аналогично, выравнивание по правой границе при помощи команды
будет проигнорировано навигатором Microsoft.
Нравится вам такая ситуация или нет, но у Microsoft и Netscape разные подходы к способу выравнивания текста (и это не единственный предмет для разногласий).
Что же делать вам? Какой способ выравнивания использовать при подготовке своих страниц?
Очевидно, вам придется принимать решение самостоятельно. В качестве компромисса можно выравнивать текст только по левой границе, и на наш взгляд, это не самое плохое решение. Важно, чтобы пользователь видел вашу страницу правильно оформленной вне зависимости от того, с каким навигатором он работает.
Для инициализации необходимо вызвать функцию WSAStartup , определенную следующим образом:
int WSAStartup (WORD wVersionRequested, LPWSADATA lpWSAData);
В параметре wVersionRequested вы должны указать версию интерфейса Windows Sockets, необходимую для работы вашего приложения. Старший байт параметра указывает младший номер версии (minor version), младший байт - старший номер версии (major version).
Перед вызовом функции WSAStartup параметр lpWSAData должен содержать указатель на структуру типа WSADATA , в которую будут записаны сведения о конкретной реализации интерфейса Windows Sockets.
В случае успеха функция WSAStartup возвращает нулевое значение. Если происходит ошибка, возвращается одно из следующих значений:
Ниже мы представили фрагмент исходного текста приложения SERVER, которое будет описано ниже, выполняющий инициализацию интерфейса Windows Sockets:
rc = WSAStartup (MAKEWORD(1, 1), &WSAData); if(rc != 0) { MessageBox(NULL, "WSAStartup Error", "Error", MB_OK); return FALSE; }
// Отображаем описание и версию системы Windows Sockets // в окне органа управления Statusbar wsprintf(szTemp, "Server use %s %s", WSAData.szDescription,WSAData.szSystemStatus);
hwndSb = CreateStatusWindow(WS_CHILD | WS_VISIBLE | WS_BORDER | SBARS_SIZEGRIP, szTemp, hWnd, IDS_STATUSBAR);
В операционных системах Microsoft Windows 95 и Microsoft Windows NT версии 3.51 встроена система Windows Sockets версии 1.1, поэтому именно это значение мы указали при вызове функции WSAStartup .
В следующих нескольких строках только что приведенного фрагмента кода содержимое двух полей структуры типа WSADATA отображается в окне органа управления Statusbar .
Определение структуры WSADATA и указателя на нее выглядят следующим образом:
typedef struct WSAData { WORD wVersion; WORD wHighVersion; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR * lpVendorInfo; } WSADATA ; typedef WSADATA FAR *LPWSADATA;
Использованные выше поля szDescription и szSystemStatus после вызова функции WSAStartup содержат, соответственно, описание конкретной реализации интерфейса Windows Socket и текущее состояние этого интерфейса в виде текстовых строк.
В полях wVersion и wHighVersion записаны, соответственно, версия спецификации Windows Socket, которую будет использовать приложение, и версия спецификации, которой соответствует конкретная реализация интерфейса Windows Socket.
Приложение может одновременно создавать несколько сокетов, например, для использования в разных подзадачах одного процесса. В поле iMaxSockets хранится максимальное количество сокетов, которое можно получить для одного процесса.
В поле iMaxUdpDg записан максимальный размер пакета данных, который можно переслать с использованием датаграммного протокола UDP .
И, наконец, поле lpVendorInfo содержит указатель на дополнительную информацию, формат которой зависит от фирмы-изготовителя конкретной реализации системы Windows Sockets.
Перед тем, как завершить свою работу, приложение должно освободить ресурсы, полученные у операционной системы для работы с Windows Sockets. Для выполнения этой задачи приложение должно вызвать функцию WSACleanup , определенную так, как это показано ниже:
int WSACleanup (void);
Эта функция может возвратить нулевое значение при успехе или значение SOCKET_ERROR в случае ошибки.
Для получения кода ошибки вы должны воспользоваться функцией с именем WSAGetLastError :
int WSAGetLastError (void);
Функция WSAGetLastError позволяет определить код ошибки при неудачном завершении практически всех функций интерфейса Windows Sockets. Вы должны вызывать ее сразу вслед за функцией, завершившейся неудачно.
Если ошибка возникла при выполнении функции WSACleanup , функция WSAGetLastError может вернуть одно из следующих значений:
Сделаем небольшие пояснения относительно последней ошибки, приведенной в этом списке, и имеющей код WSAEINPROGRESS .
Некоторые функции интерфейса Windows Sockets способны блокировать работу приложения, так как они не возвращают управление до своего завершения. В операционных системах, использующих вытесняющую мультизадачность, к которым относятся Microsoft Windows 95 и Microsoft Windows NT, это не приводит к блокировке всей системы. Как вы увидите дальше, можно избежать использования блокирующих функций, так как для них в интерфейсе Windows Sockets существует замена.
Во второй главе нашей книги мы рассказали вам о том, как установить соединение с использованием протокола TCP/IP. Вы также научились работать в Internet в среде операционных систем Microsoft Windows 95, Microsoft Windows NT, а также OS/2 Warp Connect.
Нашей следующей задачей будет освоение основ программирования для сетей TCP/IP. Теперь мы расскажем вам о том, как составлять сетевые приложения, выполняющие обмен данными по глобальным и локальным сетям с использованием данного протокола. При этом из-за недостатка места в книге мы ограничимся описанием программного интерфейса Windows Sockets , который имеется в операционных системах Microsoft Windows 95 и Microsoft Windows NT.
Интерфейс Windows Sockets предоставляет в ваше распоряжение удобные средства организации передачи данных с использованием датаграмм и каналов связи между узлами сети.
В восьмом томе "Библиотеки системного программиста", который называется "Локальные сети персональных компьютеров. Использование протоколов IPX , SPX , NETBIOS " мы приводили соновные сведения об использовании протоколов IPX, SPX и NETBIOS в программах, передающих данные по сети Novell NetWare. Интерфейс Windows Sockets позволяет передавать данные не только с использованием протокола TCP/IP, но и других протоколов, например, IPX/SPX . Вы можете узнать об этом подробнее из документации, которая поставляется в составе SDK для программного интерфейса WIN32 .
Для этого вы должны подготовить структуру типа sockaddr , определение которой показано ниже:
struct sockaddr { u_short sa_family; char sa_data[14]; }; typedef struct sockaddr SOCKADDR ; typedef struct sockaddr *PSOCKADDR ; typedef struct sockaddr FAR *LPSOCKADDR ;
Для работы с адресами в формате Internet используется другой вариант этой структуры, в котором детализируется формат поля sa_data:
struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; typedef struct sockaddr_in SOCKADDR _IN; typedef struct sockaddr_in *PSOCKADDR _IN; typedef struct sockaddr_in FAR *LPSOCKADDR _IN;
Поле sin_family определяет тип адреса. Вы должны записать в это поле значение AF_INET , которое соответствует типу адреса, принятому в Internet:
srv_address.sin_family = AF_INET ;
Поле sin_port определяет номер порта, который будет использоваться для передачи данных.
Порт - это просто идентификатор программы, выполняющей обмен на сети. На одном узле может одновременно работать несколько программ, использующих разные порты.
Особенностью поля sin_port является использование так называемого сетевого формата данных. Этот формат отличается от того, что принят в процессорах с архитектурой Intel, а именно, младшие байты данных хранятся по старшим адресам памяти. Напомним, что архитектура процессоров Intel подразумевает хранение старщих байтов данных по младшим адресам.
Универсальный сетевой формат данных удобен при организации глобальных сетей, так как в узлах такой сети могут использоваться компьютеры с различной архитектурой.
Для выполнения преобразований из обычного формат в сетевой и обратно в интерфейсе Windows Sockets предусмотрен специальный набор функций. В частности, для заполнения поля sin_port нужно использовать функцию htons, выполняющую преобразование 16-разрядных данных из формата Intel в сетевой формат.
Ниже мы показали, как инициализируется поле sin_port в приложении SERVER, описанном далее:
#define SERV_PORT 5000 srv_address.sin_port = htons(SERV_PORT);
Вернемся снова к структуре sockaddr_in .
Поле sin_addr этой структуры представляет собой структуру in_addr:
struct in_addr { union { struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { u_short s_w1,s_w2; } S_un_w; u_long S_addr; } S_un; }; #define s_addr S_un.S_addr #define s_host S_un.S_un_b.s_b2 #define s_net S_un.S_un_b.s_b1 #define s_imp S_un.S_un_w.s_w2 #define s_impno S_un.S_un_b.s_b4 #define s_lh S_un.S_un_b.s_b3
При инициализации сокета в этой структуре вы должны указать адрес IP, с которым будет работать данный сокет.
Если сокет будет работать с любым адресом (например, вы создаете сервер, который будет доступен из узлов с любым адресом), адрес для сокета можно указать следующим образом:
srv_address.sin_addr .s_addr = INADDR_ANY ;
В том случае, если сокет будет работать с определенным адресом IP (например, вы создаете приложение-клиент, которое будет обращаться к серверу с конкретным адресом IP), в указанную структуру необходимо записать реальный адрес.
Датаграммный протокол UDP позволяет посылать пакеты данных одновременно всем рабочим станциям в широковещательном режиме. Для этого вы должны указать адрес как INADDR_BROADCAST.
Если вам известен адрес в виде четырех десятичных чисел, разделенных точкой (именно так его вводит пользователь), то вы можете заполнить поле адреса при помощи функции inet_addr :
dest_sin.sin_addr .s_addr = inet_addr ("200.200.200.201");
В случае ошибки функция возвращает значение INADDR_NONE , что можно использовать для проверки.
Обратное преобразование адреса IP в текстовую строку можно при необходимости легко выполнить с помощью функции inet_ntoa , имеющей следующий прототип:
char FAR * inet_ntoa (struct in_addr in);
При ошибке эта функция возвращает значение NULL.
Однако чаще всего пользователь работает с доменными именами, используя сервер DNS или файл HOSTS . В этом случае вначале вы должны воспользоваться функцией gethostbyname , возвращающей адрес IP, а затем записать полученный адрес в структуру sin_addr :
PHOSTENT phe; phe = gethostbyname ("ftp.microsoft.com"); if(phe == NULL) { closesocket (srv_socket); MessageBox(NULL, "gethostbyname Error", "Error", MB_OK); return; } memcpy((char FAR *)&(dest_sin.sin_addr ), phe->h_addr , phe->h_length);
В случае ошибки функция gethostbyname возвращает NULL. При этом причину ошибки можно выяснить, проверив код возврата функции WSAGetLastError .
Если же указанный узел найден в базе DNS или в файле HOSTS , функция gethostbyname возвращает указатель на структуру hostent , описанную ниже:
struct hostent { char FAR * h_name; // имя узла char FAR * FAR * h_aliases; // список альтернативных имен short h_addr type; // тип адреса узла short h_length; // длина адреса char FAR * FAR * h_addr _list; // список адресов #define h_addr h_addr_list[0] // адрес }; typedef struct hostent *PHOSTENT ; typedef struct hostent FAR *LPHOSTENT ;
Искомый адрес находится в первом элемента списка h_addr _list[0], на который можно также ссылаться при помощи h_addr. Длина поля адреса находится в поле h_length.
Функция передачи данных send имеет три параметра - дескриптор сокета sock, на котором выполняется передача, адрес буфера buf, содержащего передаваемое сообщение, размер этого буфера bufsize и флаги flags:
int send (SOCKET sock, const char FAR* buf, int bufsize, int flags);
В нашем приложении CLIENT мы передаем данные серверу следующим образом:
char szBuf[80]; lstrcpy(szBuf, "Test string"); send (srv_socket , szBuf, lstrlen(szBuf), 0);
Параметры функции recv , предназначенной для приема данных, аналогичны параметрам функции send :
int recv (SOCKET sock, char FAR * buf, int bufsize, int flags);
Заметим, что функции recv и send возвращают количество, соответственно, принятых и переданных байт данных. Приложение, которое принимает данные, должно вызывать функцию recv в цикле до тех пор, пока не будут приняты все переданные данные. При этом на один вызов функции send может приходиться несколько вызовов функции recv.
В случае ошибки обе эти функции возвращают значение SOCKET_ERROR . Для анализа причин возникновения ошибки следует воспользоваться функцией WSAGetLastError .
Приведем список кодов ошибок, которые могут возникать при вызове команды send:
<
При выполнении функции recv могут возникать следующие ошибки:
Передача и прием данных в цикле может привести к блокировке работы приложения. Если это неприемлимо, следует воспользоваться асинхронным расширением интерфейса Windows Sockets.
Наше приложение SERVER
демонстрирует асинхронный прием данных.
После установки канала связи оно вызывает функцию WSAAsyncSelect , указывая ей в качестве последнего параметра комбинацию констант FD_READ и FD_CLOSE . При этом функция главного окна приложения будет получать сообщение WSA_NETEVENT в тот момент времени, когда чтение данных не вызовет блокировки приложения:
#define WSA_NETEVENT (WM_USER + 2) rc = WSAAsyncSelect (srv_socket , hWnd, WSA_NETEVENT, FD_READ | FD_CLOSE );
При необходимости выполнения асинхронной посылки данных вы можете указать функции WSAAsyncSelect еще и параметр FD_WRITE .
Если функция WSAAsyncSelect выполнилась успешно, она возвращает нулевое значение, при ошибке - значение SOCKET_ERROR.
В зависимости от значения последнего параметра могут возникать разные коды ошибки, которые можно получить при помощи функции WSAGetLastError. Следующие ошибки могут возникнуть при любом значении параметра:
Дополнительный код ошибки можно получить из параметра lParam при помощи макрокоманды WSAGETSELECTERROR.
При использовании параметра FD_CONNECT возможно появление следующих ошибок:
Если используется параметр FD_CLOSE, может возникнуть одна из следующих ошибок:
В том случае, когда указаны параметры FD_READ , FD_WRITE , FD_OOB , или FD_ACCEPT , может возникнуть ошибка с кодом WSAENETDOWN .
Обработчик сообщения WSA_NETEVENT должен выполнить анализ причины, по которой он был вызван, так как за один вызов функции WSAAsyncSelect можно задать несколько событий, вызывающих генерацию сообщения. Этот анализ проводится, например, следующим образом:
void WndProc_OnWSANetEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { char szTemp[256]; int rc;
// Если на сокете выполняется передача данных, // принимаем и отображаем эти данные в виде // текстовой строки if(WSAGETSELECTEVENT(lParam) == FD_READ ) { rc = recv ((SOCKET)wParam, szTemp, 256, 0); if(rc) { szTemp[rc] = '\0'; MessageBox(NULL, szTemp, "Reсeived data", MB_OK); } return; }
// Если соединение завершено, выводми об этом сообщение else if(WSAGETSELECTEVENT(lParam) == FD_CLOSE ) { MessageBox(NULL, "Connection closed", "Server", MB_OK); } }
Отметим, что параметр wParam содержит дескриптор сокета, на котором выполняется передача данных, а параметр lParam - код события, которое произошло в сети.
После запуска этого приложения вы должны создать канал связи с приложением SERVER, выбрав из меню File строку Connect, после чего можно посылать сообщение Test message, выбирая из этого же меню строку Send Message.
Сервер, получив сообщение, отобразит его на экране в отдельной диалоговой панели.
Листинг 5.4. Файл client/client.c
#include #include #include #include #include "resource.h"
// ----------------------------------------------------- // Описание функций // -----------------------------------------------------
// Функция главного окна LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
// Функция для обработки сообщения WM_CREATE BOOL WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct);
// Функция для обработки сообщения WM_DESTROY void WndProc_OnDestroy(HWND hWnd);
// Функция для обработки сообщения WM_COMMAND void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify);
// Функция для обработки сообщения WM_SIZE void WndProc_OnSize(HWND hWnd, UINT state, int cx, int cy);
// Установка соединения void SetConnection(HWND hWnd);
// Передача сообщения void SendMsg(HWND hWnd);
// Порт сервера #define SERV_PORT 5000
#define IDS_STATUSBAR 802
// ----------------------------------------------------- // Глобальные переменные // -----------------------------------------------------
// Идентификатор приложения HINSTANCE hInst;
// Название приложения char szAppName[] = "WClient";
// Заголовок главного окна приложения char szAppTitle[] = "Windows Socket Client Demo";
// Идентификатор органа управления Statusbar HWND hwndSb;
// Сокет клиента SOCKET srv_socket ;
// Локальный сокет SOCKADDR _IN local_sin;
// Адрес сервера SOCKADDR _IN dest_sin;
// ----------------------------------------------------- // Функция WinMain // -----------------------------------------------------
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; HWND hWnd; MSG msg;
hInst = hInstance;
// Преверяем, не было ли это приложение запущено ранее hWnd = FindWindow(szAppName, NULL); if(hWnd) { // Если окно приложения было свернуто в пиктограмму, // восстанавливаем его if(IsIconic(hWnd)) ShowWindow(hWnd, SW_RESTORE);
// Выдвигаем окно приложения на передний план SetForegroundWindow(hWnd); return FALSE; }
// Регистрируем класс окна memset(&wc, 0, sizeof(wc));
// Поля wc.cbSize и wc.hIconSm определены в структуре // WNDCLASSEX, которой можно пользоваться для // регистрации класса окна в Windows 95 wc.cbSize = sizeof(WNDCLASSEX);
// Поле wc.hIconSm задает идентификатор маленькой // пиктограммы, которая будет отображаться в левой // части заголовка окна (в области системного меню). // Загружаем пиктограмму из ресурсов приложения при // помощи функции LoadImage, так как функция // LoadIcon может загрузить только обычную пиктограмму wc.hIconSm = LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON_SM), IMAGE_ICON, 16, 16, 0);
// Завершаем заполнение структуры WNDCLASSEX wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst;
// Для загрузки обычной пиктограммы вы можете // использовать функцию LoadImage wc.hIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON), IMAGE_ICON, 32, 32, 0);
wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); wc.lpszClassName = szAppName;
// Вызываем функцию RegisterClassEx, которая выполняет // регистрацию окна if(!RegisterClassEx(&wc))
// В случае ошибки пытаемся зарегистрировать окно // функцией RegisterClass if(!RegisterClass((LPWNDCLASS)&wc.style)) return FALSE;
// Инициализация библиотеки органов управления // общего назначения. Необходима для работы с // органом управления Statusbar InitCommonControls();
// Создаем главное окно приложения hWnd = CreateWindow(szAppName, szAppTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL); if(!hWnd) return(FALSE);
// Отображаем окно ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
// Запускаем цикл обработки сообщений while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
// ----------------------------------------------------- // Функция WndProc // -----------------------------------------------------
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { // Для сообщения WM_CREATE назначаем обработчик, // расположенный в функции WndProc_OnCreate HANDLE_MSG(hWnd, WM_CREATE , WndProc_OnCreate);
// Для сообщения WM_COMMAND назначаем обработчик, // расположенный в функции WndProc_OnCommand HANDLE_MSG(hWnd, WM_COMMAND , WndProc_OnCommand);
// Для сообщения WM_SIZE назначаем обработчик, // расположенный в функции WndProc_OnSize HANDLE_MSG(hWnd, WM_SIZE , WndProc_OnSize);
// Для сообщения WM_DESTROY назначаем обработчик, // расположенный в функции WndProc_OnDestroy HANDLE_MSG(hWnd, WM_DESTROY , WndProc_OnDestroy);
default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } }
// ----------------------------------------------------- // Функция WndProc_OnCreate // -----------------------------------------------------
BOOL WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct) { int rc; WSADATA WSAData; char szTemp[128];
// Инициализация и проверка версии Windows Sockets rc = WSAStartup (MAKEWORD(1, 1), &WSAData); if(rc != 0) { MessageBox(NULL, "WSAStartup Error", "Error", MB_OK); return FALSE; }
// Отображаем описание и версию системы Windows Sockets // в окне органа управления Statusbar wsprintf(szTemp, "Server use %s %s", WSAData.szDescription,WSAData.szSystemStatus);
hwndSb = CreateStatusWindow(WS_CHILD | WS_VISIBLE | WS_BORDER | SBARS_SIZEGRIP, szTemp, hWnd, IDS_STATUSBAR);
return TRUE; }
// ----------------------------------------------------- // Функция WndProc_OnDestroy // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnDestroy(HWND hWnd) { // Освобождение ресурсов, полученных для // работы с Windows Sockets WSACleanup ();
// Завершение цикла обработки сообщений PostQuitMessage(0); return FORWARD_WM_DESTROY (hWnd, DefWindowProc); }
// ----------------------------------------------------- // Функция WndProc_OnSize // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnSize( HWND hWnd, UINT state, int cx, int cy) { SendMessage(hwndSb, WM_SIZE , cx, cy); return FORWARD_WM_SIZE (hWnd, state, cx, cy, DefWindowProc); }
// ----------------------------------------------------- // Функция WndProc_OnCommand // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify) { switch (id) { case IDM_EXIT:
// Уничтожение главного окна прилоджения DestroyWindow(hWnd); break;
case IDM_CONNECT:
// Установка соединения с сервером SetConnection(hWnd); break;
case IDM_SEND:
// Посылка сообщения серверу SendMsg(hWnd); break;
default: MessageBox(NULL, "Unknown command", "Error", MB_OK); }
return FORWARD_WM_COMMAND (hWnd, id, hwndCtl, codeNotify, DefWindowProc); }
// ----------------------------------------------------- // Функция SetConnection // -----------------------------------------------------
void SetConnection(HWND hWnd) { PHOSTENT phe;
// Создаем сокет srv_socket = socket(AF_INET , SOCK_STREAM, 0); if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "socket Error", "Error", MB_OK); return; }
// Устанавливаем адрес IP и номер порта dest_sin.sin_family = AF_INET ;
// Определяем адрес узла
// Адрес локального узла для отладки phe = gethostbyname ("localhost ");
// Адрес удаленного узла //phe = gethostbyname ("frolov");
if(phe == NULL) { closesocket (srv_socket); MessageBox(NULL, "gethostbyname Error", "Error", MB_OK); return; }
// Копируем адрес узла memcpy((char FAR *)&(dest_sin.sin_addr ), phe->h_addr , phe->h_length);
// Другой способ указания адреса узла // dest_sin.sin_addr .s_addr = inet_addr ("200.200.200.201");
// Копируем номер порта dest_sin.sin_port = htons(SERV_PORT);
// Устанавливаем соединение if(connect(srv_socket , (PSOCKADDR )&dest_sin, sizeof(dest_sin)) < 0) { closesocket (srv_socket); MessageBox(NULL, "connect Error", "Error", MB_OK); return; }
// В случае успеха выводим сообщение об установке // соединения с узлом SendMessage(hwndSb, SB_SETTEXT, 0, (LPARAM)"Connected"); }
// ----------------------------------------------------- // Функция SendMsg // -----------------------------------------------------
void SendMsg(HWND hWnd) { char szBuf[80]; lstrcpy(szBuf, "Test string");
// Посылаем сообщение send (srv_socket , szBuf, lstrlen(szBuf), 0); }
Вы сможете разобраться с исходными текстами этого прилжоения самостоятельно, так как все использованные в нем функции были нами уже описаны. Обратим ваше внимание только на функцию SetConnection, предназначенную для установки канала связи с сервером.
Если вы будете проверять работу приложений SERVER и CLIENT на одном и том же компьютере, адрес сервера должен быть указан следующим образом:
phe = gethostbyname ("localhost ");
Для того чтобы установить канал связи с компьютером по его имени, закройте символом комментария приведенную выше строку и уберите символ комментария со строки, расположенной ниже:
//phe = gethostbyname ("frolov");
Разумеется, вы должны также изменить имя компьютера.
Можно также указать адрес узла в виде десятичных цифр, для чего следует убрать символ комментария со следующей строки:
// dest_sin.sin_addr .s_addr = inet_addr ("200.200.200.201");
Идентификаторы ресурсов приложения CLIENT определены в файле resource.h, представленном в листинге 5.5.
Листинг 5.5. Файл client/resource.h
//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by CLIENT.rc // #define IDI_APPICON 101 #define IDI_APPICON_SM 102 #define IDR_MENU1 105 #define IDM_START 40001 #define IDM_EXIT 40002 #define IDM_STOP 40003 #define IDM_CONNECT 40004 #define IDM_SEND 40005
// Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 106 #define _APS_NEXT_COMMAND_VALUE 40006 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif
Файл client.rc (листинг 5.6) содержит определения ресурсов приложения.
Листинг 5.6. Файл client/client.rc
//Microsoft Developer Studio generated resource script. // #include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h"
///////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS
///////////////////////////////////////////////////////////////////// // Russian resources
#if !defined(AFX_RESOURCE_DLL) defined(AFX_TARG_RUS) #ifdef _WIN32 LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT #pragma code_page(1251) #endif //_WIN32
#ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////// // // TEXTINCLUDE //
1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END
2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0" END
3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END
#endif // APSTUDIO_INVOKED
///////////////////////////////////////////////////////////////////// // // Icon //
// Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_APPICON ICON DISCARDABLE "client.ico" IDI_APPICON_SM ICON DISCARDABLE "clientsm.ico"
///////////////////////////////////////////////////////////////////// // // Menu //
IDR_MENU1 MENU DISCARDABLE BEGIN POPUP "&File" BEGIN MENUITEM "&Connect", IDM_CONNECT MENUITEM "S&end message", IDM_SEND MENUITEM SEPARATOR MENUITEM "&Exit", IDM_EXIT END END
#endif // Russian resources /////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. //
///////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED
Листинг 5.8. Файл clientd/clientd.c
#include #include #include #include #include "resource.h"
// ----------------------------------------------------- // Описание функций // -----------------------------------------------------
// Функция главного окна LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
// Функция для обработки сообщения WM_CREATE BOOL WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct);
// Функция для обработки сообщения WM_DESTROY void WndProc_OnDestroy(HWND hWnd);
// Функция для обработки сообщения WM_COMMAND void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify);
// Функция для обработки сообщения WM_SIZE void WndProc_OnSize(HWND hWnd, UINT state, int cx, int cy);
// Установка соединения void SetConnection(HWND hWnd);
// Передача сообщения void SendMsg(HWND hWnd);
// Порт сервера #define SERV_PORT 5000
#define IDS_STATUSBAR 802
// ----------------------------------------------------- // Глобальные переменные // -----------------------------------------------------
// Идентификатор приложения HINSTANCE hInst;
// Название приложения char szAppName[] = "WClientUDP ";
// Заголовок главного окна приложения char szAppTitle[] = "Windows Socket UDP Client Demo";
// Идентификатор органа управления Statusbar HWND hwndSb;
// Сокет клиента SOCKET srv_socket ;
// Адрес сервера SOCKADDR _IN dest_sin;
// ----------------------------------------------------- // Функция WinMain // -----------------------------------------------------
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; HWND hWnd; MSG msg;
hInst = hInstance;
// Преверяем, не было ли это приложение запущено ранее hWnd = FindWindow(szAppName, NULL); if(hWnd) { // Если окно приложения было свернуто в пиктограмму, // восстанавливаем его if(IsIconic(hWnd)) ShowWindow(hWnd, SW_RESTORE);
// Выдвигаем окно приложения на передний план SetForegroundWindow(hWnd); return FALSE; }
// Регистрируем класс окна memset(&wc, 0, sizeof(wc)); wc.cbSize = sizeof(WNDCLASSEX); wc.hIconSm = LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON_SM), IMAGE_ICON, 16, 16, 0); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON), IMAGE_ICON, 32, 32, 0);
wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); wc.lpszClassName = szAppName;
// Вызываем функцию RegisterClassEx, которая выполняет // регистрацию окна if(!RegisterClassEx(&wc)) if(!RegisterClass((LPWNDCLASS)&wc.style)) return FALSE;
InitCommonControls();
// Создаем главное окно приложения hWnd = CreateWindow(szAppName, szAppTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL); if(!hWnd) return(FALSE);
// Отображаем окно ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
// Запускаем цикл обработки сообщений while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
// ----------------------------------------------------- // Функция WndProc // -----------------------------------------------------
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { HANDLE_MSG(hWnd, WM_CREATE , WndProc_OnCreate); HANDLE_MSG(hWnd, WM_COMMAND , WndProc_OnCommand); HANDLE_MSG(hWnd, WM_SIZE , WndProc_OnSize); HANDLE_MSG(hWnd, WM_DESTROY , WndProc_OnDestroy);
default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } }
// ----------------------------------------------------- // Функция WndProc_OnCreate // -----------------------------------------------------
BOOL WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct) { int rc; WSADATA WSAData; char szTemp[128];
// Инициализация и проверка версии Windows Sockets rc = WSAStartup (MAKEWORD(1, 1), &WSAData); if(rc != 0) { MessageBox(NULL, "WSAStartup Error", "Error", MB_OK); return FALSE; }
// Отображаем описание и версию системы Windows Sockets // в окне органа управления Statusbar wsprintf(szTemp, "Server use %s %s", WSAData.szDescription,WSAData.szSystemStatus);
hwndSb = CreateStatusWindow(WS_CHILD | WS_VISIBLE | WS_BORDER | SBARS_SIZEGRIP, szTemp, hWnd, IDS_STATUSBAR);
return TRUE; }
// ----------------------------------------------------- // Функция WndProc_OnDestroy // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnDestroy(HWND hWnd) { // Освобождение ресурсов, полученных для // работы с Windows Sockets WSACleanup ();
// Завершение цикла обработки сообщений PostQuitMessage(0); return FORWARD_WM_DESTROY (hWnd, DefWindowProc); }
// ----------------------------------------------------- // Функция WndProc_OnSize // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnSize(HWND hWnd, UINT state, int cx, int cy) { SendMessage(hwndSb, WM_SIZE , cx, cy); return FORWARD_WM_SIZE (hWnd, state, cx, cy, DefWindowProc); }
// ----------------------------------------------------- // Функция WndProc_OnCommand // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify) { switch (id) { case IDM_EXIT:
// Уничтожение главного окна прилоджения DestroyWindow(hWnd); break;
case IDM_CONNECT:
// Установка соединения с сервером SetConnection(hWnd); break;
case IDM_SEND:
// Посылка сообщения серверу SendMsg(hWnd); break;
default: MessageBox(NULL, "Unknown command", "Error", MB_OK); }
return FORWARD_WM_COMMAND (hWnd, id, hwndCtl, codeNotify, DefWindowProc); }
// ----------------------------------------------------- // Функция SetConnection // -----------------------------------------------------
void SetConnection(HWND hWnd) { PHOSTENT phe;
// Создаем сокет srv_socket = socket(AF_INET , SOCK_DGRAM, 0); if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "socket Error", "Error", MB_OK); return; }
// Связываем адрес IP с сокетом dest_sin.sin_family = AF_INET ; dest_sin.sin_addr .s_addr = INADDR_ANY ; dest_sin.sin_port = 0;
if(bind (srv_socket , (LPSOCKADDR )&dest_sin, sizeof(dest_sin)) == SOCKET_ERROR ) { // При ошибке закрываем сокет closesocket (srv_socket); MessageBox(NULL, "bind Error", "Error", MB_OK); return; }
// Устанавливаем адрес IP и номер порта dest_sin.sin_family = AF_INET ;
// Определяем адрес узла
// Адрес локального узла для отладки phe = gethostbyname ("localhost ");
// Адрес удаленного узла // phe = gethostbyname ("maxsinev");
if(phe == NULL) { closesocket (srv_socket); MessageBox(NULL, "gethostbyname Error", "Error", MB_OK); return; }
// Копируем адрес узла memcpy((char FAR *)&(dest_sin.sin_addr ), phe->h_addr , phe->h_length);
// Другой способ указания адреса узла // dest_sin.sin_addr .s_addr = inet_addr ("200.200.200.201");
// Копируем номер порта dest_sin.sin_port = htons(SERV_PORT);
// В случае успеха выводим сообщение об установке // соединения с узлом SendMessage(hwndSb, SB_SETTEXT, 0, (LPARAM)"Connected"); }
// ----------------------------------------------------- // Функция SendMsg // -----------------------------------------------------
void SendMsg(HWND hWnd) { char szBuf[80]; lstrcpy(szBuf, "Test string");
// Посылаем сообщение send to(srv_socket , szBuf, lstrlen(szBuf), 0, (PSOCKADDR )&dest_sin, sizeof(dest_sin)); }
Функция SetConnection создает сокет типа SOCK_DGRAM, так как передача данных будет выполняться с использованием протокола UDP :
srv_socket = socket(AF_INET , SOCK_DGRAM, 0);
Далее выполняется привязка сокета к адресу с помощью функции bind . При этом указывается нулевое значение порта и адрес INADDR_ANY , так как на данном этапе эти параметры не имеют значения.
Затем функция SetConnection записывает адрес сервера в структуру dest_sin. Этот адрес потребуется для передачи сообщений серверу.
При использовании протокола UDP и если не создан канал между приложениями, для передачи данных следует использовать функцию send to:
send to(srv_socket , szBuf, lstrlen(szBuf), 0, (PSOCKADDR )&dest_sin, sizeof(dest_sin));
В качестве предпоследнего параметра этой фукнции нужно передать адрес заполненной структуры, содержащей адрес узла, куда будет посылаться пакет данных. Через последний параметр функции send to необходимо передать размер указанной структуры.
Привдедем список возможных кодов ошибок для функции send to:
Заметим, что клиент может создать канал связи с сервером, вызвав функцию connect, и передавать по этому каналу пакеты UDP , пользуясь функциями send и recv . Этот способ удобен тем, что при передаче пакета не нужно каждый раз указывать адрес получателя.
Вы можете запускать приложения SERVER и CLIENT как на одном, так и на разных компьютерах, соединенных локальной или глобальной сетью TCP/IP. В случае запуска этих приложений на одном и том же компьютере в качестве адреса IP используется локальный тестовый адрес 127.0.0.1 .
Создавая проект для этого, а также всех остальных приложений, приведенных в нашей книге, вы должны указать, что для разрешения внешних ссылок необходимо использовать библиотеки объектных модулей wsock32.lib и comctl32.lib . Первая из них нужна для работы с программным интерфейсом Windows Sockets, вторая - для работы с органом управления Statusbar .
Для подключения указанных библиотек из меню Build системы разработки Microsoft Visual C++ версии 4.0 нужно выбрать строку Settings. На экране появится блокнот project Settings, который следует открыть на странице Link. Затем вы должны дописать названия библиотек в поле Object/library modules и нажать кнопку OK.
Исходный текст приложения SERVER представлен в листинге 5.1.
Листинг 5.1. Файл server/server.c
#include #include #include #include #include "resource.h"
// ----------------------------------------------------- // Описание функций // -----------------------------------------------------
// Функция главного окна LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
// Функция для обработки сообщения WM_CREATE BOOL WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct);
// Функция для обработки сообщения WM_DESTROY void WndProc_OnDestroy(HWND hWnd);
// Функция для обработки сообщения WM_COMMAND void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify);
// Функция для обработки сообщения WM_SIZE void WndProc_OnSize(HWND hWnd, UINT state, int cx, int cy);
// Запуск сервера void ServerStart(HWND hWnd);
// Останов сервера void ServerStop(HWND hWnd);
// Обработка сообщения WSA_ACCEPT void WndProc_OnWSAAccept(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
// Обработка сообщения WSA_NETEVENT void WndProc_OnWSANetEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); // Порт сервера #define SERV_PORT 5000
#define IDS_STATUSBAR 802 // Определение кодов сообщений #define WSA_ACCEPT (WM_USER + 1) #define WSA_NETEVENT (WM_USER + 2)
// ----------------------------------------------------- // Глобальные переменные // -----------------------------------------------------
// Идентификатор приложения HINSTANCE hInst;
// Название приложения char szAppName[] = "WServer";
// Заголовок главного окна приложения char szAppTitle[] = "Windows Socket Server Demo";
// Идентификатор органа Statusbar HWND hwndSb;
// Сокет сервера SOCKET srv_socket ;
// Длина использованного сокета int acc_sin_len;
// Адрес использованного сокета SOCKADDR _IN acc_sin;
// Локальный сокет SOCKADDR _IN local_sin;
// ----------------------------------------------------- // Функция WinMain // -----------------------------------------------------
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; HWND hWnd; MSG msg;
hInst = hInstance;
// Преверяем, не было ли это приложение запущено ранее hWnd = FindWindow(szAppName, NULL); if(hWnd) { // Если окно приложения было свернуто в пиктограмму, // восстанавливаем его if(IsIconic(hWnd)) ShowWindow(hWnd, SW_RESTORE);
// Выдвигаем окно приложения на передний план SetForegroundWindow(hWnd); return FALSE; }
// Регистрируем класс окна memset(&wc, 0, sizeof(wc));
// Поля wc.cbSize и wc.hIconSm определены в структуре // WNDCLASSEX, которой можно пользоваться для // регистрации класса окна в Windows 95 wc.cbSize = sizeof(WNDCLASSEX);
// Поле wc.hIconSm задает идентификатор маленькой // пиктограммы, которая будет отображаться в левой // части заголовка окна (в области системного меню). // Загружаем пиктограмму из ресурсов приложения при // помощи функции LoadImage, так как функция // LoadIcon может загрузить только обычную пиктограмму wc.hIconSm = LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON_SM), IMAGE_ICON, 16, 16, 0);
// Завершаем заполнение структуры WNDCLASSEX wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst;
// Для загрузки обычной пиктограммы вы можете // использовать функцию LoadImage wc.hIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON), IMAGE_ICON, 32, 32, 0);
wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); wc.lpszClassName = szAppName;
// Вызываем функцию RegisterClassEx, которая выполняет // регистрацию окна if(!RegisterClassEx(&wc))
// В случае ошибки пытаемся зарегистрировать окно // функцией RegisterClass if(!RegisterClass((LPWNDCLASS)&wc.style)) return FALSE;
// Инициализация библиотеки органов управления // общего назначения. Необходима для работы с // органом управления Statusbar InitCommonControls();
// Создаем главное окно приложения hWnd = CreateWindow(szAppName, szAppTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL); if(!hWnd) return(FALSE);
// Отображаем окно ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
// Запускаем цикл обработки сообщений while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
// ----------------------------------------------------- // Функция WndProc // -----------------------------------------------------
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { // Вызываем обработчик сообщения WSA_ACCEPT case WSA_ACCEPT: WndProc_OnWSAAccept(hWnd, msg, wParam, lParam); break;
// Вызываем обработчик сообщения WSA_NETEVENT case WSA_NETEVENT: WndProc_OnWSANetEvent(hWnd, msg, wParam, lParam); break;
// Для сообщения WM_CREATE назначаем обработчик, // расположенный в функции WndProc_OnCreate HANDLE_MSG(hWnd, WM_CREATE , WndProc_OnCreate);
// Для сообщения WM_COMMAND назначаем обработчик, // расположенный в функции WndProc_OnCommand HANDLE_MSG(hWnd, WM_COMMAND , WndProc_OnCommand);
// Для сообщения WM_SIZE назначаем обработчик, // расположенный в функции WndProc_OnSize HANDLE_MSG(hWnd, WM_SIZE , WndProc_OnSize);
// Для сообщения WM_DESTROY назначаем обработчик, // расположенный в функции WndProc_OnDestroy HANDLE_MSG(hWnd, WM_DESTROY , WndProc_OnDestroy);
default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } }
// ----------------------------------------------------- // Функция WndProc_OnCreate // -----------------------------------------------------
BOOL WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct) { int rc; WSADATA WSAData; char szTemp[128];
// Инициализация и проверка версии Windows Sockets rc = WSAStartup (MAKEWORD(1, 1), &WSAData); if(rc != 0) { MessageBox(NULL, "WSAStartup Error", "Error", MB_OK); return FALSE; }
// Отображаем описание и версию системы Windows Sockets // в окне органа управления Statusbar wsprintf(szTemp, "Server use %s %s", WSAData.szDescription,WSAData.szSystemStatus);
hwndSb = CreateStatusWindow(WS_CHILD | WS_VISIBLE | WS_BORDER | SBARS_SIZEGRIP, szTemp, hWnd, IDS_STATUSBAR);
return TRUE; }
// ----------------------------------------------------- // Функция WndProc_OnDestroy // -----------------------------------------------------
// Отключаем предупреждающее сообщение о том, что // функция типа void возвращает управление при помощи // оператора return. Этот оператор нужен для // использования макрокоманды FORWARD_WM_LBUTTONDOWN #pragma warning(disable: 4098) void WndProc_OnDestroy(HWND hWnd) { // Освобождение ресурсов, полученных для // работы с Windows Sockets WSACleanup ();
// Завершение цикла обработки сообщений PostQuitMessage(0); return FORWARD_WM_DESTROY (hWnd, DefWindowProc); }
// ----------------------------------------------------- // Функция WndProc_OnSize // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnSize( HWND hWnd, UINT state, int cx, int cy) { SendMessage(hwndSb, WM_SIZE , cx, cy); return FORWARD_WM_SIZE (hWnd, state, cx, cy, DefWindowProc); }
// ----------------------------------------------------- // Функция WndProc_OnCommand // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify) { switch (id) { case IDM_EXIT:
// Уничтожение главного окна приложения DestroyWindow(hWnd); break;
case IDM_START:
// Запуск сервера ServerStart(hWnd); break;
case IDM_STOP:
// Останов сервера ServerStop(hWnd); break;
default: MessageBox(NULL, "Unknown command", "Error", MB_OK); }
return FORWARD_WM_COMMAND (hWnd, id, hwndCtl, codeNotify, DefWindowProc); }
// ----------------------------------------------------- // Функция ServerStart // -----------------------------------------------------
void ServerStart(HWND hWnd) { struct sockaddr_in srv_address; int rc;
// Создаем сокет сервера для работы с потоком данных srv_socket = socket(AF_INET , SOCK_STREAM, 0); if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "socket Error", "Error", MB_OK); return; }
// Устанавливаем адрес IP и номер порта srv_address.sin_family = AF_INET ; srv_address.sin_addr .s_addr = INADDR_ANY ; srv_address.sin_port = htons(SERV_PORT);
// Связываем адрес IP с сокетом if(bind (srv_socket , (LPSOCKADDR )&srv_address, sizeof(srv_address)) == SOCKET_ERROR ) { // При ошибке закрываем сокет closesocket (srv_socket); MessageBox(NULL, "bind Error", "Error", MB_OK); return; }
// Устанавливаем сокет в режим приема для // выполнения ожидания соединения с клиентом if(listen(srv_socket , 1) == SOCKET_ERROR ) { closesocket (srv_socket); MessageBox(NULL, "listen Error", "Error", MB_OK); return; }
// При попытке установки соединения главное окно приложения // получит сообщение WSA_ACCEPT rc = WSAAsyncSelect (srv_socket , hWnd, WSA_ACCEPT, FD_ACCEPT ); if(rc > 0) { closesocket (srv_socket); MessageBox(NULL, "WSAAsyncSelect Error", "Error", MB_OK); return; }
// Выводим в окна Statusbar сообщение о запуске сервера SendMessage(hwndSb, SB_SETTEXT, 0, (LPARAM)"Server started"); }
// ----------------------------------------------------- // Функция ServerStop // -----------------------------------------------------
void ServerStop(HWND hWnd) { // Отменяем приход любых извещений в главную функцию // окна при возникновении любых событий, связанных // с системой Windows Sockets WSAAsyncSelect (srv_socket , hWnd, 0, 0);
// Если сокет был создан, закрываем его if(srv_socket != INVALID_SOCKET) { closesocket (srv_socket); }
// Выводим в окна Statusbar сообщение об останове сервера SendMessage(hwndSb, SB_SETTEXT, 0, (LPARAM)"Server stopped"); }
// ----------------------------------------------------- // Функция WndProc_OnWSAAccept // -----------------------------------------------------
void WndProc_OnWSAAccept(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { int rc;
// При ошибке отменяем поступление извещений // в главное окно приложения if(WSAGETSELECTERROR(lParam) != 0) { MessageBox(NULL, "accept Error", "Error", MB_OK); WSAAsyncSelect (srv_socket , hWnd, 0, 0); return; }
// Определяем размер адреса сокета acc_sin_len = sizeof(acc_sin);
// Разрешаем установку соединения srv_socket = accept (srv_socket, (LPSOCKADDR )&acc_sin, (int FAR *)&acc_sin_len);
if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "accept Error, invalid socket ", "Error", MB_OK); return; }
// Если на данном сокете начнется передача данных от // клиента, в главное окно приложения поступит // сообщение WSA_NETEVENT. // Это же сообщение поступит при разрыве соединения rc = WSAAsyncSelect (srv_socket , hWnd, WSA_NETEVENT, FD_READ | FD_CLOSE ); if(rc > 0) { closesocket (srv_socket); MessageBox(NULL, "WSAAsyncSelect Error", "Error", MB_OK); return; } }
// ----------------------------------------------------- // Функция WndProc_OnWSANetEvent // -----------------------------------------------------
void WndProc_OnWSANetEvent( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { char szTemp[256]; int rc;
// Если на сокете выполняется передача данных, // принимаем и отображаем эти данные в виде // текстовой строки if(WSAGETSELECTEVENT(lParam) == FD_READ ) { rc = recv ((SOCKET)wParam, szTemp, 256, 0); if(rc) { szTemp[rc] = '\0'; MessageBox(NULL, szTemp, "Reсeived data", MB_OK); } return; }
// Если соединение завершено, выводми об этом сообщение else if(WSAGETSELECTEVENT(lParam) == FD_CLOSE ) { MessageBox(NULL, "Connection closed", "Server", MB_OK); } }
Функция WinMain сохраняет идентификатор приложения и затем проверяет, не было ли это приложение уже запущено. При этом используется техника, описанная нами в 22 томе "Библиотеки системного программиста", который называется "Операционная система Windows 95 для программиста".
Далее выполняется обычная регистрация класса главного окна приложения, инициализируется библиотека орагнов управления общего назначения и создается главное окно приложения. После этого окно отображается на экране и запускается цикл обработки сообщений.
Функция окна WndProc обрабатывает как стандартные сообщения WM_CREATE , WM_COMMAND , WM_SIZE , WM_DESTROY , так и сообщения WSA_ACCEPT и WSA_NETEVENT. Первое из них возникает при установке канала связи с клиентом, второе - при поступлении данных от клиента и при разрыве канала связи.
Обработчик сообщения WM_CREATE инициализирует библиотеку Windows Sockets и создает орган управления Statusbar . В окне этого органа управления отображается текущая версия и описание состояния системы Windows Sockets. Если вы не знакомы с указанным органам управления, отсылаем вас к упомянутому 22 тому "Библиотеки системного программиста".
Обработчик сообщения WM_DESTROY вызывает функцию WSACleanup , освобождающую ресурсы, полученные для приложения у системы Windows Sockets и затем завершает цикл обработки сообщений.
Единственное назначение обработчика сообщений WM_SIZE заключается в изменении размеров окна органа управления Statusbar при изменении размеров главного окна приложения.
Обработчик сообщения WM_COMMAND получает управление, когда пользователь выбирает одну из строк в меню File главного меню приложения. Если пользователь выберет строку Start server, будет вызвана функция ServerStart, назначение которой очевидно из ее названия. Аналогично, при выборе строки Stop server будет вызвана функция ServerStop. Если же из меню
File выбрать строку Exit, будет уничтожено главное окно приложения.
Функция ServerStart создает сокет для работы с потоком данных и инициализирует его. При этом мы используем произвольно выбранный порт с номером 5000.
Далее функция выполняет привязку сокета к адресу и переключает сокет в режим приема для выполнения ожидания соединения с клиентом, т. е. выполняет описанные нами ранее действия, необходимые для создания канала связи.
Затем вызывается функция WSAAsyncSelect , которой в качестве последнего параметра передается значение FD_ACCEPT , а в качестве предпоследнего - значение WSA_ACCEPT. В результате при поступлении от клиента запроса на создание канала связи функция главного окна приложения получит сообщение WSA_ACCEPT.
Перед возвратом управления функция ServerStart выводит сообщение о запуске сервера в окне органа управления Statusbar .
Функция ServerStop отменяет все извещения, поступающие в главное окно приложения при возникновении событий в сети, вызывая функцию WSAAsyncSelect с нулевым значением двух последних параметров:
WSAAsyncSelect (srv_socket , hWnd, 0, 0);
Затем она закрывает сокет, вызывая функцию closesocket , и выводит в окне органа управления Statusbar сообщение о завершении работы сервера.
Функция WndProc_OnWSAAccept обрабатывает сообщение WSA_ACCEPT, выполняя описанную нами ранее процедуру создания канала связи.
И, наконец, функция WndProc_OnWSANetEvent выполняет прием строки сообщения, полученной от клиента с отображением этой строки на экране в диалоговой панели.
Файл resource.h, показанный в листинге 5.2 создается автоматически и содержит описание идентификаторов ресурсов приложения.
Листинг 5.2. Файл server/resource.h
//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by server.rc // #define IDI_APPICON 101 #define IDI_APPICON_SM 102 #define IDR_MENU1 105 #define IDM_START 40001 #define IDM_EXIT 40002 #define IDM_STOP 40003
// Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 106 #define _APS_NEXT_COMMAND_VALUE 40004 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif
Ресурсы приложения определены в файле server.rc, который представлен в листинге 5.3.
Листинг 5.3. Файл server/server.rc
//Microsoft Developer Studio generated resource script. // #include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h"
///////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS
///////////////////////////////////////////////////////////////////// // Russian resources
#if !defined(AFX_RESOURCE_DLL) defined(AFX_TARG_RUS) #ifdef _WIN32 LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT #pragma code_page(1251) #endif //_WIN32
#ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////// // // TEXTINCLUDE //
1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END
2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0" END
3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END
#endif // APSTUDIO_INVOKED
///////////////////////////////////////////////////////////////////// // // Icon //
// Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_APPICON ICON DISCARDABLE "server.ico" IDI_APPICON_SM ICON DISCARDABLE "serversm.ico"
///////////////////////////////////////////////////////////////////// // // Menu //
IDR_MENU1 MENU DISCARDABLE BEGIN POPUP "&File" BEGIN MENUITEM "&Start server", IDM_START MENUITEM "S&top server", IDM_STOP MENUITEM SEPARATOR MENUITEM "&Exit", IDM_EXIT END END
#endif // Russian resources /////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. //
///////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED
Если узлы обмениваются данными с использованием датаграммного протокола UDP , им не требуется создавать канал данных, поэтому процедура инициализации получается проще.
Сервер UDP должен создать сокет с помощью функции socket и привязать к нему адрес IP, вызвав функцию bind . Клиент UDP выполняет создание и инициализацию сокетов аналогичным образом с помощью все тех же функций socket и bind.
Такие известные вам из предыдущих приложений функции, как connect, listen и
accept в приложениях UDP использовать не нужно.
Для обмена данными приложения UDP вызывают функции send to и recv from, аналогичные функциям send и recv, но имеющие одно отличие - при вызове этих функций им необходимо задавать дополнительные параметры, имеющие отношение к адресам узлов. Функции sendto нужно указать адрес, по которому будет отправлен пакет данных, а функции
recvfrom - указатель на структуру, в которую будет записан адрес отправителя пакета.
В нашей книге мы привели исходные тексты приложений SERVERD и CLIENTD, которые выполняют те же задачи, что и только что рассмотренные приложения SERVER и CLIENT, но при этом они передают данные при помощи датаграммного протокола UDP .
Исходный текст приложения SERVERD
приведен в листинге 5.7.
Листинг 5.7. Файл serverd/serverd.c
#include #include #include #include #include "resource.h"
// ----------------------------------------------------- // Описание функций // -----------------------------------------------------
// Функция главного окна LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
// Функция для обработки сообщения WM_CREATE BOOL WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct);
// Функция для обработки сообщения WM_DESTROY void WndProc_OnDestroy(HWND hWnd);
// Функция для обработки сообщения WM_COMMAND void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify);
// Функция для обработки сообщения WM_SIZE void WndProc_OnSize(HWND hWnd, UINT state, int cx, int cy);
// Запуск сервера void ServerStart(HWND hWnd);
// Останов сервера void ServerStop(HWND hWnd);
// Обработка сообщения WSA_NETEVENT void WndProc_OnWSANetEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); // Порт сервера #define SERV_PORT 5000
#define IDS_STATUSBAR 802
// Определение кодов сообщений #define WSA_NETEVENT (WM_USER + 1)
// ----------------------------------------------------- // Глобальные переменные // -----------------------------------------------------
// Идентификатор приложения HINSTANCE hInst;
// Название приложения char szAppName[] = "WServerUDP ";
// Заголовок главного окна приложения char szAppTitle[] = "Windows Socket UDP Server Demo";
// Идентификатор органа Statusbar HWND hwndSb;
// Сокет сервера SOCKET srv_socket ;
// ----------------------------------------------------- // Функция WinMain // -----------------------------------------------------
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; HWND hWnd; MSG msg;
hInst = hInstance;
// Преверяем, не было ли это приложение запущено ранее hWnd = FindWindow(szAppName, NULL); if(hWnd) { // Если окно приложения было свернуто в пиктограмму, // восстанавливаем его if(IsIconic(hWnd)) ShowWindow(hWnd, SW_RESTORE);
// Выдвигаем окно приложения на передний план SetForegroundWindow(hWnd); return FALSE; }
// Регистрируем класс окна memset(&wc, 0, sizeof(wc)); wc.cbSize = sizeof(WNDCLASSEX); wc.hIconSm = LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON_SM), IMAGE_ICON, 16, 16, 0); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON), IMAGE_ICON, 32, 32, 0);
wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); wc.lpszClassName = szAppName;
// Вызываем функцию RegisterClassEx, которая выполняет // регистрацию окна if(!RegisterClassEx(&wc)) if(!RegisterClass((LPWNDCLASS)&wc.style)) return FALSE;
InitCommonControls();
// Создаем главное окно приложения hWnd = CreateWindow(szAppName, szAppTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL); if(!hWnd) return(FALSE);
// Отображаем окно ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
// Запускаем цикл обработки сообщений while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
// ----------------------------------------------------- // Функция WndProc // -----------------------------------------------------
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { // Вызываем обработчик сообщения WSA_NETEVENT case WSA_NETEVENT: WndProc_OnWSANetEvent(hWnd, msg, wParam, lParam); break;
HANDLE_MSG(hWnd, WM_CREATE , WndProc_OnCreate); HANDLE_MSG(hWnd, WM_COMMAND , WndProc_OnCommand); HANDLE_MSG(hWnd, WM_SIZE , WndProc_OnSize); HANDLE_MSG(hWnd, WM_DESTROY , WndProc_OnDestroy);
default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } }
// ----------------------------------------------------- // Функция WndProc_OnCreate // -----------------------------------------------------
BOOL WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct) { int rc; WSADATA WSAData; char szTemp[128];
// Инициализация и проверка версии Windows Sockets rc = WSAStartup (MAKEWORD(1, 1), &WSAData); if(rc != 0) { MessageBox(NULL, "WSAStartup Error", "Error", MB_OK); return FALSE; }
// Отображаем описание и версию системы Windows Sockets // в окне органа управления Statusbar wsprintf(szTemp, "Server use %s %s", WSAData.szDescription,WSAData.szSystemStatus);
hwndSb = CreateStatusWindow(WS_CHILD | WS_VISIBLE | WS_BORDER | SBARS_SIZEGRIP, szTemp, hWnd, IDS_STATUSBAR);
return TRUE; }
// ----------------------------------------------------- // Функция WndProc_OnDestroy // ----------------------------------------------------- #pragma warning(disable: 4098) void WndProc_OnDestroy(HWND hWnd) { // Освобождение ресурсов, полученных для // работы с Windows Sockets WSACleanup ();
// Завершение цикла обработки сообщений PostQuitMessage(0); return FORWARD_WM_DESTROY (hWnd, DefWindowProc); }
// ----------------------------------------------------- // Функция WndProc_OnSize // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnSize( HWND hWnd, UINT state, int cx, int cy) { SendMessage(hwndSb, WM_SIZE , cx, cy); return FORWARD_WM_SIZE (hWnd, state, cx, cy, DefWindowProc); }
// ----------------------------------------------------- // Функция WndProc_OnCommand // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify) { switch (id) { case IDM_EXIT:
// Уничтожение главного окна прилоджения DestroyWindow(hWnd); break;
case IDM_START:
// Запуск сервера ServerStart(hWnd); break;
case IDM_STOP:
// Останов сервера ServerStop(hWnd); break;
default: MessageBox(NULL, "Unknown command", "Error", MB_OK); }
return FORWARD_WM_COMMAND (hWnd, id, hwndCtl, codeNotify, DefWindowProc); }
// ----------------------------------------------------- // Функция ServerStart // -----------------------------------------------------
void ServerStart(HWND hWnd) { struct sockaddr_in srv_address; int rc;
// Создаем сокет сервера для работы с потоком данных srv_socket = socket(AF_INET , SOCK_DGRAM, 0); if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "socket Error", "Error", MB_OK); return; }
// Устанавливаем адрес IP и номер порта srv_address.sin_family = AF_INET ; srv_address.sin_addr .s_addr = INADDR_ANY ; srv_address.sin_port = htons(SERV_PORT);
// Связываем адрес IP с сокетом if(bind (srv_socket , (LPSOCKADDR )&srv_address, sizeof(srv_address)) == SOCKET_ERROR ) { // При ошибке закрываем сокет closesocket (srv_socket); MessageBox(NULL, "bind Error", "Error", MB_OK); return; }
// Если на данном сокете начнется передача данных от // клиента, в главное окно приложения поступит // сообщение WSA_NETEVENT. rc = WSAAsyncSelect (srv_socket , hWnd, WSA_NETEVENT, FD_READ ); if(rc > 0) { closesocket (srv_socket); MessageBox(NULL, "WSAAsyncSelect Error", "Error", MB_OK); return; }
// Выводим в окна Statusbar сообщение о запуске сервера SendMessage(hwndSb, SB_SETTEXT, 0, (LPARAM)"Server started"); }
// ----------------------------------------------------- // Функция ServerStop // -----------------------------------------------------
void ServerStop(HWND hWnd) { // Отменяем приход любых извещений в главную функцию // окна при возникновении любых событий, связанных // с системой Windows Sockets WSAAsyncSelect (srv_socket , hWnd, 0, 0);
// Если сокет был создан, закрываем его if(srv_socket != INVALID_SOCKET) { closesocket (srv_socket); }
// Выводим в окна Statusbar сообщение об останове сервера SendMessage(hwndSb, SB_SETTEXT, 0, (LPARAM)"Server stopped"); }
// ----------------------------------------------------- // Функция WndProc_OnWSANetEvent // -----------------------------------------------------
void WndProc_OnWSANetEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { char szTemp[256]; int rc; SOCKADDR _IN addr; int nAddrSize; char szBuf[80]; LPSTR lpAddr;
if(WSAGETSELECTEVENT(lParam) == FD_READ ) { // Принимаем данные rc = recv from((SOCKET)wParam, szTemp, 256, 0, (PSOCKADDR )&addr, &nAddrSize);
if(rc) { szTemp[rc] = '\0'; strcpy(szBuf, "Received from ");
// Преобразовываем адрес IP удаленного клиента // в текстовую строку lpAddr = inet_ntoa (addr.sin_addr ); strcat(szBuf, lpAddr);
// Отображаем адрес удаленного клиента // и полученную от него строку MessageBox(NULL, szTemp, szBuf, MB_OK); } return; } }
Приложение SERVERD во многом напоминает приложение SERVER, поэтому мы рассмотрим только отличия.
Первое отличие заключается в том, что при запуске сервера тип создаваемого сокета указывается как SOCK_DGRAM:
srv_socket = socket(AF_INET , SOCK_DGRAM, 0);
Далее выполняется инициализация сокета и его привязка к адресу, для чего вызывается функция bind . Эта операция, как и в случае протокола TCP, не обязательна.
После выполнения привязки можно приступать к получению пакетов данных от клиента. Для того чтобы не выполнять ожидание пакетов в цикле, наше приложение использует функцию WSAAsyncSelect , указывая с ее помощью, что при получении пакетов данных главное окно приложения должно получать сообщения с кодом WSA_NETEVENT:
rc = WSAAsyncSelect (srv_socket , hWnd, WSA_NETEVENT, FD_READ );
На этом инициализация сервера завершается.
Обработчик сообщения WSA_NETEVENT читает полученный пакет с помощью функции recv from:
SOCKADDR _IN addr; int nAddrSize; rc = recv from((SOCKET)wParam, szTemp, 256, 0, (PSOCKADDR )&addr, &nAddrSize);
В качестве предпоследнего параметра этой функции передается адрес структуры типа SOCKADDR _IN, куда функция записывает адрес узла, приславшего пакет. Последний параметр функции recv from должен содержать размер указанной структуры.
Ниже мы привели возможные коды ошибок для функции recv from.
Заметим, что при обмене данных с использованием протокола UDP на каждый вызов функции send to должен приходиться один вызов функции recv from. Если же вы передается данные через канал с использованием протокола TCP, на один вызов функции send может приходиться несколько вызовов функции recv.
Для отображения адреса узла, пославшего пакет UDP , наше приложение преобразует этот адрес в символьную строку с помощью функции inet_ntoa :
lpAddr = inet_ntoa (addr.sin_addr );
Эта функция записывает полученную строку в статическую область памяти, принадлежащую системе Windows Sockets, поэтому для дальнейшего использования необходимо скопировать строку до следующего вызова любой функции программного интерфейса Windows Sockets.
int bind ( SOCKET sock, const struct sockaddr FAR * addr, int namelen);
Параметр sock должен содержать дескриптор сокета, созданного функцией socket .
В поле addr следует записать указатель на подготовленную структуру SOCKADDR , а в поле namelen - размер этой структуры.
В случае ошибки функция bind возвращает значение SOCKET_ERROR . Дальнейший анализ причин ошибки следует выполнять при помощи функции WSAGetLastError . Возможные коды ошибок перечислены ниже:
Пример вызова функции bind показан ниже:
if(bind (srv_socket , (LPSOCKADDR )&srv_address, sizeof(srv_address)) == SOCKET_ERROR ) { closesocket (srv_socket); MessageBox(NULL, "bind Error", "Error", MB_OK); return; }
Первый из них предполагает посылку пакетов данных от одного узла другому (или сразу нескольким узлам) без получения подтверждения о доставке и даже без гарантии того, что передаваемые пакеты будут получены в правильной последовательности. Примером такого протокола может служить протокол UDP (User Datagram Protocol ), который используется в сетях TCP/IP, или протокол IPX , который является базовым в сетях Novell NetWare .
Основные преимущества датаграмных протоколов заключаются в высоком быстродействии и возможности широковещательной передачи данных, когда один узел отправляет сообщения, а другие их получают, причем все одновременно.
Второй способ передачи данных предполагает создание канала передачи данных между двумя различными узлами сети. При этом канал создается средствами датаграммных протоколов, однако доставка пакетов в канале является гарантированной. Пакеты всегда доходят в целостности и сохранности, причем в правильном порядке, хотя быстродействие получается в среднем ниже за счет посылки подтверждений. Примерами протоколов, использующих каналы связи, могут служить протоколы TCP и SPX (протокол NETBIOS допускает передачу данных с использованием как датаграмм, так и каналов связи).
Для передачи данных с использованием любого из перечисленных выше способов каждое приложение должно создать объект, который называется сокетом.
По своему назначению сокет больше всего похож на идентификатор файла (file handle), который нужен для выполнения над файлом операций чтения или записи. Прежде чем приложение, запущенное на узле сети сможет выполнять передачу или прием данных, оно должно создать сокет и проинициализировать его, указав некоторые параметры.
Для сокета необходимо указать три параметра. Это IP адрес, связанный с сокетом, номер порта, для которого будут выполняться операции передачи данных, а также тип сокета.
Что касается последнего параметра (тип сокета), то существуют сокеты двух типов. Первый тип предназначен для передачи данных в виде датаграмм, второй - с использованием каналов связи.
SOCKET socket (int af, int type, int protocol);
Параметр af определяет формат адреса. Для этого параметра вы должны указывать значение AF_INET , что соответствует формату адреса, принятому в Internet.
Параметры type и protocol определяют, сооветственно, тип сокета и протокол, который будет использован для данного сокета.
Можно указывать сокеты следующих двух типов:
Что же касается параметра protocol, то вы можете указать для него нулевое значение.
В случае успеха функция socket возвращает дескриптор, который нужно использовать для выполнения всех операций над данным сокетом. Если же произошла ошибка, эта функция возвращает значение INVALID_SOCKET . Для анализа причины ошибки вы должны вызвать функцию WSAGetLastError , которая в данном случае может вернуть один из следующих кодов ошибки:
Ниже мы привели фрагмент кода, в котором создается сокет для передачи данных с использованием протокола TCP:
srv_socket = socket(AF_INET , SOCK_STREAM, 0); if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "socket Error", "Error", MB_OK); return; }
Для установки соединения в приложении используется функция SetConnection:
SOCKADDR _IN dest_sin; void SetConnection(HWND hWnd) { PHOSTENT phe;
// Создаем сокет srv_socket = socket(AF_INET , SOCK_STREAM, 0); if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "socket Error", "Error", MB_OK); return; }
// Устанавливаем адрес IP и номер порта dest_sin.sin_family = AF_INET ;
// Определяем адрес узла phe = gethostbyname ("localhost "); if(phe == NULL) { closesocket (srv_socket); MessageBox(NULL, "gethostbyname Error", "Error", MB_OK); return; }
// Копируем адрес узла memcpy((char FAR *)&(dest_sin.sin_addr ), phe->h_addr , phe->h_length);
// Копируем номер порта dest_sin.sin_port = htons(SERV_PORT);
// Устанавливаем соединение if(connect(srv_socket , (PSOCKADDR )&dest_sin, sizeof(dest_sin)) < 0) { closesocket (srv_socket); MessageBox(NULL, "connect Error", "Error", MB_OK); return; } }
Вначале с помощью функции socket эта функция создает сокет. Затем выполняется заполнение адресной информацией структуры dest_sin.
Обратите внимание, что для получения адреса IP мы воспользовались функцией gethostbyname , указав ей имя узла localhost .
Это имя отображается в файле HOSTS на адрес 127.0.0.1 :
localhost
Адрес 127.0.0.1 является локальным. Вы можете использовать его для тестирования приложений, выполняющих обмен данными при помощи протокола TCP/IP, запуская сервер и клиент на одном и том же компьютере.
После заполнения структуры с адресной информацией функция connect создает канал связи с сервером.
Прежде всего вы должны переключить сокет в режим приема для выполнения ожидания соединения с клиентом при помощи функции listen:
int listen(SOCKET sock, int backlog);
Через параметр sock функции необходимо передать дескриптор сокета, который будет использован для создания канала. Параметр backlog задает максимальный размер очереди для ожидания соединения (можно указывать значения от 1 до 5). Очередь содержит запросы на установку соединений для каждой пары значений (адрес IP, порт).
Ниже мы привели список возможных кодов ошибок для функции listen.
Ниже мы привели пример вызов функции listen:
if(listen(srv_socket , 1) == SOCKET_ERROR ) { closesocket (srv_socket); MessageBox(NULL, "listen Error", "Error", MB_OK); return; }
Далее необходимо выполнить ожидание соединения. Это можно выполнить двумя различными способами.
Первый способ заключается в циклическом вызове функции accept до тех пор, пока не будет установлено соединение. Затем можно будет приступать к обмену данными.
Функция accept имеет следующий прототип:
SOCKET accept (SOCKET sock, struct sockaddr FAR * addr, int FAR * addrlen);
Через параметр sock необходимо указать дескриптор сокета, который находится в режиме приема для выполнения ожидания.
Параметр addr должен содержать адрес буфера, в который будет записан адрес узла, подключившегося к серверу. Размер этого буфера необходимо указать в переменной типа int, адрес которой передается через параметр addrlen.
Если ожидание соединения в цикле не вызывает у вас особого энтузиазма, можно предложить более удобный способ, основанный на использовании расширения программного интерфейса Windows Socket, предназначенного для выполнения асинхронных операций.
Приведем список возможных кодов ошибок для функции accept.
Вместо того чтобы ожидать соединение, вызывая в цикле функцию accept , ваше приложение может вызвать один раз функцию WSAAsyncSelect , указав ей, что при получении запроса на установку соединения функция окна вашего приложения должна получить сообщение:
#define WSA_ACCEPT (WM_USER + 1) // При попытке установки соединения главное окно приложения // получит сообщение WSA_ACCEPT rc = WSAAsyncSelect (srv_socket , hWnd, WSA_ACCEPT, FD_ACCEPT ); if(rc > 0) { closesocket (srv_socket); MessageBox(NULL, "WSAAsyncSelect Error", "Error", MB_OK); return; }
В данном случае ожидание соединения выполняется для сокета srv_socket . Последний параметр функции имеет значение FD_ACCEPT . Это означает, что при попытке создания канала связи функция окна с идентификатором hWnd получит сообщение WSA_ACCEPT, определенное в вашем приложении.
Обработчик этого сообщения может выглядеть, например, следующим образом:
void WndProc_OnWSAAccept(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { int rc;
// При ошибке отменяем поступление извещений // в главное окно приложения if(WSAGETSELECTERROR(lParam) != 0) { MessageBox(NULL, "accept Error", "Error", MB_OK); WSAAsyncSelect (srv_socket , hWnd, 0, 0); return; }
// Определяем размер адреса сокета acc_sin_len = sizeof(acc_sin);
// Разрешаем установку соединения srv_socket = accept (srv_socket, (LPSOCKADDR )&acc_sin, (int FAR *)&acc_sin_len);
if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "accept Error, invalid socket ", "Error", MB_OK); return; }
// Если на данном сокете начнется передача данных от // клиента, в главное окно приложения поступит // сообщение WSA_NETEVENT. // Это же сообщение поступит при разрыве соединения rc = WSAAsyncSelect (srv_socket , hWnd, WSA_NETEVENT, FD_READ | FD_CLOSE ); if(rc > 0) { closesocket (srv_socket); MessageBox(NULL, "WSAAsyncSelect Error", "Error", MB_OK); return; } }
В данном случае обработчик сообщения вначале вызывает функцию accept , выполняющую создание канала передачи данных. После этого функция WSAAsyncSelect вызывается еще один раз для того чтобы установить асинхронную обработку приема данных от удаленного клиента, а также обработку ситуации разрыва канала связи.
int closesocket (SOCKET sock);
Ниже мы перечислили коды ошибок для этой функции :
Нравится вам такая ситуация или нет, но у Microsoft и Netscape разные подходы к способу выравнивания текста (и это не единственный предмет для разногласий).
Что же делать вам? Какой способ выравнивания использовать при подготовке своих страниц?
Очевидно, вам придется принимать решение самостоятельно. В качестве компромисса можно выравнивать текст только по левой границе, и на наш взгляд, это не самое плохое решение. Важно, чтобы пользователь видел вашу страницу правильно оформленной вне зависимости от того, с каким навигатором он работает.
Практическое введение в Internet, E-Mail, FTP, WWW и HTML
Инициализация приложения и завершение его работы
В процессе инициализации приложение должно зарегистрировать себя в библиотеке WSOCK32.DLL , которая предоставляет приложениям интерфейс Windows Sockets в среде операционных систем Microsoft Windows 95 и Microsoft Windows NT.Для инициализации необходимо вызвать функцию WSAStartup , определенную следующим образом:
int WSAStartup (WORD wVersionRequested, LPWSADATA lpWSAData);
В параметре wVersionRequested вы должны указать версию интерфейса Windows Sockets, необходимую для работы вашего приложения. Старший байт параметра указывает младший номер версии (minor version), младший байт - старший номер версии (major version).
Перед вызовом функции WSAStartup параметр lpWSAData должен содержать указатель на структуру типа WSADATA , в которую будут записаны сведения о конкретной реализации интерфейса Windows Sockets.
В случае успеха функция WSAStartup возвращает нулевое значение. Если происходит ошибка, возвращается одно из следующих значений:
| Значение | Описание |
| WSASYSNOTREADY | Сетевое программное обеспечение не готово для работы |
| WSAVERNOTSUPPORTED | Функция не поддерживается данной реализацией интерфейса Windows Sockets |
| WSAEINVAL | Библиотека DLL, обеспечивающая интерфейсe Windows Sockets, не соответствуетверсии, указанной приложением указанной в параметре wVersionRequested |
Ниже мы представили фрагмент исходного текста приложения SERVER, которое будет описано ниже, выполняющий инициализацию интерфейса Windows Sockets:
rc = WSAStartup (MAKEWORD(1, 1), &WSAData); if(rc != 0) { MessageBox(NULL, "WSAStartup Error", "Error", MB_OK); return FALSE; }
// Отображаем описание и версию системы Windows Sockets // в окне органа управления Statusbar wsprintf(szTemp, "Server use %s %s", WSAData.szDescription,WSAData.szSystemStatus);
hwndSb = CreateStatusWindow(WS_CHILD | WS_VISIBLE | WS_BORDER | SBARS_SIZEGRIP, szTemp, hWnd, IDS_STATUSBAR);
В операционных системах Microsoft Windows 95 и Microsoft Windows NT версии 3.51 встроена система Windows Sockets версии 1.1, поэтому именно это значение мы указали при вызове функции WSAStartup .
В следующих нескольких строках только что приведенного фрагмента кода содержимое двух полей структуры типа WSADATA отображается в окне органа управления Statusbar .
Определение структуры WSADATA и указателя на нее выглядят следующим образом:
typedef struct WSAData { WORD wVersion; WORD wHighVersion; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR * lpVendorInfo; } WSADATA ; typedef WSADATA FAR *LPWSADATA;
Использованные выше поля szDescription и szSystemStatus после вызова функции WSAStartup содержат, соответственно, описание конкретной реализации интерфейса Windows Socket и текущее состояние этого интерфейса в виде текстовых строк.
В полях wVersion и wHighVersion записаны, соответственно, версия спецификации Windows Socket, которую будет использовать приложение, и версия спецификации, которой соответствует конкретная реализация интерфейса Windows Socket.
Приложение может одновременно создавать несколько сокетов, например, для использования в разных подзадачах одного процесса. В поле iMaxSockets хранится максимальное количество сокетов, которое можно получить для одного процесса.
В поле iMaxUdpDg записан максимальный размер пакета данных, который можно переслать с использованием датаграммного протокола UDP .
И, наконец, поле lpVendorInfo содержит указатель на дополнительную информацию, формат которой зависит от фирмы-изготовителя конкретной реализации системы Windows Sockets.
Перед тем, как завершить свою работу, приложение должно освободить ресурсы, полученные у операционной системы для работы с Windows Sockets. Для выполнения этой задачи приложение должно вызвать функцию WSACleanup , определенную так, как это показано ниже:
int WSACleanup (void);
Эта функция может возвратить нулевое значение при успехе или значение SOCKET_ERROR в случае ошибки.
Для получения кода ошибки вы должны воспользоваться функцией с именем WSAGetLastError :
int WSAGetLastError (void);
Функция WSAGetLastError позволяет определить код ошибки при неудачном завершении практически всех функций интерфейса Windows Sockets. Вы должны вызывать ее сразу вслед за функцией, завершившейся неудачно.
Если ошибка возникла при выполнении функции WSACleanup , функция WSAGetLastError может вернуть одно из следующих значений:
| Значение | Описание |
| WSANOTINITIALISED | Интерфейс Windows Sockets не был проинициализирован функцией WSAStartup |
| WSAENETDOWN | Сбой сетевого программного обеспечения |
| WSAEINPROGRESS | Во время вызыва функции WSACleanup выполнялась одна из блокирующих функций интерфейса Windows Sockets |
Некоторые функции интерфейса Windows Sockets способны блокировать работу приложения, так как они не возвращают управление до своего завершения. В операционных системах, использующих вытесняющую мультизадачность, к которым относятся Microsoft Windows 95 и Microsoft Windows NT, это не приводит к блокировке всей системы. Как вы увидите дальше, можно избежать использования блокирующих функций, так как для них в интерфейсе Windows Sockets существует замена.
ИНТЕРФЕЙС WINDOWS SOCKETS
Во второй главе нашей книги мы рассказали вам о том, как установить соединение с использованием протокола TCP/IP. Вы также научились работать в Internet в среде операционных систем Microsoft Windows 95, Microsoft Windows NT, а также OS/2 Warp Connect.
Нашей следующей задачей будет освоение основ программирования для сетей TCP/IP. Теперь мы расскажем вам о том, как составлять сетевые приложения, выполняющие обмен данными по глобальным и локальным сетям с использованием данного протокола. При этом из-за недостатка места в книге мы ограничимся описанием программного интерфейса Windows Sockets , который имеется в операционных системах Microsoft Windows 95 и Microsoft Windows NT.
Интерфейс Windows Sockets предоставляет в ваше распоряжение удобные средства организации передачи данных с использованием датаграмм и каналов связи между узлами сети.
В восьмом томе "Библиотеки системного программиста", который называется "Локальные сети персональных компьютеров. Использование протоколов IPX , SPX , NETBIOS " мы приводили соновные сведения об использовании протоколов IPX, SPX и NETBIOS в программах, передающих данные по сети Novell NetWare. Интерфейс Windows Sockets позволяет передавать данные не только с использованием протокола TCP/IP, но и других протоколов, например, IPX/SPX . Вы можете узнать об этом подробнее из документации, которая поставляется в составе SDK для программного интерфейса WIN32 .
Параметры сокета
Перед использованием вы должны задать параметры сокета.Для этого вы должны подготовить структуру типа sockaddr , определение которой показано ниже:
struct sockaddr { u_short sa_family; char sa_data[14]; }; typedef struct sockaddr SOCKADDR ; typedef struct sockaddr *PSOCKADDR ; typedef struct sockaddr FAR *LPSOCKADDR ;
Для работы с адресами в формате Internet используется другой вариант этой структуры, в котором детализируется формат поля sa_data:
struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; typedef struct sockaddr_in SOCKADDR _IN; typedef struct sockaddr_in *PSOCKADDR _IN; typedef struct sockaddr_in FAR *LPSOCKADDR _IN;
Поле sin_family определяет тип адреса. Вы должны записать в это поле значение AF_INET , которое соответствует типу адреса, принятому в Internet:
srv_address.sin_family = AF_INET ;
Поле sin_port определяет номер порта, который будет использоваться для передачи данных.
Порт - это просто идентификатор программы, выполняющей обмен на сети. На одном узле может одновременно работать несколько программ, использующих разные порты.
Особенностью поля sin_port является использование так называемого сетевого формата данных. Этот формат отличается от того, что принят в процессорах с архитектурой Intel, а именно, младшие байты данных хранятся по старшим адресам памяти. Напомним, что архитектура процессоров Intel подразумевает хранение старщих байтов данных по младшим адресам.
Универсальный сетевой формат данных удобен при организации глобальных сетей, так как в узлах такой сети могут использоваться компьютеры с различной архитектурой.
Для выполнения преобразований из обычного формат в сетевой и обратно в интерфейсе Windows Sockets предусмотрен специальный набор функций. В частности, для заполнения поля sin_port нужно использовать функцию htons, выполняющую преобразование 16-разрядных данных из формата Intel в сетевой формат.
Ниже мы показали, как инициализируется поле sin_port в приложении SERVER, описанном далее:
#define SERV_PORT 5000 srv_address.sin_port = htons(SERV_PORT);
Вернемся снова к структуре sockaddr_in .
Поле sin_addr этой структуры представляет собой структуру in_addr:
struct in_addr { union { struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { u_short s_w1,s_w2; } S_un_w; u_long S_addr; } S_un; }; #define s_addr S_un.S_addr #define s_host S_un.S_un_b.s_b2 #define s_net S_un.S_un_b.s_b1 #define s_imp S_un.S_un_w.s_w2 #define s_impno S_un.S_un_b.s_b4 #define s_lh S_un.S_un_b.s_b3
При инициализации сокета в этой структуре вы должны указать адрес IP, с которым будет работать данный сокет.
Если сокет будет работать с любым адресом (например, вы создаете сервер, который будет доступен из узлов с любым адресом), адрес для сокета можно указать следующим образом:
srv_address.sin_addr .s_addr = INADDR_ANY ;
В том случае, если сокет будет работать с определенным адресом IP (например, вы создаете приложение-клиент, которое будет обращаться к серверу с конкретным адресом IP), в указанную структуру необходимо записать реальный адрес.
Датаграммный протокол UDP позволяет посылать пакеты данных одновременно всем рабочим станциям в широковещательном режиме. Для этого вы должны указать адрес как INADDR_BROADCAST.
Если вам известен адрес в виде четырех десятичных чисел, разделенных точкой (именно так его вводит пользователь), то вы можете заполнить поле адреса при помощи функции inet_addr :
dest_sin.sin_addr .s_addr = inet_addr ("200.200.200.201");
В случае ошибки функция возвращает значение INADDR_NONE , что можно использовать для проверки.
Обратное преобразование адреса IP в текстовую строку можно при необходимости легко выполнить с помощью функции inet_ntoa , имеющей следующий прототип:
char FAR * inet_ntoa (struct in_addr in);
При ошибке эта функция возвращает значение NULL.
Однако чаще всего пользователь работает с доменными именами, используя сервер DNS или файл HOSTS . В этом случае вначале вы должны воспользоваться функцией gethostbyname , возвращающей адрес IP, а затем записать полученный адрес в структуру sin_addr :
PHOSTENT phe; phe = gethostbyname ("ftp.microsoft.com"); if(phe == NULL) { closesocket (srv_socket); MessageBox(NULL, "gethostbyname Error", "Error", MB_OK); return; } memcpy((char FAR *)&(dest_sin.sin_addr ), phe->h_addr , phe->h_length);
В случае ошибки функция gethostbyname возвращает NULL. При этом причину ошибки можно выяснить, проверив код возврата функции WSAGetLastError .
Если же указанный узел найден в базе DNS или в файле HOSTS , функция gethostbyname возвращает указатель на структуру hostent , описанную ниже:
struct hostent { char FAR * h_name; // имя узла char FAR * FAR * h_aliases; // список альтернативных имен short h_addr type; // тип адреса узла short h_length; // длина адреса char FAR * FAR * h_addr _list; // список адресов #define h_addr h_addr_list[0] // адрес }; typedef struct hostent *PHOSTENT ; typedef struct hostent FAR *LPHOSTENT ;
Искомый адрес находится в первом элемента списка h_addr _list[0], на который можно также ссылаться при помощи h_addr. Длина поля адреса находится в поле h_length.
Передача и прием данных
После того как канал создан, можно начинать передачу данных. Для передачи данных при помощи протокола гарантированной доставки TCP вы можете воспользоваться функциями send и recv , которые входят в программный интерфейс Windows Sockets.Функция передачи данных send имеет три параметра - дескриптор сокета sock, на котором выполняется передача, адрес буфера buf, содержащего передаваемое сообщение, размер этого буфера bufsize и флаги flags:
int send (SOCKET sock, const char FAR* buf, int bufsize, int flags);
В нашем приложении CLIENT мы передаем данные серверу следующим образом:
char szBuf[80]; lstrcpy(szBuf, "Test string"); send (srv_socket , szBuf, lstrlen(szBuf), 0);
Параметры функции recv , предназначенной для приема данных, аналогичны параметрам функции send :
int recv (SOCKET sock, char FAR * buf, int bufsize, int flags);
Заметим, что функции recv и send возвращают количество, соответственно, принятых и переданных байт данных. Приложение, которое принимает данные, должно вызывать функцию recv в цикле до тех пор, пока не будут приняты все переданные данные. При этом на один вызов функции send может приходиться несколько вызовов функции recv.
В случае ошибки обе эти функции возвращают значение SOCKET_ERROR . Для анализа причин возникновения ошибки следует воспользоваться функцией WSAGetLastError .
Приведем список кодов ошибок, которые могут возникать при вызове команды 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 | Сброс соединения удаленным узлом |
При выполнении функции recv могут возникать следующие ошибки:
| Код ошибки | Описание |
| WSANOTINITIALISED | Перед использованием функции необходимо вызвать функцию WSAStartup |
| WSAENETDOWN | Сбой в сети |
| WSAENOTCONN | Сокет не подсоединен |
| WSAEINTR | Работа функции была отменена при помощи функции WSACancelBlockingCall |
| WSAEINPROGRESS | Выполняется блокирующая функция интерфейса Windows Sockets |
| WSAENOTSOCK | Указанный в параметре дескриптор не является сокетом |
| WSAESHUTDOWN | Сокет был закрыт функцией shutdown |
| WSAEWOULDBLOCK | Сокет отмечен как неблокирующий, но запрошенная операция приведет к блокировке |
| WSAEMSGSIZE | Размер пакета данных превышает размер буфера, в результате чего принятый пакет был обрезан |
| WSAEINVAL | Сокет не был подключен функцией bind |
| WSAECONNABORTED | Сбой из-за слишком большой задержки или по другой причине |
| WSAECONNRESET | Сброс соединения удаленным узлом |
Наше приложение SERVER
демонстрирует асинхронный прием данных.
После установки канала связи оно вызывает функцию WSAAsyncSelect , указывая ей в качестве последнего параметра комбинацию констант FD_READ и FD_CLOSE . При этом функция главного окна приложения будет получать сообщение WSA_NETEVENT в тот момент времени, когда чтение данных не вызовет блокировки приложения:
#define WSA_NETEVENT (WM_USER + 2) rc = WSAAsyncSelect (srv_socket , hWnd, WSA_NETEVENT, FD_READ | FD_CLOSE );
При необходимости выполнения асинхронной посылки данных вы можете указать функции WSAAsyncSelect еще и параметр FD_WRITE .
Если функция WSAAsyncSelect выполнилась успешно, она возвращает нулевое значение, при ошибке - значение SOCKET_ERROR.
В зависимости от значения последнего параметра могут возникать разные коды ошибки, которые можно получить при помощи функции WSAGetLastError. Следующие ошибки могут возникнуть при любом значении параметра:
| Код ошибки | Описание |
| WSANOTINITIALISED | Перед использованием функции необходимо вызвать функцию WSAStartup |
| WSAENETDOWN | Сбой в сети |
| WSAEINVAL | Сокет не был подключен функцией bind |
| WSAEINPROGRESS | Выполняется блокирующая функция интерфейса Windows Sockets |
При использовании параметра FD_CONNECT возможно появление следующих ошибок:
| Код ошибки | Описание |
| WSAEADDRINUSE | Указанный адрес уже используется |
| WSAEADDRNOTAVAIL | Указанный адрес не доступен |
| WSAEAFNOSUPPORT | Для данного сокета нельзя использовать указанное семейство адресов |
| WSAECONNREFUSED | Попытка установления канала связи была отвергнута |
| WSAEDESTADDRREQ | Необходимо указать адрес получателя пакета |
| WSAEFAULT | Неправильно указан параметр namelen |
| WSAEINVAL | Сокет уже подключен к адресу |
| WSAEISCONN | Сокет уже подсоединен |
| WSAEMFILE | Больше нет доступных дескрипторов |
| WSAENETUNREACH | Из данного узла и в данное время невозможно получить доступ к сети |
| WSAENOBUFS | Нет места для размещения буфера |
| WSAENOTCONN | Сокет на подключен |
| WSAENOTSOCK | Указан дескриптор файла, а не сокета |
| WSAETIMEDOUT | При попытке установления канала связи возникла задержка во времени |
| Код ошибки | Описание |
| WSAENETDOWN | Сбой в сети |
| WSAECONNRESET | Сброс соединения удаленным узлом |
| WSAECONNABORTED | Сбой из-за слишком большой задержки или по другой причине |
Обработчик сообщения WSA_NETEVENT должен выполнить анализ причины, по которой он был вызван, так как за один вызов функции WSAAsyncSelect можно задать несколько событий, вызывающих генерацию сообщения. Этот анализ проводится, например, следующим образом:
void WndProc_OnWSANetEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { char szTemp[256]; int rc;
// Если на сокете выполняется передача данных, // принимаем и отображаем эти данные в виде // текстовой строки if(WSAGETSELECTEVENT(lParam) == FD_READ ) { rc = recv ((SOCKET)wParam, szTemp, 256, 0); if(rc) { szTemp[rc] = '\0'; MessageBox(NULL, szTemp, "Reсeived data", MB_OK); } return; }
// Если соединение завершено, выводми об этом сообщение else if(WSAGETSELECTEVENT(lParam) == FD_CLOSE ) { MessageBox(NULL, "Connection closed", "Server", MB_OK); } }
Отметим, что параметр wParam содержит дескриптор сокета, на котором выполняется передача данных, а параметр lParam - код события, которое произошло в сети.
Приложение CLIENT
Исходные тексты приложения CLIENT, предназначенного для совместного использования с только что описанным приложением SERVER, приведены в листинге 5.4.После запуска этого приложения вы должны создать канал связи с приложением SERVER, выбрав из меню File строку Connect, после чего можно посылать сообщение Test message, выбирая из этого же меню строку Send Message.
Сервер, получив сообщение, отобразит его на экране в отдельной диалоговой панели.
Листинг 5.4. Файл client/client.c
#include
// ----------------------------------------------------- // Описание функций // -----------------------------------------------------
// Функция главного окна LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
// Функция для обработки сообщения WM_CREATE BOOL WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct);
// Функция для обработки сообщения WM_DESTROY void WndProc_OnDestroy(HWND hWnd);
// Функция для обработки сообщения WM_COMMAND void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify);
// Функция для обработки сообщения WM_SIZE void WndProc_OnSize(HWND hWnd, UINT state, int cx, int cy);
// Установка соединения void SetConnection(HWND hWnd);
// Передача сообщения void SendMsg(HWND hWnd);
// Порт сервера #define SERV_PORT 5000
#define IDS_STATUSBAR 802
// ----------------------------------------------------- // Глобальные переменные // -----------------------------------------------------
// Идентификатор приложения HINSTANCE hInst;
// Название приложения char szAppName[] = "WClient";
// Заголовок главного окна приложения char szAppTitle[] = "Windows Socket Client Demo";
// Идентификатор органа управления Statusbar HWND hwndSb;
// Сокет клиента SOCKET srv_socket ;
// Локальный сокет SOCKADDR _IN local_sin;
// Адрес сервера SOCKADDR _IN dest_sin;
// ----------------------------------------------------- // Функция WinMain // -----------------------------------------------------
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; HWND hWnd; MSG msg;
hInst = hInstance;
// Преверяем, не было ли это приложение запущено ранее hWnd = FindWindow(szAppName, NULL); if(hWnd) { // Если окно приложения было свернуто в пиктограмму, // восстанавливаем его if(IsIconic(hWnd)) ShowWindow(hWnd, SW_RESTORE);
// Выдвигаем окно приложения на передний план SetForegroundWindow(hWnd); return FALSE; }
// Регистрируем класс окна memset(&wc, 0, sizeof(wc));
// Поля wc.cbSize и wc.hIconSm определены в структуре // WNDCLASSEX, которой можно пользоваться для // регистрации класса окна в Windows 95 wc.cbSize = sizeof(WNDCLASSEX);
// Поле wc.hIconSm задает идентификатор маленькой // пиктограммы, которая будет отображаться в левой // части заголовка окна (в области системного меню). // Загружаем пиктограмму из ресурсов приложения при // помощи функции LoadImage, так как функция // LoadIcon может загрузить только обычную пиктограмму wc.hIconSm = LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON_SM), IMAGE_ICON, 16, 16, 0);
// Завершаем заполнение структуры WNDCLASSEX wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst;
// Для загрузки обычной пиктограммы вы можете // использовать функцию LoadImage wc.hIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON), IMAGE_ICON, 32, 32, 0);
wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); wc.lpszClassName = szAppName;
// Вызываем функцию RegisterClassEx, которая выполняет // регистрацию окна if(!RegisterClassEx(&wc))
// В случае ошибки пытаемся зарегистрировать окно // функцией RegisterClass if(!RegisterClass((LPWNDCLASS)&wc.style)) return FALSE;
// Инициализация библиотеки органов управления // общего назначения. Необходима для работы с // органом управления Statusbar InitCommonControls();
// Создаем главное окно приложения hWnd = CreateWindow(szAppName, szAppTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL); if(!hWnd) return(FALSE);
// Отображаем окно ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
// Запускаем цикл обработки сообщений while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
// ----------------------------------------------------- // Функция WndProc // -----------------------------------------------------
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { // Для сообщения WM_CREATE назначаем обработчик, // расположенный в функции WndProc_OnCreate HANDLE_MSG(hWnd, WM_CREATE , WndProc_OnCreate);
// Для сообщения WM_COMMAND назначаем обработчик, // расположенный в функции WndProc_OnCommand HANDLE_MSG(hWnd, WM_COMMAND , WndProc_OnCommand);
// Для сообщения WM_SIZE назначаем обработчик, // расположенный в функции WndProc_OnSize HANDLE_MSG(hWnd, WM_SIZE , WndProc_OnSize);
// Для сообщения WM_DESTROY назначаем обработчик, // расположенный в функции WndProc_OnDestroy HANDLE_MSG(hWnd, WM_DESTROY , WndProc_OnDestroy);
default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } }
// ----------------------------------------------------- // Функция WndProc_OnCreate // -----------------------------------------------------
BOOL WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct) { int rc; WSADATA WSAData; char szTemp[128];
// Инициализация и проверка версии Windows Sockets rc = WSAStartup (MAKEWORD(1, 1), &WSAData); if(rc != 0) { MessageBox(NULL, "WSAStartup Error", "Error", MB_OK); return FALSE; }
// Отображаем описание и версию системы Windows Sockets // в окне органа управления Statusbar wsprintf(szTemp, "Server use %s %s", WSAData.szDescription,WSAData.szSystemStatus);
hwndSb = CreateStatusWindow(WS_CHILD | WS_VISIBLE | WS_BORDER | SBARS_SIZEGRIP, szTemp, hWnd, IDS_STATUSBAR);
return TRUE; }
// ----------------------------------------------------- // Функция WndProc_OnDestroy // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnDestroy(HWND hWnd) { // Освобождение ресурсов, полученных для // работы с Windows Sockets WSACleanup ();
// Завершение цикла обработки сообщений PostQuitMessage(0); return FORWARD_WM_DESTROY (hWnd, DefWindowProc); }
// ----------------------------------------------------- // Функция WndProc_OnSize // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnSize( HWND hWnd, UINT state, int cx, int cy) { SendMessage(hwndSb, WM_SIZE , cx, cy); return FORWARD_WM_SIZE (hWnd, state, cx, cy, DefWindowProc); }
// ----------------------------------------------------- // Функция WndProc_OnCommand // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify) { switch (id) { case IDM_EXIT:
// Уничтожение главного окна прилоджения DestroyWindow(hWnd); break;
case IDM_CONNECT:
// Установка соединения с сервером SetConnection(hWnd); break;
case IDM_SEND:
// Посылка сообщения серверу SendMsg(hWnd); break;
default: MessageBox(NULL, "Unknown command", "Error", MB_OK); }
return FORWARD_WM_COMMAND (hWnd, id, hwndCtl, codeNotify, DefWindowProc); }
// ----------------------------------------------------- // Функция SetConnection // -----------------------------------------------------
void SetConnection(HWND hWnd) { PHOSTENT phe;
// Создаем сокет srv_socket = socket(AF_INET , SOCK_STREAM, 0); if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "socket Error", "Error", MB_OK); return; }
// Устанавливаем адрес IP и номер порта dest_sin.sin_family = AF_INET ;
// Определяем адрес узла
// Адрес локального узла для отладки phe = gethostbyname ("localhost ");
// Адрес удаленного узла //phe = gethostbyname ("frolov");
if(phe == NULL) { closesocket (srv_socket); MessageBox(NULL, "gethostbyname Error", "Error", MB_OK); return; }
// Копируем адрес узла memcpy((char FAR *)&(dest_sin.sin_addr ), phe->h_addr , phe->h_length);
// Другой способ указания адреса узла // dest_sin.sin_addr .s_addr = inet_addr ("200.200.200.201");
// Копируем номер порта dest_sin.sin_port = htons(SERV_PORT);
// Устанавливаем соединение if(connect(srv_socket , (PSOCKADDR )&dest_sin, sizeof(dest_sin)) < 0) { closesocket (srv_socket); MessageBox(NULL, "connect Error", "Error", MB_OK); return; }
// В случае успеха выводим сообщение об установке // соединения с узлом SendMessage(hwndSb, SB_SETTEXT, 0, (LPARAM)"Connected"); }
// ----------------------------------------------------- // Функция SendMsg // -----------------------------------------------------
void SendMsg(HWND hWnd) { char szBuf[80]; lstrcpy(szBuf, "Test string");
// Посылаем сообщение send (srv_socket , szBuf, lstrlen(szBuf), 0); }
Вы сможете разобраться с исходными текстами этого прилжоения самостоятельно, так как все использованные в нем функции были нами уже описаны. Обратим ваше внимание только на функцию SetConnection, предназначенную для установки канала связи с сервером.
Если вы будете проверять работу приложений SERVER и CLIENT на одном и том же компьютере, адрес сервера должен быть указан следующим образом:
phe = gethostbyname ("localhost ");
Для того чтобы установить канал связи с компьютером по его имени, закройте символом комментария приведенную выше строку и уберите символ комментария со строки, расположенной ниже:
//phe = gethostbyname ("frolov");
Разумеется, вы должны также изменить имя компьютера.
Можно также указать адрес узла в виде десятичных цифр, для чего следует убрать символ комментария со следующей строки:
// dest_sin.sin_addr .s_addr = inet_addr ("200.200.200.201");
Идентификаторы ресурсов приложения CLIENT определены в файле resource.h, представленном в листинге 5.5.
Листинг 5.5. Файл client/resource.h
//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by CLIENT.rc // #define IDI_APPICON 101 #define IDI_APPICON_SM 102 #define IDR_MENU1 105 #define IDM_START 40001 #define IDM_EXIT 40002 #define IDM_STOP 40003 #define IDM_CONNECT 40004 #define IDM_SEND 40005
// Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 106 #define _APS_NEXT_COMMAND_VALUE 40006 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif
Файл client.rc (листинг 5.6) содержит определения ресурсов приложения.
Листинг 5.6. Файл client/client.rc
//Microsoft Developer Studio generated resource script. // #include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h"
///////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS
///////////////////////////////////////////////////////////////////// // Russian resources
#if !defined(AFX_RESOURCE_DLL) defined(AFX_TARG_RUS) #ifdef _WIN32 LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT #pragma code_page(1251) #endif //_WIN32
#ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////// // // TEXTINCLUDE //
1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END
2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0" END
3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END
#endif // APSTUDIO_INVOKED
///////////////////////////////////////////////////////////////////// // // Icon //
// Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_APPICON ICON DISCARDABLE "client.ico" IDI_APPICON_SM ICON DISCARDABLE "clientsm.ico"
///////////////////////////////////////////////////////////////////// // // Menu //
IDR_MENU1 MENU DISCARDABLE BEGIN POPUP "&File" BEGIN MENUITEM "&Connect", IDM_CONNECT MENUITEM "S&end message", IDM_SEND MENUITEM SEPARATOR MENUITEM "&Exit", IDM_EXIT END END
#endif // Russian resources /////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. //
///////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED
Приложение CLIENTD
Исходные тексты приложения CLIENTD, предназначенного для совместной работы с приложением SERVERD, представлены в листинге 5.8. Так как это приложение очень похоже на приложение CLIENT, мы опишем только отличия.Листинг 5.8. Файл clientd/clientd.c
#include
// ----------------------------------------------------- // Описание функций // -----------------------------------------------------
// Функция главного окна LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
// Функция для обработки сообщения WM_CREATE BOOL WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct);
// Функция для обработки сообщения WM_DESTROY void WndProc_OnDestroy(HWND hWnd);
// Функция для обработки сообщения WM_COMMAND void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify);
// Функция для обработки сообщения WM_SIZE void WndProc_OnSize(HWND hWnd, UINT state, int cx, int cy);
// Установка соединения void SetConnection(HWND hWnd);
// Передача сообщения void SendMsg(HWND hWnd);
// Порт сервера #define SERV_PORT 5000
#define IDS_STATUSBAR 802
// ----------------------------------------------------- // Глобальные переменные // -----------------------------------------------------
// Идентификатор приложения HINSTANCE hInst;
// Название приложения char szAppName[] = "WClientUDP ";
// Заголовок главного окна приложения char szAppTitle[] = "Windows Socket UDP Client Demo";
// Идентификатор органа управления Statusbar HWND hwndSb;
// Сокет клиента SOCKET srv_socket ;
// Адрес сервера SOCKADDR _IN dest_sin;
// ----------------------------------------------------- // Функция WinMain // -----------------------------------------------------
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; HWND hWnd; MSG msg;
hInst = hInstance;
// Преверяем, не было ли это приложение запущено ранее hWnd = FindWindow(szAppName, NULL); if(hWnd) { // Если окно приложения было свернуто в пиктограмму, // восстанавливаем его if(IsIconic(hWnd)) ShowWindow(hWnd, SW_RESTORE);
// Выдвигаем окно приложения на передний план SetForegroundWindow(hWnd); return FALSE; }
// Регистрируем класс окна memset(&wc, 0, sizeof(wc)); wc.cbSize = sizeof(WNDCLASSEX); wc.hIconSm = LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON_SM), IMAGE_ICON, 16, 16, 0); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON), IMAGE_ICON, 32, 32, 0);
wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); wc.lpszClassName = szAppName;
// Вызываем функцию RegisterClassEx, которая выполняет // регистрацию окна if(!RegisterClassEx(&wc)) if(!RegisterClass((LPWNDCLASS)&wc.style)) return FALSE;
InitCommonControls();
// Создаем главное окно приложения hWnd = CreateWindow(szAppName, szAppTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL); if(!hWnd) return(FALSE);
// Отображаем окно ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
// Запускаем цикл обработки сообщений while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
// ----------------------------------------------------- // Функция WndProc // -----------------------------------------------------
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { HANDLE_MSG(hWnd, WM_CREATE , WndProc_OnCreate); HANDLE_MSG(hWnd, WM_COMMAND , WndProc_OnCommand); HANDLE_MSG(hWnd, WM_SIZE , WndProc_OnSize); HANDLE_MSG(hWnd, WM_DESTROY , WndProc_OnDestroy);
default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } }
// ----------------------------------------------------- // Функция WndProc_OnCreate // -----------------------------------------------------
BOOL WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct) { int rc; WSADATA WSAData; char szTemp[128];
// Инициализация и проверка версии Windows Sockets rc = WSAStartup (MAKEWORD(1, 1), &WSAData); if(rc != 0) { MessageBox(NULL, "WSAStartup Error", "Error", MB_OK); return FALSE; }
// Отображаем описание и версию системы Windows Sockets // в окне органа управления Statusbar wsprintf(szTemp, "Server use %s %s", WSAData.szDescription,WSAData.szSystemStatus);
hwndSb = CreateStatusWindow(WS_CHILD | WS_VISIBLE | WS_BORDER | SBARS_SIZEGRIP, szTemp, hWnd, IDS_STATUSBAR);
return TRUE; }
// ----------------------------------------------------- // Функция WndProc_OnDestroy // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnDestroy(HWND hWnd) { // Освобождение ресурсов, полученных для // работы с Windows Sockets WSACleanup ();
// Завершение цикла обработки сообщений PostQuitMessage(0); return FORWARD_WM_DESTROY (hWnd, DefWindowProc); }
// ----------------------------------------------------- // Функция WndProc_OnSize // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnSize(HWND hWnd, UINT state, int cx, int cy) { SendMessage(hwndSb, WM_SIZE , cx, cy); return FORWARD_WM_SIZE (hWnd, state, cx, cy, DefWindowProc); }
// ----------------------------------------------------- // Функция WndProc_OnCommand // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify) { switch (id) { case IDM_EXIT:
// Уничтожение главного окна прилоджения DestroyWindow(hWnd); break;
case IDM_CONNECT:
// Установка соединения с сервером SetConnection(hWnd); break;
case IDM_SEND:
// Посылка сообщения серверу SendMsg(hWnd); break;
default: MessageBox(NULL, "Unknown command", "Error", MB_OK); }
return FORWARD_WM_COMMAND (hWnd, id, hwndCtl, codeNotify, DefWindowProc); }
// ----------------------------------------------------- // Функция SetConnection // -----------------------------------------------------
void SetConnection(HWND hWnd) { PHOSTENT phe;
// Создаем сокет srv_socket = socket(AF_INET , SOCK_DGRAM, 0); if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "socket Error", "Error", MB_OK); return; }
// Связываем адрес IP с сокетом dest_sin.sin_family = AF_INET ; dest_sin.sin_addr .s_addr = INADDR_ANY ; dest_sin.sin_port = 0;
if(bind (srv_socket , (LPSOCKADDR )&dest_sin, sizeof(dest_sin)) == SOCKET_ERROR ) { // При ошибке закрываем сокет closesocket (srv_socket); MessageBox(NULL, "bind Error", "Error", MB_OK); return; }
// Устанавливаем адрес IP и номер порта dest_sin.sin_family = AF_INET ;
// Определяем адрес узла
// Адрес локального узла для отладки phe = gethostbyname ("localhost ");
// Адрес удаленного узла // phe = gethostbyname ("maxsinev");
if(phe == NULL) { closesocket (srv_socket); MessageBox(NULL, "gethostbyname Error", "Error", MB_OK); return; }
// Копируем адрес узла memcpy((char FAR *)&(dest_sin.sin_addr ), phe->h_addr , phe->h_length);
// Другой способ указания адреса узла // dest_sin.sin_addr .s_addr = inet_addr ("200.200.200.201");
// Копируем номер порта dest_sin.sin_port = htons(SERV_PORT);
// В случае успеха выводим сообщение об установке // соединения с узлом SendMessage(hwndSb, SB_SETTEXT, 0, (LPARAM)"Connected"); }
// ----------------------------------------------------- // Функция SendMsg // -----------------------------------------------------
void SendMsg(HWND hWnd) { char szBuf[80]; lstrcpy(szBuf, "Test string");
// Посылаем сообщение send to(srv_socket , szBuf, lstrlen(szBuf), 0, (PSOCKADDR )&dest_sin, sizeof(dest_sin)); }
Функция SetConnection создает сокет типа SOCK_DGRAM, так как передача данных будет выполняться с использованием протокола UDP :
srv_socket = socket(AF_INET , SOCK_DGRAM, 0);
Далее выполняется привязка сокета к адресу с помощью функции bind . При этом указывается нулевое значение порта и адрес INADDR_ANY , так как на данном этапе эти параметры не имеют значения.
Затем функция SetConnection записывает адрес сервера в структуру dest_sin. Этот адрес потребуется для передачи сообщений серверу.
При использовании протокола UDP и если не создан канал между приложениями, для передачи данных следует использовать функцию send to:
send to(srv_socket , szBuf, lstrlen(szBuf), 0, (PSOCKADDR )&dest_sin, sizeof(dest_sin));
В качестве предпоследнего параметра этой фукнции нужно передать адрес заполненной структуры, содержащей адрес узла, куда будет посылаться пакет данных. Через последний параметр функции send to необходимо передать размер указанной структуры.
Привдедем список возможных кодов ошибок для функции send to:
| Код ошибки | Описание |
| WSANOTINITIALISED | Перед использованием функции необходимо вызвать функцию WSAStartup |
| WSAENETDOWN | Сбой в сети |
| WSAEACCES | Не был установлен флаг широковещательного адреса |
| WSAEINTR | Работа функции была отменена при помощи функции WSACancelBlockingCall |
| WSAEINPROGRESS | Выполняется блокирующая функция интерфейса Windows Sockets |
| WSAEFAULT | Неправильно указан адрес буфера, содержащего передаваемые данные |
| WSAENETRESET | Необходимо сбросить соединение |
| WSAENOBUFS | Произошло зацикливание буферов |
| WSAENOTSOCK | Указанный дескриптор не является дескриптором сокета |
| WSAESHUTDOWN | Сокет был закрыт функцией shutdown |
| WSAEWOULDBLOCK | Сокет отмечен как неблокирующий, но запрошенная операция приведет к блокировке |
| WSAEMSGSIZE | Размер датаграммы больше, чем это допускается данной реализацией интерфейса Windows Sockets |
| WSAECONNABORTED | Сбой из-за слишком большой задержки или по другой причине |
| WSAECONNRESET | Сброс соединения удаленным узлом |
| WSAEADDRNOTAVAIL | Указанный адрес недоступен |
| WSAEAFNOSUPPORT | Данный тип сокета не может работать с указанным семейством адресов |
| WSAEDESTADDRREQ | Необходимо указать адрес получателя датаграммы |
| WSAENETUNREACH | В данное время и из данного узла невозможно получить доступ к сети |
Приложение SERVER
В этом разделе мы представим вам исходные тексты приложения SERVER, которое выполняет прием сообщений от приложения CLIENT с использованием протокола гарантированной доставки TCP и канала связи. При необходимости вы сможете самостоятельно организовать передачу данных в обратном направлении.Вы можете запускать приложения SERVER и CLIENT как на одном, так и на разных компьютерах, соединенных локальной или глобальной сетью TCP/IP. В случае запуска этих приложений на одном и том же компьютере в качестве адреса IP используется локальный тестовый адрес 127.0.0.1 .
Создавая проект для этого, а также всех остальных приложений, приведенных в нашей книге, вы должны указать, что для разрешения внешних ссылок необходимо использовать библиотеки объектных модулей wsock32.lib и comctl32.lib . Первая из них нужна для работы с программным интерфейсом Windows Sockets, вторая - для работы с органом управления Statusbar .
Для подключения указанных библиотек из меню Build системы разработки Microsoft Visual C++ версии 4.0 нужно выбрать строку Settings. На экране появится блокнот project Settings, который следует открыть на странице Link. Затем вы должны дописать названия библиотек в поле Object/library modules и нажать кнопку OK.
Исходный текст приложения SERVER представлен в листинге 5.1.
Листинг 5.1. Файл server/server.c
#include
// ----------------------------------------------------- // Описание функций // -----------------------------------------------------
// Функция главного окна LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
// Функция для обработки сообщения WM_CREATE BOOL WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct);
// Функция для обработки сообщения WM_DESTROY void WndProc_OnDestroy(HWND hWnd);
// Функция для обработки сообщения WM_COMMAND void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify);
// Функция для обработки сообщения WM_SIZE void WndProc_OnSize(HWND hWnd, UINT state, int cx, int cy);
// Запуск сервера void ServerStart(HWND hWnd);
// Останов сервера void ServerStop(HWND hWnd);
// Обработка сообщения WSA_ACCEPT void WndProc_OnWSAAccept(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
// Обработка сообщения WSA_NETEVENT void WndProc_OnWSANetEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); // Порт сервера #define SERV_PORT 5000
#define IDS_STATUSBAR 802 // Определение кодов сообщений #define WSA_ACCEPT (WM_USER + 1) #define WSA_NETEVENT (WM_USER + 2)
// ----------------------------------------------------- // Глобальные переменные // -----------------------------------------------------
// Идентификатор приложения HINSTANCE hInst;
// Название приложения char szAppName[] = "WServer";
// Заголовок главного окна приложения char szAppTitle[] = "Windows Socket Server Demo";
// Идентификатор органа Statusbar HWND hwndSb;
// Сокет сервера SOCKET srv_socket ;
// Длина использованного сокета int acc_sin_len;
// Адрес использованного сокета SOCKADDR _IN acc_sin;
// Локальный сокет SOCKADDR _IN local_sin;
// ----------------------------------------------------- // Функция WinMain // -----------------------------------------------------
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; HWND hWnd; MSG msg;
hInst = hInstance;
// Преверяем, не было ли это приложение запущено ранее hWnd = FindWindow(szAppName, NULL); if(hWnd) { // Если окно приложения было свернуто в пиктограмму, // восстанавливаем его if(IsIconic(hWnd)) ShowWindow(hWnd, SW_RESTORE);
// Выдвигаем окно приложения на передний план SetForegroundWindow(hWnd); return FALSE; }
// Регистрируем класс окна memset(&wc, 0, sizeof(wc));
// Поля wc.cbSize и wc.hIconSm определены в структуре // WNDCLASSEX, которой можно пользоваться для // регистрации класса окна в Windows 95 wc.cbSize = sizeof(WNDCLASSEX);
// Поле wc.hIconSm задает идентификатор маленькой // пиктограммы, которая будет отображаться в левой // части заголовка окна (в области системного меню). // Загружаем пиктограмму из ресурсов приложения при // помощи функции LoadImage, так как функция // LoadIcon может загрузить только обычную пиктограмму wc.hIconSm = LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON_SM), IMAGE_ICON, 16, 16, 0);
// Завершаем заполнение структуры WNDCLASSEX wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst;
// Для загрузки обычной пиктограммы вы можете // использовать функцию LoadImage wc.hIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON), IMAGE_ICON, 32, 32, 0);
wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); wc.lpszClassName = szAppName;
// Вызываем функцию RegisterClassEx, которая выполняет // регистрацию окна if(!RegisterClassEx(&wc))
// В случае ошибки пытаемся зарегистрировать окно // функцией RegisterClass if(!RegisterClass((LPWNDCLASS)&wc.style)) return FALSE;
// Инициализация библиотеки органов управления // общего назначения. Необходима для работы с // органом управления Statusbar InitCommonControls();
// Создаем главное окно приложения hWnd = CreateWindow(szAppName, szAppTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL); if(!hWnd) return(FALSE);
// Отображаем окно ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
// Запускаем цикл обработки сообщений while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
// ----------------------------------------------------- // Функция WndProc // -----------------------------------------------------
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { // Вызываем обработчик сообщения WSA_ACCEPT case WSA_ACCEPT: WndProc_OnWSAAccept(hWnd, msg, wParam, lParam); break;
// Вызываем обработчик сообщения WSA_NETEVENT case WSA_NETEVENT: WndProc_OnWSANetEvent(hWnd, msg, wParam, lParam); break;
// Для сообщения WM_CREATE назначаем обработчик, // расположенный в функции WndProc_OnCreate HANDLE_MSG(hWnd, WM_CREATE , WndProc_OnCreate);
// Для сообщения WM_COMMAND назначаем обработчик, // расположенный в функции WndProc_OnCommand HANDLE_MSG(hWnd, WM_COMMAND , WndProc_OnCommand);
// Для сообщения WM_SIZE назначаем обработчик, // расположенный в функции WndProc_OnSize HANDLE_MSG(hWnd, WM_SIZE , WndProc_OnSize);
// Для сообщения WM_DESTROY назначаем обработчик, // расположенный в функции WndProc_OnDestroy HANDLE_MSG(hWnd, WM_DESTROY , WndProc_OnDestroy);
default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } }
// ----------------------------------------------------- // Функция WndProc_OnCreate // -----------------------------------------------------
BOOL WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct) { int rc; WSADATA WSAData; char szTemp[128];
// Инициализация и проверка версии Windows Sockets rc = WSAStartup (MAKEWORD(1, 1), &WSAData); if(rc != 0) { MessageBox(NULL, "WSAStartup Error", "Error", MB_OK); return FALSE; }
// Отображаем описание и версию системы Windows Sockets // в окне органа управления Statusbar wsprintf(szTemp, "Server use %s %s", WSAData.szDescription,WSAData.szSystemStatus);
hwndSb = CreateStatusWindow(WS_CHILD | WS_VISIBLE | WS_BORDER | SBARS_SIZEGRIP, szTemp, hWnd, IDS_STATUSBAR);
return TRUE; }
// ----------------------------------------------------- // Функция WndProc_OnDestroy // -----------------------------------------------------
// Отключаем предупреждающее сообщение о том, что // функция типа void возвращает управление при помощи // оператора return. Этот оператор нужен для // использования макрокоманды FORWARD_WM_LBUTTONDOWN #pragma warning(disable: 4098) void WndProc_OnDestroy(HWND hWnd) { // Освобождение ресурсов, полученных для // работы с Windows Sockets WSACleanup ();
// Завершение цикла обработки сообщений PostQuitMessage(0); return FORWARD_WM_DESTROY (hWnd, DefWindowProc); }
// ----------------------------------------------------- // Функция WndProc_OnSize // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnSize( HWND hWnd, UINT state, int cx, int cy) { SendMessage(hwndSb, WM_SIZE , cx, cy); return FORWARD_WM_SIZE (hWnd, state, cx, cy, DefWindowProc); }
// ----------------------------------------------------- // Функция WndProc_OnCommand // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify) { switch (id) { case IDM_EXIT:
// Уничтожение главного окна приложения DestroyWindow(hWnd); break;
case IDM_START:
// Запуск сервера ServerStart(hWnd); break;
case IDM_STOP:
// Останов сервера ServerStop(hWnd); break;
default: MessageBox(NULL, "Unknown command", "Error", MB_OK); }
return FORWARD_WM_COMMAND (hWnd, id, hwndCtl, codeNotify, DefWindowProc); }
// ----------------------------------------------------- // Функция ServerStart // -----------------------------------------------------
void ServerStart(HWND hWnd) { struct sockaddr_in srv_address; int rc;
// Создаем сокет сервера для работы с потоком данных srv_socket = socket(AF_INET , SOCK_STREAM, 0); if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "socket Error", "Error", MB_OK); return; }
// Устанавливаем адрес IP и номер порта srv_address.sin_family = AF_INET ; srv_address.sin_addr .s_addr = INADDR_ANY ; srv_address.sin_port = htons(SERV_PORT);
// Связываем адрес IP с сокетом if(bind (srv_socket , (LPSOCKADDR )&srv_address, sizeof(srv_address)) == SOCKET_ERROR ) { // При ошибке закрываем сокет closesocket (srv_socket); MessageBox(NULL, "bind Error", "Error", MB_OK); return; }
// Устанавливаем сокет в режим приема для // выполнения ожидания соединения с клиентом if(listen(srv_socket , 1) == SOCKET_ERROR ) { closesocket (srv_socket); MessageBox(NULL, "listen Error", "Error", MB_OK); return; }
// При попытке установки соединения главное окно приложения // получит сообщение WSA_ACCEPT rc = WSAAsyncSelect (srv_socket , hWnd, WSA_ACCEPT, FD_ACCEPT ); if(rc > 0) { closesocket (srv_socket); MessageBox(NULL, "WSAAsyncSelect Error", "Error", MB_OK); return; }
// Выводим в окна Statusbar сообщение о запуске сервера SendMessage(hwndSb, SB_SETTEXT, 0, (LPARAM)"Server started"); }
// ----------------------------------------------------- // Функция ServerStop // -----------------------------------------------------
void ServerStop(HWND hWnd) { // Отменяем приход любых извещений в главную функцию // окна при возникновении любых событий, связанных // с системой Windows Sockets WSAAsyncSelect (srv_socket , hWnd, 0, 0);
// Если сокет был создан, закрываем его if(srv_socket != INVALID_SOCKET) { closesocket (srv_socket); }
// Выводим в окна Statusbar сообщение об останове сервера SendMessage(hwndSb, SB_SETTEXT, 0, (LPARAM)"Server stopped"); }
// ----------------------------------------------------- // Функция WndProc_OnWSAAccept // -----------------------------------------------------
void WndProc_OnWSAAccept(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { int rc;
// При ошибке отменяем поступление извещений // в главное окно приложения if(WSAGETSELECTERROR(lParam) != 0) { MessageBox(NULL, "accept Error", "Error", MB_OK); WSAAsyncSelect (srv_socket , hWnd, 0, 0); return; }
// Определяем размер адреса сокета acc_sin_len = sizeof(acc_sin);
// Разрешаем установку соединения srv_socket = accept (srv_socket, (LPSOCKADDR )&acc_sin, (int FAR *)&acc_sin_len);
if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "accept Error, invalid socket ", "Error", MB_OK); return; }
// Если на данном сокете начнется передача данных от // клиента, в главное окно приложения поступит // сообщение WSA_NETEVENT. // Это же сообщение поступит при разрыве соединения rc = WSAAsyncSelect (srv_socket , hWnd, WSA_NETEVENT, FD_READ | FD_CLOSE ); if(rc > 0) { closesocket (srv_socket); MessageBox(NULL, "WSAAsyncSelect Error", "Error", MB_OK); return; } }
// ----------------------------------------------------- // Функция WndProc_OnWSANetEvent // -----------------------------------------------------
void WndProc_OnWSANetEvent( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { char szTemp[256]; int rc;
// Если на сокете выполняется передача данных, // принимаем и отображаем эти данные в виде // текстовой строки if(WSAGETSELECTEVENT(lParam) == FD_READ ) { rc = recv ((SOCKET)wParam, szTemp, 256, 0); if(rc) { szTemp[rc] = '\0'; MessageBox(NULL, szTemp, "Reсeived data", MB_OK); } return; }
// Если соединение завершено, выводми об этом сообщение else if(WSAGETSELECTEVENT(lParam) == FD_CLOSE ) { MessageBox(NULL, "Connection closed", "Server", MB_OK); } }
Функция WinMain сохраняет идентификатор приложения и затем проверяет, не было ли это приложение уже запущено. При этом используется техника, описанная нами в 22 томе "Библиотеки системного программиста", который называется "Операционная система Windows 95 для программиста".
Далее выполняется обычная регистрация класса главного окна приложения, инициализируется библиотека орагнов управления общего назначения и создается главное окно приложения. После этого окно отображается на экране и запускается цикл обработки сообщений.
Функция окна WndProc обрабатывает как стандартные сообщения WM_CREATE , WM_COMMAND , WM_SIZE , WM_DESTROY , так и сообщения WSA_ACCEPT и WSA_NETEVENT. Первое из них возникает при установке канала связи с клиентом, второе - при поступлении данных от клиента и при разрыве канала связи.
Обработчик сообщения WM_CREATE инициализирует библиотеку Windows Sockets и создает орган управления Statusbar . В окне этого органа управления отображается текущая версия и описание состояния системы Windows Sockets. Если вы не знакомы с указанным органам управления, отсылаем вас к упомянутому 22 тому "Библиотеки системного программиста".
Обработчик сообщения WM_DESTROY вызывает функцию WSACleanup , освобождающую ресурсы, полученные для приложения у системы Windows Sockets и затем завершает цикл обработки сообщений.
Единственное назначение обработчика сообщений WM_SIZE заключается в изменении размеров окна органа управления Statusbar при изменении размеров главного окна приложения.
Обработчик сообщения WM_COMMAND получает управление, когда пользователь выбирает одну из строк в меню File главного меню приложения. Если пользователь выберет строку Start server, будет вызвана функция ServerStart, назначение которой очевидно из ее названия. Аналогично, при выборе строки Stop server будет вызвана функция ServerStop. Если же из меню
File выбрать строку Exit, будет уничтожено главное окно приложения.
Функция ServerStart создает сокет для работы с потоком данных и инициализирует его. При этом мы используем произвольно выбранный порт с номером 5000.
Далее функция выполняет привязку сокета к адресу и переключает сокет в режим приема для выполнения ожидания соединения с клиентом, т. е. выполняет описанные нами ранее действия, необходимые для создания канала связи.
Затем вызывается функция WSAAsyncSelect , которой в качестве последнего параметра передается значение FD_ACCEPT , а в качестве предпоследнего - значение WSA_ACCEPT. В результате при поступлении от клиента запроса на создание канала связи функция главного окна приложения получит сообщение WSA_ACCEPT.
Перед возвратом управления функция ServerStart выводит сообщение о запуске сервера в окне органа управления Statusbar .
Функция ServerStop отменяет все извещения, поступающие в главное окно приложения при возникновении событий в сети, вызывая функцию WSAAsyncSelect с нулевым значением двух последних параметров:
WSAAsyncSelect (srv_socket , hWnd, 0, 0);
Затем она закрывает сокет, вызывая функцию closesocket , и выводит в окне органа управления Statusbar сообщение о завершении работы сервера.
Функция WndProc_OnWSAAccept обрабатывает сообщение WSA_ACCEPT, выполняя описанную нами ранее процедуру создания канала связи.
И, наконец, функция WndProc_OnWSANetEvent выполняет прием строки сообщения, полученной от клиента с отображением этой строки на экране в диалоговой панели.
Файл resource.h, показанный в листинге 5.2 создается автоматически и содержит описание идентификаторов ресурсов приложения.
Листинг 5.2. Файл server/resource.h
//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by server.rc // #define IDI_APPICON 101 #define IDI_APPICON_SM 102 #define IDR_MENU1 105 #define IDM_START 40001 #define IDM_EXIT 40002 #define IDM_STOP 40003
// Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 106 #define _APS_NEXT_COMMAND_VALUE 40004 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif
Ресурсы приложения определены в файле server.rc, который представлен в листинге 5.3.
Листинг 5.3. Файл server/server.rc
//Microsoft Developer Studio generated resource script. // #include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h"
///////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS
///////////////////////////////////////////////////////////////////// // Russian resources
#if !defined(AFX_RESOURCE_DLL) defined(AFX_TARG_RUS) #ifdef _WIN32 LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT #pragma code_page(1251) #endif //_WIN32
#ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////// // // TEXTINCLUDE //
1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END
2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0" END
3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END
#endif // APSTUDIO_INVOKED
///////////////////////////////////////////////////////////////////// // // Icon //
// Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_APPICON ICON DISCARDABLE "server.ico" IDI_APPICON_SM ICON DISCARDABLE "serversm.ico"
///////////////////////////////////////////////////////////////////// // // Menu //
IDR_MENU1 MENU DISCARDABLE BEGIN POPUP "&File" BEGIN MENUITEM "&Start server", IDM_START MENUITEM "S&top server", IDM_STOP MENUITEM SEPARATOR MENUITEM "&Exit", IDM_EXIT END END
#endif // Russian resources /////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. //
///////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED
Приложение SERVERD
В некоторых случаях целесообразно использовать протокол негарантированной доставки UDP , так как он, например, допускает одновременную рассылку пакетов всем узлам сети (в режиме broadcast).Если узлы обмениваются данными с использованием датаграммного протокола UDP , им не требуется создавать канал данных, поэтому процедура инициализации получается проще.
Сервер UDP должен создать сокет с помощью функции socket и привязать к нему адрес IP, вызвав функцию bind . Клиент UDP выполняет создание и инициализацию сокетов аналогичным образом с помощью все тех же функций socket и bind.
Такие известные вам из предыдущих приложений функции, как connect, listen и
accept в приложениях UDP использовать не нужно.
Для обмена данными приложения UDP вызывают функции send to и recv from, аналогичные функциям send и recv, но имеющие одно отличие - при вызове этих функций им необходимо задавать дополнительные параметры, имеющие отношение к адресам узлов. Функции sendto нужно указать адрес, по которому будет отправлен пакет данных, а функции
recvfrom - указатель на структуру, в которую будет записан адрес отправителя пакета.
В нашей книге мы привели исходные тексты приложений SERVERD и CLIENTD, которые выполняют те же задачи, что и только что рассмотренные приложения SERVER и CLIENT, но при этом они передают данные при помощи датаграммного протокола UDP .
Исходный текст приложения SERVERD
приведен в листинге 5.7.
Листинг 5.7. Файл serverd/serverd.c
#include
// ----------------------------------------------------- // Описание функций // -----------------------------------------------------
// Функция главного окна LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
// Функция для обработки сообщения WM_CREATE BOOL WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct);
// Функция для обработки сообщения WM_DESTROY void WndProc_OnDestroy(HWND hWnd);
// Функция для обработки сообщения WM_COMMAND void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify);
// Функция для обработки сообщения WM_SIZE void WndProc_OnSize(HWND hWnd, UINT state, int cx, int cy);
// Запуск сервера void ServerStart(HWND hWnd);
// Останов сервера void ServerStop(HWND hWnd);
// Обработка сообщения WSA_NETEVENT void WndProc_OnWSANetEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); // Порт сервера #define SERV_PORT 5000
#define IDS_STATUSBAR 802
// Определение кодов сообщений #define WSA_NETEVENT (WM_USER + 1)
// ----------------------------------------------------- // Глобальные переменные // -----------------------------------------------------
// Идентификатор приложения HINSTANCE hInst;
// Название приложения char szAppName[] = "WServerUDP ";
// Заголовок главного окна приложения char szAppTitle[] = "Windows Socket UDP Server Demo";
// Идентификатор органа Statusbar HWND hwndSb;
// Сокет сервера SOCKET srv_socket ;
// ----------------------------------------------------- // Функция WinMain // -----------------------------------------------------
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; HWND hWnd; MSG msg;
hInst = hInstance;
// Преверяем, не было ли это приложение запущено ранее hWnd = FindWindow(szAppName, NULL); if(hWnd) { // Если окно приложения было свернуто в пиктограмму, // восстанавливаем его if(IsIconic(hWnd)) ShowWindow(hWnd, SW_RESTORE);
// Выдвигаем окно приложения на передний план SetForegroundWindow(hWnd); return FALSE; }
// Регистрируем класс окна memset(&wc, 0, sizeof(wc)); wc.cbSize = sizeof(WNDCLASSEX); wc.hIconSm = LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON_SM), IMAGE_ICON, 16, 16, 0); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON), IMAGE_ICON, 32, 32, 0);
wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); wc.lpszClassName = szAppName;
// Вызываем функцию RegisterClassEx, которая выполняет // регистрацию окна if(!RegisterClassEx(&wc)) if(!RegisterClass((LPWNDCLASS)&wc.style)) return FALSE;
InitCommonControls();
// Создаем главное окно приложения hWnd = CreateWindow(szAppName, szAppTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL); if(!hWnd) return(FALSE);
// Отображаем окно ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
// Запускаем цикл обработки сообщений while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
// ----------------------------------------------------- // Функция WndProc // -----------------------------------------------------
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { // Вызываем обработчик сообщения WSA_NETEVENT case WSA_NETEVENT: WndProc_OnWSANetEvent(hWnd, msg, wParam, lParam); break;
HANDLE_MSG(hWnd, WM_CREATE , WndProc_OnCreate); HANDLE_MSG(hWnd, WM_COMMAND , WndProc_OnCommand); HANDLE_MSG(hWnd, WM_SIZE , WndProc_OnSize); HANDLE_MSG(hWnd, WM_DESTROY , WndProc_OnDestroy);
default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } }
// ----------------------------------------------------- // Функция WndProc_OnCreate // -----------------------------------------------------
BOOL WndProc_OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct) { int rc; WSADATA WSAData; char szTemp[128];
// Инициализация и проверка версии Windows Sockets rc = WSAStartup (MAKEWORD(1, 1), &WSAData); if(rc != 0) { MessageBox(NULL, "WSAStartup Error", "Error", MB_OK); return FALSE; }
// Отображаем описание и версию системы Windows Sockets // в окне органа управления Statusbar wsprintf(szTemp, "Server use %s %s", WSAData.szDescription,WSAData.szSystemStatus);
hwndSb = CreateStatusWindow(WS_CHILD | WS_VISIBLE | WS_BORDER | SBARS_SIZEGRIP, szTemp, hWnd, IDS_STATUSBAR);
return TRUE; }
// ----------------------------------------------------- // Функция WndProc_OnDestroy // ----------------------------------------------------- #pragma warning(disable: 4098) void WndProc_OnDestroy(HWND hWnd) { // Освобождение ресурсов, полученных для // работы с Windows Sockets WSACleanup ();
// Завершение цикла обработки сообщений PostQuitMessage(0); return FORWARD_WM_DESTROY (hWnd, DefWindowProc); }
// ----------------------------------------------------- // Функция WndProc_OnSize // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnSize( HWND hWnd, UINT state, int cx, int cy) { SendMessage(hwndSb, WM_SIZE , cx, cy); return FORWARD_WM_SIZE (hWnd, state, cx, cy, DefWindowProc); }
// ----------------------------------------------------- // Функция WndProc_OnCommand // -----------------------------------------------------
#pragma warning(disable: 4098) void WndProc_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify) { switch (id) { case IDM_EXIT:
// Уничтожение главного окна прилоджения DestroyWindow(hWnd); break;
case IDM_START:
// Запуск сервера ServerStart(hWnd); break;
case IDM_STOP:
// Останов сервера ServerStop(hWnd); break;
default: MessageBox(NULL, "Unknown command", "Error", MB_OK); }
return FORWARD_WM_COMMAND (hWnd, id, hwndCtl, codeNotify, DefWindowProc); }
// ----------------------------------------------------- // Функция ServerStart // -----------------------------------------------------
void ServerStart(HWND hWnd) { struct sockaddr_in srv_address; int rc;
// Создаем сокет сервера для работы с потоком данных srv_socket = socket(AF_INET , SOCK_DGRAM, 0); if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "socket Error", "Error", MB_OK); return; }
// Устанавливаем адрес IP и номер порта srv_address.sin_family = AF_INET ; srv_address.sin_addr .s_addr = INADDR_ANY ; srv_address.sin_port = htons(SERV_PORT);
// Связываем адрес IP с сокетом if(bind (srv_socket , (LPSOCKADDR )&srv_address, sizeof(srv_address)) == SOCKET_ERROR ) { // При ошибке закрываем сокет closesocket (srv_socket); MessageBox(NULL, "bind Error", "Error", MB_OK); return; }
// Если на данном сокете начнется передача данных от // клиента, в главное окно приложения поступит // сообщение WSA_NETEVENT. rc = WSAAsyncSelect (srv_socket , hWnd, WSA_NETEVENT, FD_READ ); if(rc > 0) { closesocket (srv_socket); MessageBox(NULL, "WSAAsyncSelect Error", "Error", MB_OK); return; }
// Выводим в окна Statusbar сообщение о запуске сервера SendMessage(hwndSb, SB_SETTEXT, 0, (LPARAM)"Server started"); }
// ----------------------------------------------------- // Функция ServerStop // -----------------------------------------------------
void ServerStop(HWND hWnd) { // Отменяем приход любых извещений в главную функцию // окна при возникновении любых событий, связанных // с системой Windows Sockets WSAAsyncSelect (srv_socket , hWnd, 0, 0);
// Если сокет был создан, закрываем его if(srv_socket != INVALID_SOCKET) { closesocket (srv_socket); }
// Выводим в окна Statusbar сообщение об останове сервера SendMessage(hwndSb, SB_SETTEXT, 0, (LPARAM)"Server stopped"); }
// ----------------------------------------------------- // Функция WndProc_OnWSANetEvent // -----------------------------------------------------
void WndProc_OnWSANetEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { char szTemp[256]; int rc; SOCKADDR _IN addr; int nAddrSize; char szBuf[80]; LPSTR lpAddr;
if(WSAGETSELECTEVENT(lParam) == FD_READ ) { // Принимаем данные rc = recv from((SOCKET)wParam, szTemp, 256, 0, (PSOCKADDR )&addr, &nAddrSize);
if(rc) { szTemp[rc] = '\0'; strcpy(szBuf, "Received from ");
// Преобразовываем адрес IP удаленного клиента // в текстовую строку lpAddr = inet_ntoa (addr.sin_addr ); strcat(szBuf, lpAddr);
// Отображаем адрес удаленного клиента // и полученную от него строку MessageBox(NULL, szTemp, szBuf, MB_OK); } return; } }
Приложение SERVERD во многом напоминает приложение SERVER, поэтому мы рассмотрим только отличия.
Первое отличие заключается в том, что при запуске сервера тип создаваемого сокета указывается как SOCK_DGRAM:
srv_socket = socket(AF_INET , SOCK_DGRAM, 0);
Далее выполняется инициализация сокета и его привязка к адресу, для чего вызывается функция bind . Эта операция, как и в случае протокола TCP, не обязательна.
После выполнения привязки можно приступать к получению пакетов данных от клиента. Для того чтобы не выполнять ожидание пакетов в цикле, наше приложение использует функцию WSAAsyncSelect , указывая с ее помощью, что при получении пакетов данных главное окно приложения должно получать сообщения с кодом WSA_NETEVENT:
rc = WSAAsyncSelect (srv_socket , hWnd, WSA_NETEVENT, FD_READ );
На этом инициализация сервера завершается.
Обработчик сообщения WSA_NETEVENT читает полученный пакет с помощью функции recv from:
SOCKADDR _IN addr; int nAddrSize; rc = recv from((SOCKET)wParam, szTemp, 256, 0, (PSOCKADDR )&addr, &nAddrSize);
В качестве предпоследнего параметра этой функции передается адрес структуры типа SOCKADDR _IN, куда функция записывает адрес узла, приславшего пакет. Последний параметр функции recv from должен содержать размер указанной структуры.
Ниже мы привели возможные коды ошибок для функции recv from.
| Код ошибки | Описание |
| WSANOTINITIALISED | Перед использованием функции необходимо вызвать функцию WSAStartup |
| WSAENETDOWN | Сбой в сети |
| WSAEFAULT | Слишком малое значение параметра, определяющего размер буфера для приема данных |
| WSAEINTR | Работа функции была отменена при помощи функции WSACancelBlockingCall |
| WSAEINPROGRESS | Выполняется блокирующая функция интерфейса Windows Sockets |
| WSAEINVAL | Сокет не был подключен функцией bind |
| WSAENOTSOCK | Указанный дескриптор не является дескриптором сокета |
| WSAESHUTDOWN | Сокет был закрыт функцией shutdown |
| WSAEWOULDBLOCK | Сокет отмечен как неблокирующий, но запрошенная операция приведет к блокировке |
| WSAEMSGSIZE | Размер датаграммы слишком большой, поэтому соответствующий блок данных не помещается в буфер. Принятый блок данных был обрезан |
| WSAECONNABORTED | Сбой из-за слишком большой задержки или по другой причине |
| WSAECONNRESET | Сброс соединения удаленным узлом |
Для отображения адреса узла, пославшего пакет UDP , наше приложение преобразует этот адрес в символьную строку с помощью функции inet_ntoa :
lpAddr = inet_ntoa (addr.sin_addr );
Эта функция записывает полученную строку в статическую область памяти, принадлежащую системе Windows Sockets, поэтому для дальнейшего использования необходимо скопировать строку до следующего вызова любой функции программного интерфейса Windows Sockets.
Привязка адреса к сокету
После того как вы подготовили структуру SOCKADDR , записав в нее параметры сокета (в частности, адрес), следует выполнить привязку адреса к сокету при помощи функции bind :int bind ( SOCKET sock, const struct sockaddr FAR * addr, int namelen);
Параметр sock должен содержать дескриптор сокета, созданного функцией socket .
В поле addr следует записать указатель на подготовленную структуру SOCKADDR , а в поле namelen - размер этой структуры.
В случае ошибки функция bind возвращает значение SOCKET_ERROR . Дальнейший анализ причин ошибки следует выполнять при помощи функции WSAGetLastError . Возможные коды ошибок перечислены ниже:
| Код ошибки | Описание |
| WSANOTINITIALISED | Перед использованием функции необходимо вызвать функцию WSAStartup |
| WSAENETDOWN | Сбой в сети |
| WSAEADDRINUSE | Указанный адрес уже используется |
| WSAEFAULT | Значение параметра namelen меньше размера структуры sockaddr |
| WSAEINPROGRESS | Выполняется блокирующая функция интерфейса Windows Sockets |
| WSAEAFNOSUPPORT | Этот протокол не может работать с указанным семейством адресов |
| WSAEINVAL | Сокет уже привязан к адресу |
| WSAENOBUFS | Установлено слишком много соединений |
| WSAENOTSOCK | Указанный в параметре дескриптор не является сокетом |
Пример вызова функции bind показан ниже:
if(bind (srv_socket , (LPSOCKADDR )&srv_address, sizeof(srv_address)) == SOCKET_ERROR ) { closesocket (srv_socket); MessageBox(NULL, "bind Error", "Error", MB_OK); return; }
Сокеты, датаграммы и каналы связи
В локальных и глобальных сетях существует два принципиально разных способа передачи данных.Первый из них предполагает посылку пакетов данных от одного узла другому (или сразу нескольким узлам) без получения подтверждения о доставке и даже без гарантии того, что передаваемые пакеты будут получены в правильной последовательности. Примером такого протокола может служить протокол UDP (User Datagram Protocol ), который используется в сетях TCP/IP, или протокол IPX , который является базовым в сетях Novell NetWare .
Основные преимущества датаграмных протоколов заключаются в высоком быстродействии и возможности широковещательной передачи данных, когда один узел отправляет сообщения, а другие их получают, причем все одновременно.
Второй способ передачи данных предполагает создание канала передачи данных между двумя различными узлами сети. При этом канал создается средствами датаграммных протоколов, однако доставка пакетов в канале является гарантированной. Пакеты всегда доходят в целостности и сохранности, причем в правильном порядке, хотя быстродействие получается в среднем ниже за счет посылки подтверждений. Примерами протоколов, использующих каналы связи, могут служить протоколы TCP и SPX (протокол NETBIOS допускает передачу данных с использованием как датаграмм, так и каналов связи).
Для передачи данных с использованием любого из перечисленных выше способов каждое приложение должно создать объект, который называется сокетом.
По своему назначению сокет больше всего похож на идентификатор файла (file handle), который нужен для выполнения над файлом операций чтения или записи. Прежде чем приложение, запущенное на узле сети сможет выполнять передачу или прием данных, оно должно создать сокет и проинициализировать его, указав некоторые параметры.
Для сокета необходимо указать три параметра. Это IP адрес, связанный с сокетом, номер порта, для которого будут выполняться операции передачи данных, а также тип сокета.
Что касается последнего параметра (тип сокета), то существуют сокеты двух типов. Первый тип предназначен для передачи данных в виде датаграмм, второй - с использованием каналов связи.
Создание и инициализация сокета
После инициализации интерфейса Windows Sockets ваше приложение должно создать один или несколько сокетов, которые будут использованы для передачи данных.Создание канала связи
Если вы собираетесь передавать датаграммные сообщения при помощи протокола негарантированной доставки UDP , канал связи не нужен. Сразу после создания сокетов и их инициализации можно приступать к передаче данных. Но для передачи данных с использованием протокола TCP необходимо создать канал связи.Создание сокета
Сокет создается с помощью функции socket , имеющей следующий прототип:SOCKET socket (int af, int type, int protocol);
Параметр af определяет формат адреса. Для этого параметра вы должны указывать значение AF_INET , что соответствует формату адреса, принятому в Internet.
Параметры type и protocol определяют, сооветственно, тип сокета и протокол, который будет использован для данного сокета.
Можно указывать сокеты следующих двух типов:
| Тип сокета | Описание |
| SOCK_STREAM | Сокет будет использован для передачи данных через канал связи с использованием протокола TCP |
| SOCK_DGRAM | Передача данных будет выполняться без создания каналов связи через датаграммный протокол UDP |
Что же касается параметра protocol, то вы можете указать для него нулевое значение.
В случае успеха функция socket возвращает дескриптор, который нужно использовать для выполнения всех операций над данным сокетом. Если же произошла ошибка, эта функция возвращает значение INVALID_SOCKET . Для анализа причины ошибки вы должны вызвать функцию WSAGetLastError , которая в данном случае может вернуть один из следующих кодов ошибки:
| Код ошибки | Описание |
| WSANOTINITIALISED | Интерфейс Windows Sockets не был проинициализирован функцией WSAStartup |
| WSAENETDOWN | Сбой сетевого программного обеспечения |
| WSAEAFNOSUPPORT | Указан неправильный тип адреса |
| WSAEINPROGRESS | Выполняется блокирующая функция интерфейса Windows Sockets |
| WSAEMFILE | Израсходован весь запас свободных дескрипторов |
| WSAENOBUFS | Нет памяти для создания буфера |
| WSAEPROTONOSUPPORT | Указан неправильный протокол |
| WSAEPROTOTYPE | Указанный протокол несовместим с данным типом сокета |
| WSAESOCKTNOSUPPORT | Указанный тип сокета несовместим с данным типом адреса |
Ниже мы привели фрагмент кода, в котором создается сокет для передачи данных с использованием протокола TCP:
srv_socket = socket(AF_INET , SOCK_STREAM, 0); if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "socket Error", "Error", MB_OK); return; }
Сторона клиента
Рассмотрим процедуру установки канала связи со стороны клиента, использованную нами в приложении CLIENT, исходные тексты которого будут приведены ниже.Для установки соединения в приложении используется функция SetConnection:
SOCKADDR _IN dest_sin; void SetConnection(HWND hWnd) { PHOSTENT phe;
// Создаем сокет srv_socket = socket(AF_INET , SOCK_STREAM, 0); if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "socket Error", "Error", MB_OK); return; }
// Устанавливаем адрес IP и номер порта dest_sin.sin_family = AF_INET ;
// Определяем адрес узла phe = gethostbyname ("localhost "); if(phe == NULL) { closesocket (srv_socket); MessageBox(NULL, "gethostbyname Error", "Error", MB_OK); return; }
// Копируем адрес узла memcpy((char FAR *)&(dest_sin.sin_addr ), phe->h_addr , phe->h_length);
// Копируем номер порта dest_sin.sin_port = htons(SERV_PORT);
// Устанавливаем соединение if(connect(srv_socket , (PSOCKADDR )&dest_sin, sizeof(dest_sin)) < 0) { closesocket (srv_socket); MessageBox(NULL, "connect Error", "Error", MB_OK); return; } }
Вначале с помощью функции socket эта функция создает сокет. Затем выполняется заполнение адресной информацией структуры dest_sin.
Обратите внимание, что для получения адреса IP мы воспользовались функцией gethostbyname , указав ей имя узла localhost .
Это имя отображается в файле HOSTS на адрес 127.0.0.1 :
Адрес 127.0.0.1 является локальным. Вы можете использовать его для тестирования приложений, выполняющих обмен данными при помощи протокола TCP/IP, запуская сервер и клиент на одном и том же компьютере.
После заполнения структуры с адресной информацией функция connect создает канал связи с сервером.
Сторона сервера
Рассмотрим процедуру создания канала связи со стороны сервера.Прежде всего вы должны переключить сокет в режим приема для выполнения ожидания соединения с клиентом при помощи функции listen:
int listen(SOCKET sock, int backlog);
Через параметр sock функции необходимо передать дескриптор сокета, который будет использован для создания канала. Параметр backlog задает максимальный размер очереди для ожидания соединения (можно указывать значения от 1 до 5). Очередь содержит запросы на установку соединений для каждой пары значений (адрес IP, порт).
Ниже мы привели список возможных кодов ошибок для функции listen.
| Код ошибки | Описание |
| WSANOTINITIALISED | Перед использованием функции необходимо вызвать функцию WSAStartup |
| WSAENETDOWN | Сбой в сети |
| WSAEADDRINUSE | Указанный адрес уже используется |
| WSAEINPROGRESS | Выполняется блокирующая функция интерфейса Windows Sockets |
| WSAEINVAL | Сокет еще не был привязан к адресу или уже находится в подключенном состоянии |
| WSAEISCONN | Сокет уже находится в подключенном состоянии |
| WSAEMFILE | Недостаточно дескрипторов файлов |
| WSAENOBUFS | Нет места для размещения буфера |
| WSAENOTSOCK | Указанный в параметре дескриптор не является сокетом |
| WSAEOPNOTSUPP | Функция listen не работает с сокетом указанного типа |
Ниже мы привели пример вызов функции listen:
if(listen(srv_socket , 1) == SOCKET_ERROR ) { closesocket (srv_socket); MessageBox(NULL, "listen Error", "Error", MB_OK); return; }
Далее необходимо выполнить ожидание соединения. Это можно выполнить двумя различными способами.
Первый способ заключается в циклическом вызове функции accept до тех пор, пока не будет установлено соединение. Затем можно будет приступать к обмену данными.
Функция accept имеет следующий прототип:
SOCKET accept (SOCKET sock, struct sockaddr FAR * addr, int FAR * addrlen);
Через параметр sock необходимо указать дескриптор сокета, который находится в режиме приема для выполнения ожидания.
Параметр addr должен содержать адрес буфера, в который будет записан адрес узла, подключившегося к серверу. Размер этого буфера необходимо указать в переменной типа int, адрес которой передается через параметр addrlen.
Если ожидание соединения в цикле не вызывает у вас особого энтузиазма, можно предложить более удобный способ, основанный на использовании расширения программного интерфейса Windows Socket, предназначенного для выполнения асинхронных операций.
Приведем список возможных кодов ошибок для функции accept.
| Код ошибки | Описание |
| WSANOTINITIALISED | Перед использованием функции необходимо вызвать функцию WSAStartup |
| WSAENETDOWN | Сбой в сети |
| WSAEFAULT | Значение параметра addrlen меньше размера структуры адреса |
| WSAEINTR | Работа функции была отменена при помощи функции WSACancelBlockingCall |
| WSAEINPROGRESS | Выполняется блокирующая функция интерфейса Windows Sockets |
| WSAEINVAL | Перед вызовом функции accept не была вызывана функция listen |
| WSAEMFILE | Нет доступных дескрипторов |
| WSAENOBUFS | Установлено слишком много соединений |
| WSAENOTSOCK | Указанный в параметре дескриптор не является сокетом |
| WSAEOPNOTSUPP | Данный тип сокета нельзя использовать при вызове функций, ориентированных на работу с каналом связи |
| WSAEWOULDBLOCK | Сокет отмечен как неблокирующий и в настоящее время нет каналов связи, которые нужно устанавливать |
#define WSA_ACCEPT (WM_USER + 1) // При попытке установки соединения главное окно приложения // получит сообщение WSA_ACCEPT rc = WSAAsyncSelect (srv_socket , hWnd, WSA_ACCEPT, FD_ACCEPT ); if(rc > 0) { closesocket (srv_socket); MessageBox(NULL, "WSAAsyncSelect Error", "Error", MB_OK); return; }
В данном случае ожидание соединения выполняется для сокета srv_socket . Последний параметр функции имеет значение FD_ACCEPT . Это означает, что при попытке создания канала связи функция окна с идентификатором hWnd получит сообщение WSA_ACCEPT, определенное в вашем приложении.
Обработчик этого сообщения может выглядеть, например, следующим образом:
void WndProc_OnWSAAccept(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { int rc;
// При ошибке отменяем поступление извещений // в главное окно приложения if(WSAGETSELECTERROR(lParam) != 0) { MessageBox(NULL, "accept Error", "Error", MB_OK); WSAAsyncSelect (srv_socket , hWnd, 0, 0); return; }
// Определяем размер адреса сокета acc_sin_len = sizeof(acc_sin);
// Разрешаем установку соединения srv_socket = accept (srv_socket, (LPSOCKADDR )&acc_sin, (int FAR *)&acc_sin_len);
if(srv_socket == INVALID_SOCKET) { MessageBox(NULL, "accept Error, invalid socket ", "Error", MB_OK); return; }
// Если на данном сокете начнется передача данных от // клиента, в главное окно приложения поступит // сообщение WSA_NETEVENT. // Это же сообщение поступит при разрыве соединения rc = WSAAsyncSelect (srv_socket , hWnd, WSA_NETEVENT, FD_READ | FD_CLOSE ); if(rc > 0) { closesocket (srv_socket); MessageBox(NULL, "WSAAsyncSelect Error", "Error", MB_OK); return; } }
В данном случае обработчик сообщения вначале вызывает функцию accept , выполняющую создание канала передачи данных. После этого функция WSAAsyncSelect вызывается еще один раз для того чтобы установить асинхронную обработку приема данных от удаленного клиента, а также обработку ситуации разрыва канала связи.
Удаление сокета
Для освобождения ресурсов приложение должно закрывать сокеты, которые ему больше не нужны, вызывая функцию closesocket :int closesocket (SOCKET sock);
Ниже мы перечислили коды ошибок для этой функции :
| Код ошибки | Описание |
| WSANOTINITIALISED | Перед использованием функции closesocket необходимо вызвать функцию WSAStartup |
| WSAENETDOWN | Сбой в сети |
| WSAENOTSOCK | Указанный в параметре дескриптор не является сокетом |
| WSAEINPROGRESS | Выполняется блокирующая функция интерфейса Windows Sockets |
| WSAEINTR | Работа функции была отменена при помощи функции WSACancelBlockingCall |
Бизнес в интернете: Сайты - Софт - Языки - Дизайн
- Киберсантинг
- Киберсантинг как бизнес
- Виды Киберсантинга
- Создание игр
- Дизайн как бизнес
- Dreamweaver
- PHP
- Homesite
- Frontpage
- Studio MX
- Сайтостроительство
- Citrix MetaFrame
- Стили сайта
- ActiveX на сайте
- HTML как основа сайта
- Adobe GoLive
- Что такое WEB
- Мобильные WAP сайты
- 3D графика на сайтах
- 3DS MAX графические решения
- Графика в 3D Studio MAX и на сайте