- •Лабораторная работа №3.
- •I. Задание.
- •II. Краткие теоретические сведения.
- •1 . Элемент управления Winsock.
- •2. Определение сокета (гнезда).
- •3. Алгоритм работы с тср.
- •7. Работа Winsock по протоколу udp.
- •4. Программирование сервера.
- •5. Программирование клиента.
- •6. Прием и передача данных.
- •III. Вопросы к лабораторной работе.
- •IV. Требования к оформлению отчета.
4. Программирование сервера.
а). Установка свойства Protocol (элемента Winsock для сервера).
Свойство Protocol может быть установлено в режиме Design, либо Run. По умолчанию этому свойству присваивается протокол TCP.
б). Установка свойства LocalPort и вызов метода Listen (элемента Winsock для сервера).
Используя свойство LocalPort, специфицируется порт, через который сервер будет взаимодействовать с клиентом. С помощью метода Listen сервер "прослушивает" входящие запросы на установку соединение от клиента.
Private Form_Load( )
sckServer.LocalPort=1001
sckServer.Listen
End Sub
в). Используя событие ConnectionRequest, запрограммировать действие по принятию или отклонению запроса соединения.
Private Sub sckServer_ConnectionRequest(ByVal requestID As Long)
' Если управляющий элемент sckServer не закрыт, то его
' необходимо перевести в закрытое состояние.
If sckServer.State <> sckClosed Then sckServer.Close
sckServer.Accept requestID ' Метод Accept необходимо использовать с 'параметром requestID, идентификатором поступающего запроса на соединение.
End Sub
5. Программирование клиента.
а). Установка свойства Protocol (элемента Winsock для клиента).
Свойство Protocol может быть установлено в режиме Design, либо Run. По умолчанию этому свойству присваивается протокол TCP.
б). Используя свойство RemoteHost, специфицируется имя удаленной машины (сервера); используя свойство RemotePort, специфицируется порт удаленной машины (сервера), через который клиент будет общаться с удаленной машиной.
Private Sub Form_Load ( )
sckClient.RemoteHost = “Q4” ' Здесь UT2-имя удаленной машины
sckClient.RemotePort = 1001 ' Значение свойства RemotePort должно совпадать 'со значением свойства LocolPort сервера.
End Sub
в) Используя метод Connect, инициируется начало соединения между клиентом и удаленной машиной (сервером).
Private Sub cmdСonnect_Click ( )
sckClient.Connect "Q4", 1001 ' Параметры метода Connect могут быть
'опущены
End Sub
6. Прием и передача данных.
После установления соединения передачу данных может осуществить как клиент, так и сервер. Ниже приведен пример передачи данных, содержащихся в текстовом буфере txtSendData, клиентом:
Private Sub cmdSend ( )
sckClient.SendData txtSendData.Text
End Sub
Прием осуществляется, используя событие Data Arrival, с помощью метода GetData. Ниже приведен пример приема данных сервером в текстовый буфер txtInput.Text:
Private Sub sckServer_ Data Arrival (ByVal bytesTotal As Long)
Dim strData As String
sckServer.GetData strData
txtOutput.Text = strData
End Sub
Примечание 1. Параметр bytesTotal, процедуры события DataArrival, указывает на количество пришедших байт.
Примечание 2. Процедуры передачи и приема могут находиться и в клиенте, и в сервере.
7. Работа Winsock по протоколу udp.
Различают два способа программирования сервера и клиента по протоколу UDP: "несимметричное" программирование, когда имеет значение кто первым начнет передачу, и "симметричное" программирование, когда не имеет значение кто первым начнет передачу.
Р
ассмотрим
"несимметричное"
программирование. Пусть приложение –
клиент первым обращается к приложению
– сервер. В этом случае, в приложении –
клиент должны быть указаны следующие
свойства Winsock: Remote Host и Remote Port, т.е.
полностью определен сокет удаленного
сервера. В приложении - сервер необходимо
использовать метод Bind, в параметрах
которого требуется указать локальный
порт (Local Port), который будет использован
приложением – сервер. Безусловно, Remote
Port, указанный в приложении – клиенте,
должен совпадать со значением параметра
Local Port, указанного в приложении – сервер.
Примечание.
1. При запуске приложения – сервер используется метод Bind, который осуществляет привязку своего локального порта со своим IP – адресом. Кроме того, он переводит состояние сокета в sckOpen –"открыто".
2. Сокет приложения – клиента переходит в состояние "открыто" при выполнении метода Send.
3. После первой передачи сообщения от клиента серверу, передача может происходить в обоих направлениях (используя методы Get Data и Send с обеих сторон).
Рассмотрим "симметричное" программирование. Для этого случая и приложение – клиент и приложение – сервер программируются одинаково. В обоих приложениях устанавливаются свойства Winsock: Remote Host и Remote Port и вызывается метод Bind.
П
римечание.
При таком программировании узлы полностью равноправны и могут передавать сообщения друг другу в любом направлении, используя методы Send и Get Data.
При обращении клиента к другому серверу по протоколу UDP нужно изменить только Remote Host и Remote Port. При использовании протокола TCP клиенту необходимо закрыть соединение, а затем заново открыть новое.
