Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
nanshakov
Студент :)
891 / 324 / 12
Регистрация: 29.01.2011
Сообщений: 1,680
#1

Клиент-серверное общение. - Visual Basic .NET

10.08.2011, 23:41. Просмотров 1534. Ответов 12
Метки нет (Все метки)

Постараюсь обьяснить,чего хочу.
Вот коды коиента и сервера,взял с одной темы этого форума
Сервер
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
mports System.Net
Imports System.Net.Sockets
Imports System.Text
Module Module1
 
    Sub Main()
        Try
            'Тcp- слушатель, по ip-адресу 127.0.0.1 порт=2233
            Dim ip As IPAddress = IPAddress.Parse("127.0.0.1")
            Dim listener As TcpListener = New TcpListener(ip, 2233)
            'Начинаем прослушивание
            listener.Start()
            'Создаем клиента для принятия данных
            Dim client As TcpClient = listener.AcceptTcpClient()
            Dim ns As NetworkStream = client.GetStream()
            Dim connected As Boolean = True
            While connected = True
 
                'буффер для полученных данных
                Dim buffer() As Byte = New Byte(200) {}
                'считываем данные
                ns.Read(buffer, 0, buffer.Length)
                'Отображаем данные
                Console.WriteLine(Encoding.UTF8.GetString(buffer))
            End While
 
            ns.Close()
            Console.ReadLine()
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
    End Sub
 
End Module
Клиент
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Module Module1
 
    Sub Main()
        Try
            'Создаем клиента 
            Dim tc As Sockets.TcpClient = New Sockets.TcpClient()
            'Подключаемся, используя имя хоста и порт
            tc.Connect("localhost", 2233)
            Console.WriteLine("Подключение с сервером установлено...")
            'Получаем экземпляр NetworkStream для отправки данных
            Dim ns As NetworkStream = tc.GetStream()
            Dim connected As Boolean = True
            While connected = True
                Console.WriteLine("Введите сообщение...")
                Dim body As String = Console.ReadLine()
                'Перекодируем введенное сообщение в набор байтов
                Dim message() As Byte = Encoding.UTF8.GetBytes(body)
                'считываем данные
                ns.Write(message, 0, message.Length)
            End While
            tc.Close()
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
    End Sub
 
End Module
Стало интересно.как это все работает,полазил в коде,немного разобрался.Решил попробовать доработать.Идея такая-ввести ряд команд,для администрирования и обслуживания сервера.
Т.е запущен клиент,сервер я ввожу в сервере $info,и он мне выдает информацию.Но столкнулся с проблемой:я не знаю,как сделать так,что бы сервер воспринимал эти команды по-другому(не просто текст,а как команду)и как сделать так,что бы сервер отвечал клиенту(т.е выводил информацию,т.е двухсторонняя связь как бы)+ еще хотел реалезовать систему авторизации т.е ввожу *login тутлогин password тутпароль.Сервер это дело сверяет(текстовый док.прим.)и только после этого я могу вводить другие команды со знака $(так сказать защита).Ну,как кто нибудь может помочь?Мнеб понять,как бы это примерно реализовать...

Не по теме:

Вот,блин,что в голову ночью лезет...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.08.2011, 23:41
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Клиент-серверное общение. (Visual Basic .NET):

Как написать простое клиент-серверное приложение
Объясните как написать эл. приложение, которое просто отправляет какое нибудь...

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

Клиент-серверное приложение (чат) и динамический IP адрес
Доброго времени суток... Много шарил в инете в поисках исходников да и...

Организовать клиент-серверное взаимодействие через Интернет
хочу передавать данные с одного компьютера на другой через интернет, я не знаю...

Как создать простейшее клиент-серверное приложение с TCP
Подскажите как создать простейшее клиент-серверное приложение с TCP протоколом...

Написать клиент-серверное приложение для взаимодействия через интернет
Здравствуйте. Нужно написать приложение сервер и соответствующее ему клиент,...

12
kOS_77
193 / 185 / 9
Регистрация: 14.06.2011
Сообщений: 495
10.08.2011, 23:50 #2
тут уж ограничивает только полет фантазии. К примеру вставь здесь оператор If

vb.net
1
2
3
4
'считываем данные
                ns.Read(buffer, 0, buffer.Length)
                'Отображаем данные
                Console.WriteLine(Encoding.UTF8.GetString(buffer))
Дальше пишем примерно так

vb.net
1
2
If buffer = "Привет" then 'тут то как раз и пишеш что он тебе ответит или сделает, там format c:\ к примеру...
' Переводится так - если переменная buffer равна "Привет" тогда...
1
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
11.08.2011, 00:03 #3
Цитата Сообщение от nanshakov Посмотреть сообщение
Вот,блин,что в голову ночью лезет...
Это не блин, а вполне здоровое мышление и желание расширить горизонты своих познаний.

Насчет команд...
Клепал я как-то подобную штуку на работе.
На моем компе стоял "Сервер", у пользователей - "Клиент".
Сервер слал слово ScreenShot на короткий номер 10.5.5.50, клиент все входящие сообщения проверяет, и если встречает "особые", то выполняет ту или иную процедуру.
При этой строке программа делала скриншот экрана пользователя, рисовала на нем открытый в полэкрана браузер с непристойным содержимым, ставила дату и время на скриншоте, имя пользователя и отправляла начальнику на рабочий стол. Далее этот клиент пересылал особую команду клиенту на компе начальника, тот открывал скриншот, а заодно копировал со стола главбуха ведомости по зарплате к начальнику, находил в книге этого пользователя и заменял сумму аванса на сумму, в 2 раза меньше, в конец книги писался список ссылок, и вопрос о том, согласен ли начальник с таким авансом сотрудника. Книга тоже открывалась.

Потом мне надоело каждый раз пополнять список команд и вносить в них изменения и я сделал Клиент-сервер на все случаи жизни.

Нововведением было то, что сервер шлет клиентам не какую-то определенную команду, а самый настоящий исходный код (какими мы тут частенько делимся)
Этот код просто компилируется на клиентской машине, а экзешник запускается.
Таким образом, выслать можно очень и очень многое, но так как фантазией я обделен, то я до сих пор шлю Хелоу ворлд и хлопаю как идиот в ладоши, когда юзер звонит с непонятной проблемой.

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

Для надежности компилируются экзешники с произвольными именами, чтобы из-за одного не умер клиент до тех пор пока юзер не отправит отчет об ошибке в Майкрософт
1
kOS_77
193 / 185 / 9
Регистрация: 14.06.2011
Сообщений: 495
11.08.2011, 00:08 #4
Это я так понимаю "Контрольный в голову"...


Me.delete

1
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
11.08.2011, 00:14 #5
kOS_77, я просто пока свою сказку писал, не видел твоего сообщения. Все верно говоришь.
Автору советую пока начать с команд, а потом если будет желание, уже курить динамическую компиляцию.

Не по теме:

На всякий случай - на форуме есть все необходимые темы, в т.ч. и про компиляцию

1
nanshakov
Студент :)
891 / 324 / 12
Регистрация: 29.01.2011
Сообщений: 1,680
11.08.2011, 20:08  [ТС] #6
Ребят,помогайте.Что то я запутался в конец.Как сделать прием данных клиенту,и отправку данных с сервера?Сервер отправляет данные на порт(ну,прим 2234),клиен слушает.принимает данные.Пытался склеить кусок сервера с клиентом,но при этом терял клиентские функции.Как можно совместить их?
0
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
11.08.2011, 20:23 #7
nanshakov, Автор кода - Дмитрий Юпатов.
Он когда-то дал мне его и по сей день я им пользуюсь, подтачивая лишь под разные цели.
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Imports system.net
Public Class Form1
    Dim Client_UDP_output As New System.Net.Sockets.UdpClient
    Dim Client_UDP_input As New System.Net.Sockets.UdpClient(10101)
    Dim RemoteIpEndPoint As New IPEndPoint(IPAddress.Any, 0)
    Dim ListenerThread As Threading.Thread
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim sendBytes As [Byte]() = System.Text.Encoding.Default.GetBytes(Me.TextBox1.Text)
        Client_UDP_output.Send(sendBytes, sendBytes.Length, New IPEndPoint(IPAddress.Broadcast, 10101))
    End Sub
 
    Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        Me.Client_UDP_input.Close()
    End Sub
 
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.start_thread()
    End Sub
 
    Private Sub start_thread()
        Try
            ListenerThread = New Threading.Thread(AddressOf DoListen)
            ListenerThread.Start()
        Catch ex As Exception
        End Try
    End Sub
 
 
    Private Sub DoListen()
        Do While Not ListenerThread Is Nothing
            Try
                Dim receiveBytes As Byte() = Client_UDP_input.Receive(RemoteIpEndPoint)
                Dim returnData As String = System.Text.Encoding.Default.GetString(receiveBytes)
                Me.ReturnData_toMainThread(returnData)
            Catch ex As Exception
                ListenerThread.Abort()
            End Try
        Loop
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Me.ListenerThread.Abort()
    End Sub
    '=====================================
    Private Delegate Sub MSG_Delegate(ByVal Text As String)
 
    Private Sub ReturnData_toMainThread(ByVal Text As String)
        ' является ли вызвавший поток родным потоком окна?
        If Not Me.InvokeRequired Then
            ' вызвать родной, незащищенный метод формы
           Me.Text = Text
        Else
            ' косвенный вызов метода
            Dim d As System.Delegate = New MSG_Delegate(AddressOf ReturnData_toMainThread)
            ' асинхронно вызвать этот же метод, с теми же параметрами.
            Me.BeginInvoke(d, New String() {Text})
        End If
    End Sub
