Программирование
Веб программирование

WinSock в Visual Basic.NET

 
 

Сегодня мы познакомимся с WinSock контролом.

WinSock - это компонент через который можно соединяться с удаленной машиной и обмениваться с ней данными.

WinSock использует 2 протокола - 1) UDP (User Datagram Protocol)  и 2) TCP (Transmission Control Protocol).

Оба эти протокола используются для создания Клиент-Серверных приложений..

В этом уроке мы напишем программу клиент - сервер на Visual Basic.NET

Начнем. Сначала создадим Сервер.

1. Создаем новый проект(Файл->Новый проект->Приложение Windows Form) или у кого версия английская (File->New Project->Application Windows Form)2. Добавляем элемент WinSock.(смотрите видео кто не знает как добавить WinSock

2.Добавляем элемент WinSock(смотрите видео как добавить Winsock)

Видео: 

3. Раз кликаем на WinSock1 и добавляем его на форму. Изменим у него свойство Name на tcpServer

4. Добавим на форму два TextBox'а и один Button

5. Вот что должно получиться(немного приукрасил)

6. Переходим к коду.

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        tcpServer.RemoteHost = tcpServer.LocalIP ' RemoteHost должен соответствовать дружественному имени или IP-адресу вашего компьютера
        tcpServer.LocalPort = 2012 ' Задаем порт по которому будет происходить обмен данными
        tcpServer.Listen() ' Слушаем порт
    End Sub
    Private Sub tcpServer_ConnectionRequest(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent) Handles tcpServer.ConnectionRequest
        If tcpServer.CtlState <> MSWinsockLib.StateConstants.sckConnected Then tcpServer.Close() ' Проверяет свойство CtlState, если старое соединие не закрыто, то закрываем его принудительно
        tcpServer.Accept(e.requestID) ' Принимаем запрос
    End Sub
    Private Sub tcpServer_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles tcpServer.DataArrival
        tcpServer.GetData(TextBox2.Text) ' В TextBox2 мы будем получать сообщения от клиента
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        tcpServer.SendData(TextBox1.Text) ' Посылаем клиенту текст из TextBox1
    End Sub
End Class

7.  С сервером мы закончили. Сохраняем его и создаем новый проект. Это будет у нас клиент. На форму добавляем WinSock , два TextBox и два Button. У WinSock изменим свойство Name на tcpClient. Вот что должно получиться

8.  Переходим к коду.

ublic Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        tcpClient.RemoteHost = tcpClient.LocalIP ' Будем коннектиться к серверу по тому же локальному айпи адресу
        tcpClient.RemotePort = 2012 ' Такой же порт как и в сервере
    End Sub
    Private Sub tcpClient_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles tcpClient.DataArrival
        tcpClient.GetData(TextBox2.Text) ' В TextBox2 будем получать текст от сервера
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        tcpClient.Connect() ' Создаем соединение
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        tcpClient.SendData(TextBox1.Text) ' Отправляем текст серверу
    End Sub
End Class  

Сохраняем клиент.

Запускаем сервер, а потом клиент. В клиенте кликаем на кнопку Подключиться, а потом вводим текст в первое текстовое поле и нажимаем на кнопку отправить, этот текст буден виден во втором текстовом поле в сервере.

 

Проще поглядите видео:

 

Исходник

Будет сделан видео урок по типу чата. Вы скидываете клиент своему другу, а сами включаете сервер и общаетесь с ним на расстоянии) Он будет опубликован тут


Есть вопросы? Спроси на нашем форуме!!
Дмитрий [26.07.2012 19:48]

Спасибо! Очень хорошо для вирусов, посылать команды удаленному компьютеру. На пример, передать "shutdown -s -t 0".

Андрей [10.08.2012 14:15]

У меня нет WinSock в списке COM, что делать?

DIGIUS [10.08.2012 14:57]

добавить, посмотри на ютубе

Владимир [16.08.2012 18:48]

Кто знает как в Winsock проверить подключение.
Например:
Подключено!
или
Ошибка подключения!
огромная просьба кто знает напишите снизу код.

Алексей(alex13sh) [18.08.2012 18:10]

Незнаю как на Vb.Net но на Vb6
http://vbbook.ru/visual-basic/winsock-vb/

PS кидаю сылку для вб6 надеявшись что сможешь перевести на Vb.Net
Я прост ща немогу перевести (Vb.Net слетел(( )

Владимир [23.08.2012 20:37]

Алексей, я очень благодарен.

Алексей(alex13sh) [23.08.2012 22:18]

Владимир, незачто ))
рад помочь)

editbasic [14.02.2013 23:09]

К сожалению на удаленном компьютере не работает. Как сделать, чтобы и на удаленном работало?

zabir10 [14.11.2013 13:29]

Помогите пожалуйста, я не могу добавить WINSOCK.

Stertor370 [14.11.2013 14:38]

на делфи это в 2 клика делается. а вообще прикольно было бы создать свой сервер для чата - все клиенты подключаются сначала к этому компьютеру, а уж он обеспечивает, чтобы между подключившимися была связь.

Shade970 [15.11.2013 10:34]

zabir, Делается все очень просто, сервис->выбрать элементы панели элементов->COM и в этой вкладки ты его найдешь.

zabir10 [15.11.2013 21:02]

Shade900, я там и искал, и на видео показано, но у меня нету, не могу найти.

Shade970 [15.11.2013 21:11]

Скачай контрол отдельно!

Shade970 [15.11.2013 21:12]

Или давай я тебе кину его!

zabir10 [16.11.2013 00:26]

Shade900, было бы круто, кинь ссылку

Shade970 [16.11.2013 10:06]

Я не могу сюда дать ссылку, так как она отображается не правильно.

Shade970 [16.11.2013 10:08]

Дай мне какой нить адрес куда тебе кинуть ссылку.

zabir10 [16.11.2013 11:11]

Shade900, вот zabir.fatikhov@mail.ru

Shade970 [16.11.2013 15:40]

Отправил!

zabir10 [17.11.2013 17:26]

Shade910, спасибо большое !

alex13sh300 [18.11.2013 17:54]

Stertor, я уже делал чат. многоклиенский (клиент-сервер-клиент), делал на vb6 . Работало норм, Через неделю(отдыха), я не мог в нём разобраться( и забросил

Stertor370 [18.11.2013 18:40]

динамически создавал клиента?

alex13sh300 [19.11.2013 00:19]

динамическое количество соединений (динамический контрол винсок)

Shade970 [19.11.2013 21:45]

Stertor, тебе делаю последнее предупреждение иначе из бана ты не выйдешь!

prgm64 [18.03.2016 15:22]

Есть вопрос: я не нашёл компонент winsocks в дополнительных элементах, попытался добавить его из c:\Windows\system32\mswinsocks.dll, но выдал ошибку: WinSocks не является компонентом Microsoft .NET! Что делать?



Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.