Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VB_Winsock(TCP+UDP).doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
67 Кб
Скачать
☆

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.

П римечание.

  1. При таком программировании узлы полностью равноправны и могут передавать сообщения друг другу в любом направлении, используя методы Send и Get Data.

  2. При обращении клиента к другому серверу по протоколу UDP нужно изменить только Remote Host и Remote Port. При использовании протокола TCP клиенту необходимо закрыть соединение, а затем заново открыть новое.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]