End Class
1
Provaider
104 / 32 / 1
Регистрация: 01.10.2010
Сообщений: 310
12.08.2011, 00:04 #8
Цитата Сообщение от Памирыч Посмотреть сообщение
При этой строке программа делала скриншот экрана пользователя, рисовала на нем открытый в полэкрана браузер с непристойным содержимым, ставила дату и время на скриншоте, имя пользователя и отправляла начальнику на рабочий стол. Далее этот клиент пересылал особую команду клиенту на компе начальника, тот открывал скриншот, а заодно копировал со стола главбуха ведомости по зарплате к начальнику, находил в книге этого пользователя и заменял сумму аванса на сумму, в 2 раза меньше, в конец книги писался список ссылок, и вопрос о том, согласен ли начальник с таким авансом сотрудника. Книга тоже открывалась.
Баба Яга нервно раскуривает плант со своей делянки. Хотя идея тоже хорошая. Хоть посмеюсь над коллегами, только чуть в более мягкой форме, а то могут и не понять.
А если серьёзно и по делу, то идея такая. Лучше не зашивать весь список доступных команд в экзешник, а добавить в текстовых файл к проекту-это позволит добавлять новые функции в программу без лишнего напряга. А для выполнения каждой команды сделать отдельную библиотеку. Это о5 же позволит модернизировать программу по своему собственному усмотрению, а пользователям позволит включать\отключать дополнительные функции по своему усмотрению.
1
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
12.08.2011, 00:07 #9
Цитата Сообщение от Provaider Посмотреть сообщение
каждой команды сделать отдельную библиотеку
А как их увязать с экзешником? Откуда он будет знать, что вот эта библа добавилась?
1
nanshakov
Студент :)
891 / 324 / 12
Регистрация: 29.01.2011
Сообщений: 1,680
12.08.2011, 13:45  [ТС] #10
Цитата Сообщение от Памирыч Посмотреть сообщение
А как их увязать с экзешником? Откуда он будет знать, что вот эта библа добавилась?
Создать тестовый файл,с путями до библиотек.Сервер(или клиент)сканируют его на записи и по ним подключают библтотеки.Как то так.
0
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
12.08.2011, 16:44 #11
nanshakov, интересно было бы посмотреть на сие чудо.
Процедуры и функции библиотеки вызываются в основном, в коде, после того как библа подключена в референсах в режиме проектирования.
Надеюсь, что есть способ динамического подключения библиотек, по крайней мере, верю в это, и даже вызов процедур по записям из текстового файла, но все же хотелось бы взглянуть - это просто рассуждения или уже опробованный вариант и готовый для форума в качестве показательного примера?
0
Eugene22
_
2349 / 1222 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
12.08.2011, 17:14 #12
По поводу динамического подключения библиотек и динамической компиляции не стоит обольщаться - большинство библиотек типа System.Drawing, нормально подключается. Но вот как-то я делал текстовый редактор с поддержкой макросов и мне захотелось во время выполнения программы написать и выполнить макрос, который бы синтезировал написанное в редакторе в речь, но System.Speech, ни в какую не захотела подключаться. Возможно, какие-то подобные проблемы могут возникнуть и с другими библиотеками.
0
Provaider
104 / 32 / 1
Регистрация: 01.10.2010
Сообщений: 310
12.08.2011, 21:30 #13
Цитата Сообщение от nanshakov Посмотреть сообщение
Создать тестовый файл,с путями до библиотек.Сервер(или клиент)сканируют его на записи и по ним подключают библтотеки.Как то так.
Ну да, как-то так=)
Теперь проблема описанная Памирычем...

Добавлено через 3 часа 25 минут
vb.net
1
2
public static System.Reflection.Assembly LoadFrom(string assemblyFile) 
     Member of System.Reflection.Assembly
Возможно как-то так вот
0
12.08.2011, 21:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2011, 21:30
Привет! Вот еще темы с решениями:

Как создать клиент-серверное приложение, работающее через Интернет
В связи с тем, что первый этап моей игры завершен, теперь мне необходимо...

Какие технологии в .Net необходимо использовать чтобы написать клиент-серверное приложения (локальная сеть / интернет)?
Доброго времени суток. С помощью каких технологий в .Net пишут клиент-серверные...

Общение двух одинаковых программ между собой
Есть программа, запущенная два раза, в ней имеется textbox1, button1 и label1....

Общение с микроконтроллером через COM порт для управления светодиодной лентой
Приветствую! Подскажите, что не так? Написал код в Visual Basic 2012 для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru