Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Использование протокола TCP





Создадим два очень простых приложения для демонстрации программ сервера и клиента с применением протокола TCP. На рис. 13.1 приведена форма приложения-сервера в режиме разработки, а далее — таблица с элементами управления формы.

Рис. 13.1

Форма приложения-сервера в режиме разработки

Тип элемента Свойство, которое изменено (используется в коде) Значение Примечание
UserForm Caption Server Заголовок формы
  ControlBox False Кнопки управления формой не нужны.
Frame Name Frame1  
  Caption Передаваемая информация  
TextBox Name txtOutPut Окно для передаваемых клиенту данных.
  MultiLine True Окно — многострочное.
CommandButton Name CmdSend Кнопка для передачи данных клиенту.
  Caption Передать Заголовок на кнопке
Frame Name Frame2  
  Caption Принятая информация  
TextBox Name txtInput Окно для принятых данных данных.
  MultiLine True Окно — многострочное.
Winsock Name tcpServer  
Label Name Label1 Метка для сообщения некоторой информации.
  Caption Label1  
CommandButton Name CmdExit Кнопка для закрытия приложения.
  Caption Выход  

В листинге 13.1 представлен код модуля формы приложения-сервера, который демонстрирует основные правила работы подобного приложения. В строках 4–12 описан код программы загрузки формы; здесь свойству Winsock -элемента LocalPort присваивается номер порта для «прослушивания» (строка 7) и выполняется (строка 10) метод Listen (этого же элемента управления).

Листинг 13.1 Код модуля формы приложения-сервера

Option Explicit

 

Private Sub Form_Load()

' установить порт для обмена данными:

tcpServer.Bind 1001

' "прослушивать" порт:

tcpServer.Listen

End Sub

 

Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long)

' обработка запроса на установление связи

If tcpServer.State <> sckClosed Then tcpServer.Close

' завершить процедуру установления связи:

tcpServer.Accept requestID

Beep

tcpServer.SendData "Есть связь!"

Label1.Caption = "Есть связь!"

End Sub

 

Private Sub CmdSend_Click()

' отправить данные клиенту

tcpServer.SendData txtOutPut.Text

End Sub

 

Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)

Dim strData As String

' принять данные от клиента:

tcpServer.GetData strData

' отобразить принятые данные в текстовом окне:

txtInPut.Text = strData

End Sub

Private Sub CmdExit_Click()

' закрыть приложение:

Unload Me

End Sub

Процедура tcpServer_ConnectionRequest (строки 15–27) обрабатывает запрос на установление связи. Здесь используется метод Accept (строка 21) элемента Winsock. Далее выполняется звуковой сигнал, передача строки " Есть связь! " приложению-клиенту и на панель приложения-сервера при помощи метки. Таким образом, и клиент, и сервер будут знать о начале сеанса связи.

Процедура CmdSend_Click (строки 30–35), состоящая всего из одного оператора, при помощи метода SendData передает данные из текстового окна txtOutPut клиенту.

Процедура tcpServer_DataArrival (строки 38–48) при помощи метода GetData принимает данные от клиента и помещает их в текстовое окно txtInPut.

На рис. 13.2 приведена форма приложения-клиента в режиме разработки, а далее — таблица с элементами управления формы.

Рис. 13.2

Форма приложения-клиента в режиме разработки

Тип элемента Свойство, которое изменено (используется в коде) Значение Примечание
UserForm Caption Server Заголовок формы
  ControlBox False Кнопки управления формой не нужны.
Frame Name Frame1  
  Caption Передаваемая информация  
TextBox Name txtOutPut Окно для передаваемых клиенту данных.
  MultiLine True Окно — многострочное.
CommandButton Name CmdSend Кнопка для передачи данных клиенту.
  Caption Передать Заголовок на кнопке
Frame Name Frame2  
  Caption Принятая информация  
TextBox Name txtInPut Окно для принятых данных данных.
  MultiLine True Окно — многострочное.
Winsock Name tcpClient  
CommandButton Name CmdExit Кнопка для закрытия приложения.
  Caption Выход  

В листинге 13.2 представлен код модуля формы приложения-клиента, который демонстрирует основные правила работы подобного приложения. В строках 4–12 описан код программы загрузки формы; здесь свойству LocalPort объекта tcpClient типа Winsock присваивается имя удаленного компьютера (строка 7) и задается (строка 10) номер порта для обмена данными — используется свойство RemotePort (этого же элемента управления).

Листинг 13.2 Код модуля формы приложения-клиента

Option Explicit

Private Sub Form_Load()

' задать имя компьютера-сервера:

tcpClient.RemoteHost = "169.254.230.100"

' задать порт для обмена данными:

tcpClient.RemotePort = 1001

End Sub

 

Private Sub CmdConnect_Click()

' запрос на соединение с сервером

If Not tcpClient.State = sckOpen Then tcpClient.Connect

End Sub

 

Private Sub CmdSend_Click()

' отправить данные на сервер

tcpClient.SendData txtOutPut.Text

End Sub

 

Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)

Dim strData As String

' принять данные от сервера:

tcpClient.GetData strData

' отобразить принятые данные в текстовом окне:

txtInPut.Text = strData

End Sub

 

Private Sub tcpClient_Error(ByVal Number As Integer, _

Description As String, ByVal Scode As Long, _

ByVal Source As String, ByVal HelpFile As String, _

ByVal HelpContext As Long, CancelDisplay As Boolean)

' обработка ошибок

MsgBox Description

End Sub

 

Private Sub CmdExit_Click()

' закрыть приложение

Unload Me

End Sub

Процедура CmdConnect_Click (строки 15–20) выполняет запрос на установление связи. Здесь используется метод Connect объекта tcpClient типа Winsock. Если сервер не ответит, на этом работа приложения-клиента может завершаться — посредством процедуры обработки события кнопки CmdExit.

Если сервер ответит, то выполнится процедура tcpClient_DataArrival (строки 29–39), которая примет от сервера строку " Есть связь! " и отобразит ее в текстовом окне txtInPut (строка 37), как обычные данные.

В строках 22–27 записана процедура передачи данных на сервер, которая ничем не отличается от аналогичной прцедуры приложения-сервера.

Определенную пользу может принести процедура обработки ошибок (строки 42–50), которая просто отображает посредством MsgBox параметр Description.

На рис.13.3 представлены диалоговые окна приложений-собеседников, которые «общаются» по протоколу TCP. В данном случае оба приложения выполняются на одном компьютере, все остальное у них «настоящее».

Рис. 13.3

Сеанс TCP-связи приложений-собеседников

Для того чтобы используемые в листингах 13.1 и 13.2 свойства и методы объекта типа Winsock стали более понятными, в следующей таблице прведены наиболее значимые из них.

Таблица 13.1 Некоторые свойства и методы и события объекта типа Winsock

Свойства
ByteRecived Возвращает количество полученных данных (находящихся в принимающем буфере).
LocalHostName Возвращает имя локального компьютера. Доступно только для чтения.
LocalIP Возвращает IP-адрес локальной машины в формате “xxx.xxx.xxx.xxx”. Доступно только для чтения.
LocalPort Возвращает (или устанавливает) локальный порт. Доступно для чтения и записи и доступно в режиме разработки. Для клиента это свойство обозначает локальный порт, из котого отправляются данные. Если номер порта не имеет значения, можно указать 0 — приложение выберет случайный порт. Для сервера этот порт является принимающим. Можно также указывать порт 0 для работы со случайным портом, номер которого можно узнать после выполнения метода Listen.
Name Возвращает имя объекта типа Winsock, которое используется в коде.
Protocol Возвращает или устанавливает протокол обмена: TCP (константа sckTCPProtocol) или UDP (константа sckUDPProtocol). Перед тем как переустановить протокол, следует закрыть управляющий элемент методом Close. По умолчанию используется протокол TCP.
RemoteHost Возвращает или устанавливает IP-адрес или имя удаленного компьютера (или даже FTP-адрес).
RemoteHostIP Возвращает IP-адрес удаленного компьютера. Для приложения-клиента: после установления соединения (с использованием метода Connect) это свойство содержит IP-адрес компьютера с приложением-сервером. Для приложения-сервера: после возникновения события ConnectionRequest это свойство содержит IP-адрес компьютера с приложением, которое инициировало соединение. При использовании протокола UDP после возникновения события DataArrival это свойство содержит IP-адрес компьютера с приложением, пославшим данные.
RemotePort Возвращает или устанавливает номер порта удаленного компьютера. Порты, устанавливаемые по умолчанию: 80 для HTTP, 26 для FTP.
State Возвращет состояние элемента управления типа Winsock. Доступно только для чтения в режиме выполнения приложения. Возвращает следующие значения констант: sckClosed, sckOpen, sckListening, sckConnectionPending, sckResolvingHost, sckHostResolved, sckConnecting, sckConnected, sckClosing, sckError.
Методы
Accept Создает соединение в процедуре обработки события ConnectionRequestв приложении-сервере. (Только для TCP-протокола.)
Bind Резервирует локальный порт для его использования элементом Winsock.
Close Закрывает TCP-соединение или порты приложения-сервера и приложения-клиента.
Listen Метод применяется только для TCP-соединения и устанавливает режим «прослушивания».
SendData/GetData Посылает/принимает данные.
Событие
Close Возникает, когда удаленный компьютер закрывает соединение. Если, например, к коду листинга 13.1 (приложение-сервер) добавить процедуру: Private Sub tcpServer_Close() Label1.Caption = "Клиент отключился!" End Sub и в код процедуры CmdExit_Click листинга 13.2 (приложение-клиент) добавить оператор tcpClient.Close: Private Sub CmdExit_Click() ' закрыть приложение tcpClient.Close Unload Me End Sub то при окончании работы приложения-клиента в диалоговом окне приложения-сервера отображается сообщение "Клиент отключился!".
Connect Возникает (в приложении-клиенте) после подключения к серверу и имеет следующий синтаксис: Private Sub object _Connect(ErrorOccurred As Boolean) Здесь аргумент указывет на успешность соединения.
ConnectionRequest Возникает, когда удаленный компьютер посылает запрос на создание соединения. Это событие используется только приложением-сервером.
DataArrival Возникает при получении данных.
Error Возникает при ошибке.
SendComplete Возникает после передачи данных.
SendProgress Происходит во время передачи данных и имеет синтаксис: object _SendProgress (bytesSent As Long, bytesRemaining As Long) Здесь аргументы возвращают количество уже переданных и оставшихся в буфере для передачи данных.

Date: 2015-09-25; view: 365; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию