Несколько слов от автора:
Здравствуйте. Вот подготовил вам очередной выпуск рассылки. На сегодняшний день дела у нее идут (летят, плывут :) ) очень хорошо. На
днях меня настигла одна идея: а не содать ли нам конфу по VB, чтобы каждый поучавствовал в проекте? Свои ответы на этот вопрос присылайте
свои ответы по приведеной ниже форме.
Создавать приложения, использующие UDP протокол проще, чем создавать приложения,
использующие TCP протокол. Дело в том, что UDP не требует уже установленного
соединения, как необходимого условия для передачи данных. В приложениях использующих
TCP соединение,
один Winsock элемент должен обязательно "слушать" порт, в ожидании пока какое-нибудь
другое приложение не станет инициатором соединения, использовав метод Connect.
UDP протокол не требует обязательно установленного соединения для передачи данных.
Для передачи данных между двумя приложениями, необходимо выполнить три следующих
пункта с обеих соединяющихся сторон:
- присвоить свойству RemoteHost дружественное имя или IP-адрес компьютера с
которым предстоит соединение;
- установить свойство RemotePort для LocalPort property of the second control.
- Вызвать метод Bind указав какой локальный порт будет использоваться (метод
Bind подробнее будет обсужден ниже).
Т.к. оба компьютера полагаются равными в установлении соединения, мы можем назвать
это соединение peer-to-peer. Чтобы продемонстрировать
это соединение мы создадим так называемое приложение-chat позволяющее двум людям
общаться в реальном режиме времени.
Для создания UDP соединения:
Создайте Standard EXE проект.
- Измените свойство name формы на frmPeerA.
- Измените свойство caption формы на "Peer A"
- Перетащите с панели инструментов иконку Winsock компонента и разместите его
на форме. Присвойте свойству name значение udpPeerA.
- Измените свойство Protocol на UDPProtocol.
- Добавьте два текстовых поля на форму.
Имя первой должно быть txtSend а второй txtOutput.
Добавьте приведенный ниже код на форму.
Private Sub Form_Load()
' Имя Winsock элемента udpPeerA
With udpPeerA
' Важно: правильно укажите значение RemoteHost
' компьютера, с которым предстоит соединение.
.RemoteHost= "PeerB"
.RemotePort = 1001 ' Имя порта для соединения.
.Bind 1002 ' Привязка к локальному порту.
End With
frmPeerB.Show ' Показать вторую форму.
End Sub
Private Sub txtSend_Change()
' Послать текст, как только он будет набран.
udpPeerA.SendData txtSend.Text
End Sub
Private Sub udpPeerA_DataArrival _
(ByVal bytesTotal As Long)
Dim strData As String
udpPeerA.GetData strData
txtOutput.Text = strData
End Sub
Чтобы создать второе UDP приложение.
- Добавить стандартную форму в проект.
- Изменить имя формы на frmPeerB.
- Изменить свойство caption формы на "Peer B".
- Перетащить и разместить иконку Winsock компонента на форму.
- Изменить имя Winsock на udpPeerB.
- Изменить свойство Protocol на UDPProtocol.
- Добавить два текстовых поля на форму.
Имя первого должно быть txtSend, а второго txtOutput.
Добавьте следующий код в форму.
Private Sub Form_Load()
' Имя Winsock элемента udpPeerB.
With udpPeerB
' Будьте внимательны указывая имя или IP-адрес
' компьютера с которым предстоит соединение.
.RemoteHost= "PeerA"
.RemotePort = 1002 ' Номер порта для соединения.
.Bind 1001 ' Привязка к локальному порту.
End With
End Sub
Private Sub txtSend_Change()
' Пересылать текст, как только он будет набран в текстовом поле.
udpPeerB.SendData txtSend.Text
End Sub
Private Sub udpPeerB_DataArrival _
(ByVal bytesTotal As Long)
Dim strData As String
udpPeerB.GetData strData
txtOutput.Text = strData
End Sub
Чтобы попробовать приложение запустите проект, и наберите в текстовом поле txtSend
каждой формы какой-то текст.
Этот текст появится в текстовых полях txtOutput другой формы.
О методе Bind.
Как показано в приведенном выше примере, Вы должны вызывать метод Bind, когда
создается UDP приложение. Метод Bind
резервирует локальный порт для использования его элементом Winsock. Например,
когда Вы привязываете свой элемент Winsock к порту 1001,
то ни одно другое приложение не может использовать этот порт для прослушивания.
Это может быть полезным, когда Вы хотите
воспрепятствовать какому-либо другому приложению использовать этот порт.
Метод Bind имеет еще один необязательный аргумент.
Если на вашем компьютере установлено более одного сетевого адаптера, аргумент
LocalIP позволит Вам точно указать
адаптер, который необходимо использовать. Если Вы не укажите этот аргумент,
то Winsock компонент будет использовать
тот сетевой адаптер, который расположен первым в списке, который можно посмотреть
в Пуск\Настройка\Панель управления\
Система\Сетевые платы.
Когда используется UDP протокол, Вы можете изменять свойства RemoteHost и RemotePort
пока сохраняется привязка
к тому же самому LocalPort. Если бы Вы использовали TCP протокол, то прежде
чем сменить свойства RemoteHost и RemotePort,
необходимо сначала закрыть соединение.
С вопросами по тексту статьи обращаться к Oleg
Palayda
Вопросы / Ответы
Вопрос от Виктора Турбова Есть проект, я его откомпилировал.
Необходимо, чтобы, в какой-то функции можно было менять строки или блоки и не компилировать после этого программу.
А программа выглядела как откомпилированная.
Т.е создать как-бы модуль подстройки текста.
Можно ли такое сделать?
Вопрос от @LEXis`a Здравствуйте,
Кто-нить помогите, хочу поподробнее изучить работу VB с базами данных и екселем. Плиз, пришлите что-нибудь на эту тему. И еще как сделать поиск в строках с документами екселя.
Объявления
Требуются люди
Хочу напомнить, что еще пусты многие вакансии рассылки:
- Рубрика "Рецензия книг"
- Рубрика "Практикум на примерах"
Также можно просто присылать коды.