Применение Winsock Control


WinSock Control позволит вам подключится к удаленной машине и обмениваться с ней информацией используя User Datagram Protocol (UDP) или Transmission Control Protocol (TCP). Оба протокола могут использоваться для создания как клиентского, так и серверного приложений. Как и Timer control, WinSock control не имеет видимого интерфейса в  при выполнении программ.

Возможное Применение

Выбор протокола

При использовании WinSock control, сначала подумайте, какой из протоколов, TCP или UDP вы будете использовать. Главное различие между ними это состояние подключения:

Характер приложения, который вы будете создавать – главным образом определит тип протокола, который вы выберите. Здесь приведены несколько вопросов, которые помогут вам, определится с выбором подходящего протокола:

Настройки протокола

Установите протокол, который будет использовать ваше приложение: вы можете установить свойства протокола с помощью кода, который приведен ниже:

 		Winsock1.Protocol = sckTCPProtocol 

Определение Имени Вашего Компьютера

Для подключении к удаленному компьютеру, вам нужно знать либо его IP адрес, либо его "дружественное имя (DNS имя)." IP адрес это серия из трех цифр разделенных точками (xxx.xxx.xxx.xxx). Но, в общем, гораздо проще запомнить дружественное имя (DNS имя) компьютера.

Найдите имя вашего компьютера

После того как вы определите имя компьютера, его можно использовать как значение в свойстве RemoteHost.

Основы TCP Подключения

Если создается приложение, использующее TCP протокол, для начала вы должны решить – ваше приложение будет сервером или клиентом. Создание сервера означает, то ваше приложение будет "слушать" назначенный порт. Если создается клиент, то он формирует запрос на подключение, сервер принимает этот запрос, таким образом, завершая подключение. При выполненном подключении, клиент и сервер могут беспрепятственно "общаться" друг с другом.
По следующим шагам создается простейший сервер:

Создание TCP сервера

Процедура, описанная выше создает простое серверное приложение. Тем ни менее, для выполнения этого сценария, вам так же необходимо создать клиентское приложение.

Создание TCP клиента

Важно:   Убедитесь, что изменили свойство RemoteHost на дружественное имя(DNS имя) вашего компьютера.

 	   
     Private Sub  Form_Load()
       ' The name of the Winsock control is  tcpClient.
       ' Note: to specify a remote host, you can  use
       ' either the IP address (ex:  "121.111.1.1") or
       ' the computer's "friendly" name,  as shown here.
       tcpClient.RemoteHost =  "RemoteComputerName"
       tcpClient.RemotePort = 1001
     End Sub
       
     Private Sub  cmdConnect_Click()
      ' Invoke the Connect method to initiate a
      ' connection.
      tcpClient.Connect
     End Sub
       
     Private Sub  txtSend_Change()
       tcpClient.SendData txtSend.Text
     End Sub
       
     Private Sub tcpClient_DataArrival  _
 	  (ByVal bytesTotal  As Long)
       Dim strData As String
       tcpClient.GetData strData
       txtOutput.Text = strData
     End Sub 


Код расположенный выше создает простое клиент-серверное приложение. Испробуйте их вместе, запустите, и нажмите Connect. Затем введите текст в txtSendData TextBox в любую из форм, и такой же текст появиться в txtOutput TextBox на другой форме.

Прием Более чем Одного Запроса на Подключение

Обычный сервер ограничен, принимать более одного запроса на подключение. Тем ни менее, есть возможность принять несколько запросов на подключение используя одинаковое управление для всех, посредством создания массива управления. В этом случае, вам не нужно закрывать подключения, а просто нужно создать новые экземпляры управления (назначая им свойство Index), и вызывая метод Accept для каждого нового экземпляра.
Код ниже описывает, элемент управления Winsock в форме под названием sckServer, и что его свойство Index было установлено равным 0; таким образом, элемент управления – это часть массива управления. В разделе Объявления переменных, объявлена переменная intMax. В событии формы Load, intMax устанавливается равным 0, и свойство LocalPort для первого элемента управления в массиве устанавливается равным 1001. Затем, когда элементом управления вызывается метод Listen, он переводит элемент управления в режим «прослушивания». Для каждого подключения требуется допуск, код проверяет, равен ли Index 0 (состояние  "слушает" у элемента управления). Если это так, слушающий элемент управления увеличивает intMax и использует это число, чтобы создать новый экземпляр элемента управления. И затем новый элемент управления использует accept, чтобы принять запрос на подключение.

 	   
      Private intMax As  Long
      Private Sub Form_Load()
 	     intMax = 0
 	     sckServer(0).LocalPort = 1001
 	     sckServer(0).Listen
      End Sub
      
      Private Sub  sckServer_ConnectionRequest _
 	   (Index As Integer,  ByVal requestID As Long)
 	     IfIndex = 0 Then
 	       intMax = intMax + 1
 	       Load sckServer(intMax)
 	       sckServer(intMax).LocalPort = 0
 	       sckServer(intMax).Accept requestID
 	       Load txtData(intMax)
 	     End If
      End Sub

Основы UDP

Создание UDP приложений проще, чем TCP приложений потому, что UDP протокол не  требует явной установки подключения. В TCP приложении описанном выше, один элемент управления Winsock должен быть установлен в режим "слушает" пока другой будет инициировать подключение через метод Connect.
Как противоположность, UDP протокол не требует явной установки подключения. Чтобы выполнить пересылку данных между двумя управляющими элементами, необходимо выполнить три шага (на обеих сторонах подключения):

Потому что оба компьютера могут рассматриваться, как  "равные" по взаимоотношению, это так же можно назвать как приложение точка-точка. Это демонстрирует код, представленный ниже, он создает приложение «чат», которое позволит двум людям «общаться» друг с другом в реальном времени:

Создание UDP Узла

Создание Второй UDP Точки

Испытайте свое приложение, нажмите F5, чтобы запустить проект, напечатайте текст в любой форме в txtSend  TextBox. Этот текст появится в другой форме в txtOutput TextBox.

О Методе Bind

Как показано в коде, представленном выше, вам нужно вызвать метод Bind при создании UDP приложения. Метод Bind "резервирует" локальный порт, используемый в элементе управления. Например, когда вы связываете элемент управления с портом 1001, никакое другое приложение не сможет использовать этот порт для установки "прослушивания". Это может оказаться полезным, если хотите предотвратить использование этого порта другим приложением.
Метод Bind имеет в своих свойствах второй аргумент. Если на машине имеется более одного сетевого адаптера, аргумент LocalIPпозволит вам указать какой именно адаптер используется. Если вы пропустите этот аргумент, то элемент управления использует первый адаптер в диалоговом окне список Сетевых Подключений компьютера из Настроек Панели Управления.
Если используется протокол UDP, вы можете легко менять свойства RemoteHost и RemotePort до тех пор пока оставшиеся bounds(связи) будут иметь один и тот же LocalPort. В то время как  в TCP протоколе, вам необходимо сначала закрыть соединение перед изменением свойств RemoteHost и RemotePort.

 


Назад