Элемент управления Winsock, невидимый для пользователя, обеспечивает доступ к сетевым протоколам TCP (Transfer Control Protocol) и UDP (User Datagram Protocol). Его можно помещать на пользовательские формы Microsoft Excel, Word и PowerPoint и встроенные формы Microsoft Access, а также использовать в Visual Basic, Visual C++ и Visual FoxPro. С Winsock перестает быть проблемой установление связи и организация двунаправленного обмена данными с удаленной машиной; он позволяет создавать приложения типа "клиент--сервер", не вникая в детали устройства TCP и низкоуровневых функций API, обеспечивающих работу с сетевыми протоколами.
Публикуется с разрешения авторов. (С) Андрей Колесов, Ольга Павлова Вперые опубликовано в электронной версии журнала "Мир ПК" N 3/99 | | Элемент управления Winsock, невидимый для пользователя, обеспечивает доступ к сетевым протоколам TCP (Transfer Control Protocol) и UDP (User Datagram Protocol). Его можно помещать на пользовательские формы Microsoft Excel, Word и PowerPoint и встроенные формы Microsoft Access, а также использовать в Visual Basic, Visual C++ и Visual FoxPro. С Winsock перестает быть проблемой установление связи и организация двунаправленного обмена данными с удаленной машиной; он позволяет создавать приложения типа "клиент--сервер", не вникая в детали устройства TCP и низкоуровневых функций API, обеспечивающих работу с сетевыми протоколами. Некоторые варианты использования - создание клиентской программы, собирающей информацию от пользователей для отправки на центральный сервер;
- создание серверной программы, которая будет собирать в едином центре данные от разных пользователей;
- создание "разговорной" программы (для обмена информацией по работе).
Выбор протокола Приступая к работе с Winsock, в первую очередь необходимо сначала решить, какой протокол будет использоваться - TCP или UDP. Основное отличие между ними заключается в том, что TCP - это протокол на базе связи, т. е. он требует сначала установить связь и лишь после этого переходить к обмену данными, а UDP представляет собой протокол без связи и позволяет отправить сообщение с одного компьютера на другой, не выполняя предварительно никаких специальных действий. Кроме того, при использовании UDP максимальный объем данных, передаваемых за один раз, определяется самой сетью. Обычно тип протокола однозначно определяется характером создаваемой программы. Вот несколько критериев, на основе которых можно сделать выбор. - TCP удобно использовать, если программа должна требовать подтверждения от сервера (клиента) при отправлении или получении данных. Таким подтверждением может служить сигнал о том, что связь успешно установлена, который при работе с TCP обеспечивается автоматически.
- TCP предпочтительнее при большом объеме пересылаемых данных (например, если это изображения или оцифрованный звук), поскольку он поддерживает установленную связь и контролирует целостность передаваемой информации. Однако он требовательнее к ресурсам компьютера, чем UDP.
- UDP хорошо подходит для передачи небольших объемов информации - например, для рассылки уведомлений компьютерам о выполнении определенных задач.
Основные сведения о TCP Протокол TCP позволяет установить и поддерживать связь с удаленным компьютером, а когда связь установлена, организовать обмен данными. Программа, работающая по протоколу TCP, действует по-разному в зависимости от того, чем она является - клиентом или сервером. Клиент выдает запрос на связь, а сервер принимает его и завершает установление связи. После этого они могут свободно обмениваться данными в обе стороны. Для программы-клиента необходимо определить имя или IP-адрес сервера (свойство RemoteHost), а также порт, на котором сервер будет ее "слушать" (свойство RemotePort). После того как они заданы, можно послать серверу запрос на установление связи, вызвав метод Connect. Для программы-сервера следует определить порт, на котором она будет "слушать" клиентов (свойство LocalPort), после чего вызвать метод Listen. При получении запроса на установление связи от клиентской машины произойдет событие ConnectionRequest. Чтобы завершить процедуру установления связи, необходимо обработать это событие, вызвав метод Accept. Когда связь установлена, можно отправлять данные, используя метод SendData. При получении данных происходит событие DataArrival. Его обработка должна состоять в вызове метода GetData. Основные сведения об UDP Протокол UDP не предусматривает отдельной процедуры установления связи и позволяет использовать и одну и ту же программу в качестве как клиента, так и сервера. Для работы по протоколу UDP необходимо задать для клиента свойство LocalPort, а для сервера - свойства RemoteHost (Internet-адрес клиентской машины) и RemotePort (тот же номер порта, который задан в качестве LocalPort компьютера-клиента). Отправка и получение данных происходят так же, как при использовании протокола TCP: для отправки применяется метод SendData, при получении сообщения возникает событие DataArrival, обработка которого должна состоять в вызове метода GetData. Задание протокола Протокол, который будет использовать программа, определяется свойством Protocol. Значение sckTCPProtocol соответствует протоколу TCP, а значение sckUDPProtocol - протоколу UDP. Нужное значение можно задать как в окне свойств Winsock, так и вручную, с помощью оператора Winsock1.Protocol = sckTCPProtocol Определение имени компьютера Чтобы связаться с удаленным компьютером, нужно указать его IP-адрес или имя. Поскольку IP-адрес труден для запоминания (это четыре трехзначных числа, разделенных точками), чаще пользуются именем компьютера. Его вы найдете в поле Computer name ("Имя компьютера") на странице Identification ("Компьютер") окна свойств сети. Чтобы открыть это окно, нужно выбрать значок Network ("Сеть") на Панели управления или пункт Properties ("Свойства") контекстного меню, которое появляется при щелчке правой кнопкой мыши по значку Network Environment ("Сетевое окружение") на Рабочем столе Windows. Пример использования Winsock Ниже мы продемонстрируем использование Winsock при создании TCP-клиента и TCP-сервера, построив два отдельных приложения, которые будут запускаться на разных машинах. Чтобы пример работал, на обеих машинах должен присутствовать Winsock. Там, где его нет, следует предварительно установить в VB связь с файлом Mswinsck.ocx. После этого как для клиента, так и для сервера необходимо добавить к пользовательской форме элемент Microsoft WinSock Control, version 5.0, но дальнейшие действия для клиента и сервера различны. Настройка TCP-сервера - Поместите на ту же форму, где находится Winsock, два элемента управления TextBox ("Поле").
- Установите значения свойств для формы и элементов управления так, как показано в таблице:
Объект | Свойство | Значение | UserForm | Name | usfServer | UserForm | Caption | TCP-сервер | Winsock | Name | tcpServer | TextBox1 | Name | txtSendData | TextBox2 | Name | txtOutput | - В окне кода введите следующий текст:
Option Explicit Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long) ' Проверка, установлено ли значение свойства State ' элемента управления как Closed. Если нет, закрывает связь ' перед тем, как принять новую связь If tcpServer.State <> sckClosed Then tcpServer.Close ' Принимает запрос с параметром requestID tcpServer.Accept requestID End Sub Private Sub txtSendData_Change() ' Элемент управления TextBox, называемый txtSendData, ' содержит данные, которые надо отправить. Когда ' пользователь пишет что-либо в поле ввода, строка ' отправляется с помощью метода SendData tcpServer.SendData txtSendData.Text End Sub Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long) ' Объявление переменной для поступающих данных. ' Использует метод GetData и устанавливает свойство Text ' элемента управления TextBox, называемого txtOutput, ' как данные Dim strData As String tcpServer.GetData strData ' В Microsoft Access подставьте txtOutput.Value вместо ' txtOutput.Text в следующей строке txtOutput.Text = strData End Sub Private Sub UserForm_Initialize() ' Устанавливает свойство LocalPort как целое число, а ' затем активизирует метод Listen Server.LocalPort = 1001 tcpServer.Listen End Sub Настройка TCP-клиента - Поместите на ту же форму, где находится Winsock, элемент управления CommandButton ("Кнопка") и два элемента TextBox ("Поле").
- Установите значения свойств для формы и элементов управления так, как показано в таблице:
Объект | Свойство | Значение | UserForm | Name | usfClient | UserForm | Caption | TCP-клиент | CommandButton | Name | cmdConnect | CommandButton | Caption | Связь | TextBox1 | Name | txtSendData | TextBox2 | Name | txtOutput | - Задайте значение свойства RemoteHost в соответствии с именем того компьютера, на котором будет запущен сервер.
- В окне кода введите следующий текст:
Option Explicit Private Sub UserForm_Initialize() ' Имя элемента управления Winsock - tcpClient. ' Чтобы задать удаленный компьютер, можно ' использовать либо IP-адрес (например, "121.111.1.1"), либо ' "дружественное" имя компьютера, как здесь tcpClient.RemoteHost = "your server machine" tcpClient.RemotePort = 1001 End Sub Private Sub cmdConnect_Click() ' Активизация метода Connect, чтобы инициировать связь tcpClient.Connect End Sub Private Sub txtSendData_Change() tcpClient.SendData txtSendData.Text End Sub Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long) Dim strData As String tcpClient.GetData strData txtOutput.Text = strData End Sub Запуск примера Скопируйте либо клиентскую, либо серверную часть программы на другой компьютер, после чего запустите клиентскую часть на одном компьютере, а серверную - на другом. Нажмите кнопку "Связь" на клиентской форме. Теперь при вводе какого-либо текста в поле txtSendData на любой из форм он должен появиться в поле txtOutput на другой форме. Окно TCP-сервера
| Окно TCP-клиента
| Просмотров: 12778
Ваш коментарий будет первым | | |