Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для SergKr
67 / 41 / 3
Регистрация: 07.12.2010
Сообщений: 328

Почему не работает клиент-сервер

15.03.2011, 20:21. Показов 1462. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Переделываю под себя найденый на форуме текст:
Сервер: Код:
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
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 
    Dim polsovatel(100, 1) As String 
    Dim i As Net.IPHostEntry = Net.Dns.GetHostByName(Net.Dns.GetHostName) 
    Dim NickName As String, IPServ As String = "192.168.0.146" 
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
        sendTXT("MSG|" & NickName & ": " & TextBox1.Text, IPServ, 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 
        'NickName = InputBox("Введите ваш никнайм", "NickName", "Server") 
        NickName = "Server" 
        'sendTXT("NU|" & NickName & "|" & i.AddressList(0).ToString, IPServ, 10101) 
        Me.start_thread() 
    End Sub 
 
    Sub sendTXT(ByVal xTxt As String, ByVal Ip As String, Optional ByVal Port As Integer = 4321) 
        Try 
            Dim sendBytes As [Byte]() = System.Text.Encoding.Default.GetBytes(xTxt) 
            Client_UDP_output.Send(sendBytes, sendBytes.Length, New IPEndPoint(IPAddress.Parse(Ip), Port)) ' "188.187.167.236" 
            Client_UDP_output = New System.Net.Sockets.UdpClient 
        Catch ex As Exception 
            Me.ReturnData_toMainThread(ex.Message) 
        End Try 
    End Sub 
 
    Private Sub start_thread() 
        Try 
            ListenerThread = New Threading.Thread(AddressOf DoListen) 
            ListenerThread.Start() 
            'Me.TextBox2.Text &= "Сервер вроде запущен" 
        Catch ex As Exception 
            Me.TextBox2.Text &= ex.Message 
        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) 
                Dim o() As String, raz As Boolean = False, count As Integer = 0 
                o = Split(returnData, "|") 
                If o(0) = "NU" Then 
                    'ListBox1.Items.Add(returnData) 
                    For ich As Integer = 1 To 100 
                        If Len(polsovatel(ich, 0)) = 0 And Not raz Then 
                            polsovatel(ich, 0) = o(1) 
                            polsovatel(ich, 1) = o(2) 
                            raz = True 
                        ElseIf Len(polsovatel(ich, 0)) > 0 Then 
                            count += 1 
                            sendTXT(returnData, polsovatel(ich, 1)) 
                        End If 
                        'ListBox1.Items.Add(returnData) 
                    Next 
                ElseIf o(0) = "MSG" Then 
                    Dim pos(100) As String 
                    For ich As Integer = 1 To 100 
                        If Len(polsovatel(ich, 0)) > 0 Then 
                            raz = True 
                            For ij As Integer = 1 To 100 
                                If polsovatel(ich, 1) = pos(ij) Then raz = False 
                            Next 
                            If raz Then 
                                count += 1 
                                sendTXT(returnData, polsovatel(ich, 1)) 
                                pos(ich) = polsovatel(ich, 1) 
                                Me.ReturnData_toMainThread(polsovatel(ich, 0) & " IP " & polsovatel(ich, 1)) 
                            End If 
                        End If 
                    Next 
                ElseIf o(0) = "EX" Then 
                    For ich As Integer = 1 To 100 
                        If polsovatel(ich, 1) = o(1) Then 
                            polsovatel(ich, 0) = vbNullString 
                            polsovatel(ich, 1) = vbNullString 
                        ElseIf Len(polsovatel(ich, 1)) > 0 Then 
                            sendTXT(returnData, polsovatel(ich, 1)) 
                        End If 
                    Next 
                ElseIf o(0) = "RE" Then 
                    Dim snd As String = vbNullString 
                    For ich As Integer = 1 To 100 
                        If ich > 1 Then snd &= "|" 
                        If Len(polsovatel(ich, 0)) > 0 Then 
                            snd &= polsovatel(ich, 0) & ":" & polsovatel(ich, 1) 
                        End If 
                    Next 
                    sendTXT("RE|" & snd, o(1)) 
                End If 
                'Me.ReturnData_toMainThread(returnData & " получили " & count) 
                Me.ReturnData_toMainThread(returnData) 
            Catch ex As Exception 
                ListenerThread.Abort() 
                Me.ReturnData_toMainThread(ex.Message) 
            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() 
        Me.Client_UDP_input.Close() 
        Me.Client_UDP_input = New System.Net.Sockets.UdpClient(10101) 
        Me.start_thread() 
    End Sub 
    '===================================== 
    Private Delegate Sub MSG_Delegate(ByVal Text As String) 
 
    Private Sub ReturnData_toMainThread(ByVal Text As String) 
        ' является ли вызвавший поток родным потоком окна? 
        If Not Me.InvokeRequired Then 
            ' вызвать родной, незащищенный метод формы 
            '!!!!!!!!!!! Здесь мы читаем то что пришло серверу.... 
 
 
            'If Len(TextBox2.Text) > 500 Then TextBox2.Text = vbNullString 
            Me.TextBox2.Text &= Text 
 
 
            If Mid(TextBox2.Text, 1, 2) = "NU" Then Me.NewUser() 
            If Mid(TextBox2.Text, 1, 2) = "EX" Then Me.ExitUser() 
 
 
            TextBox2.Text = "" 
 
        Else 
            ' косвенный вызов метода 
            Dim d As System.Delegate = New MSG_Delegate(AddressOf ReturnData_toMainThread) 
            ' асинхронно вызвать этот же метод, с теми же параметрами. 
            Me.BeginInvoke(d, New String() {Text}) 
        End If 
    End Sub 
    Private Sub NewUser() 
 
        ListBox1.Items.Add(Mid(TextBox2.Text, 4)) 
        sendTXT("OK=", IPServ, 10101) 
        'MsgBox("Отправил") 
    End Sub 
    Private Sub ExitUser() 
        ListBox1.Items.Add("Юзер вышел") 
    End Sub 
End Class

Клиент: Код:
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
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 
    Dim RemoteIpEndPoint As New IPEndPoint(IPAddress.Any, 0) 
    Dim ListenerThread As Threading.Thread 
    Dim polsovatel(100, 1) As String 
    Dim i As Net.IPHostEntry = Net.Dns.GetHostByName(Net.Dns.GetHostName) 
    Dim NickName As String, IPServ As String = "192.168.0.146" 
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
        sendTXT("EX|" & TextBox1.Text, IPServ, 10101) 
        TextBox1.Text = vbNullString 
    End Sub 
 
    Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click 
        'sendTXT("RE|" & i.AddressList(0).ToString, IPServ, 10101) 
    End Sub 
 
    Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed 
        sendTXT("EX|" & i.AddressList(0).ToString, IPServ, 10101) 
        Me.Client_UDP_input.Close() 
    End Sub 
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
        On Error Resume Next 
        Client_UDP_input.ExclusiveAddressUse = False 
        Client_UDP_output.ExclusiveAddressUse = False 
        Client_UDP_input.Close() 
        Client_UDP_output.Close() 
        Client_UDP_output = New System.Net.Sockets.UdpClient 
        Client_UDP_input = New System.Net.Sockets.UdpClient(4321) 
        'NickName = InputBox("Введите ваш никнайм", "NickName", "NewUser") 
        TextBox2.Text = "" 
        sendTXT("NU=" & i.AddressList(0).ToString, IPServ, 10101) 
        Me.start_thread() 
    End Sub 
 
    Sub sendTXT(ByVal xTxt As String, ByVal Ip As String, Optional ByVal Port As Integer = 10101) 
        Dim sendBytes As [Byte]() = System.Text.Encoding.Default.GetBytes(xTxt) 
        Client_UDP_output.Send(sendBytes, sendBytes.Length, New IPEndPoint(IPAddress.Parse(Ip), Port)) ' "188.187.167.236" 
    End Sub 
 
    Private Sub start_thread() 
        Try 
            ListenerThread = New Threading.Thread(AddressOf DoListen) 
            ListenerThread.Start() 
            'Me.TextBox2.Text &= "[Прослушивание сообщений] mode ON" 
        Catch ex As Exception 
            MsgBox(ex.Message) 
        End Try 
    End Sub 
 
    Sub AddUsrs() 
        Me.ReturnData_toMainThread("|CLEAR|", False) 
        For iss As Integer = 1 To 100 
            If Len(polsovatel(iss, 0)) > 0 Then 
                Me.ReturnData_toMainThread(polsovatel(iss, 0), False) 
            End If 
        Next 
    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) 
                Dim o() As String, raz As Boolean 
                TextBox2.Text = returnData 
                If TextBox2.Text = "OK=" Then MsgBox("OK") 
                'o = Split(returnData, "|") 
                'If o(0) = "NU" Then 
                ' For ich As Integer = 1 To 100 
                ' If Len(polsovatel(ich, 0)) = 0 And Not raz Then 
                ' polsovatel(ich, 0) = o(1) 
                ' polsovatel(ich, 1) = o(2) 
                ' raz = True 
                ' AddUsrs() 
                ' End If 
                ' Next 
                ' ElseIf o(0) = "MSG" Then 
                ' Me.ReturnData_toMainThread(o(1), True) 
                ' ElseIf o(0) = "EX" Then 
                ' For ich As Integer = 1 To 100 
                ' If polsovatel(ich, 1) = o(1) Then 
                ' polsovatel(ich, 0) = vbNullString 
                ' polsovatel(ich, 1) = vbNullString 
                'End If 
                ' Next 
                ' AddUsrs() 
                ' ElseIf o(0) = "RE" Then 
                ''Dim snd() As String = Split(o(1), "|") 
                'For ich As Integer = 0 To snd.Length - 1 
                ' Dim jk() As String = Split(snd(ich), ":") 
                ' polsovatel(ich + 1, 0) = jk(0) 
                ' polsovatel(ich + 1, 1) = jk(1) 
                ' Next 
                ' AddUsrs() 
                ' End If 
            Catch ex As Exception 
                ListenerThread.Abort() 
                Me.ReturnData_toMainThread(ex.Message, True) 
            End Try 
        Loop 
    End Sub 
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
        Me.ListenerThread.Abort() 
    End Sub 
    '===================================== 
    Private Delegate Sub MSG_Delegate(ByVal Text As String, ByVal oop As String) 
 
    Private Sub ReturnData_toMainThread(ByVal Text As String, ByVal oop As String) 
        ' является ли вызвавший поток родным потоком окна? 
        If Not Me.InvokeRequired Then 
            ' вызвать родной, незащищенный метод формы 
            If oop = True Then 
                'Me.TextBox2.Text &= vbNewLine & Text 
                'If Len(TextBox2.Text) > 500 Then TextBox2.Text = Mid(TextBox2.Text, 400) 
                'TextBox2.SelectionStart = Len(TextBox2.Text) 
                'TextBox2.ScrollToCaret() 
                If TextBox2.Text = "OK=" Then MsgBox("OK") 
            Else 
                If Text = "|CLEAR|" Then 
                    ListBox1.Items.Clear() 
                Else 
                    ListBox1.Items.Add(Text) 
                End If 
            End If 
        Else 
            If TextBox2.Text = "OK=" Then MsgBox("OK") 
            ' косвенный вызов метода 
            Dim d As System.Delegate = New MSG_Delegate(AddressOf ReturnData_toMainThread) 
            ' асинхронно вызвать этот же метод, с теми же параметрами. 
            Me.BeginInvoke(d, New String() {Text, oop}) 
        End If 
    End Sub 
 
    Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp 
        If e.KeyData = Keys.Enter Then 
            sendTXT("MSG|" & NickName & ": " & TextBox1.Text, IPServ, 10101) 
            TextBox1.Text = vbNullString 
        End If 
    End Sub 
End Class

Уже мозги пухнут. Сервер видит клиента отлично. НО по идее при приходе от клиента текста (в начале NU) должен отправить "OK=", вроде как отправляет, но клиент (по идее должен показать MsgBox) не реагирует...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.03.2011, 20:21
Ответы с готовыми решениями:

OLE. Access -клиент, Word - сервер. Работает через раз. "Сервер не валиден!"
Задача: получить путь прилинкованного файла. Тип OLE - связанный Рамка объекта - присоединенная Me.ПрисоединенныйOLE1.Action =...

Простейшие клиент-сервер на сокетах: почему ошибка 10060
Попытался реализовать простейшие клиент и сервер на сокетах. Оба - клиент и сервер работают на моем компьютере. Сервер открывает соединение...

Взаимодействие WinCC с Labview 2013, как сервер-клиент, так и клиент-сервер
Здравствуйте. Интересует информация о взаимодействии WinCC с Labview 2013, как сервер-клиент, так и клиент-сервер через ОРС-инфтерфейс. ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.03.2011, 20:21
Помогаю со студенческими работами здесь

Не работает клиент - сервер
Помогите найти ошибку. Надо: на сервере задано уравнение, клиент решает его методом деления пополам, запрашивая у сервера значение функции...

Не работает клиент-сервер
В общем на примерах разбираюсь с клиент-серверными приложениями. То есть например одно консольное приложение = сервер, второе приложение...

Не работает связь сервер/клиент
Привет всем народ =) Сделал прогу на java сервер и клиент, они работают, всё нормально запускается через командную строку клиент...

Не работает клиент/ сервер на физической машине
Дорогие форумчане, можете помочь мне реализовать перенос программы на физическую машину. После переноса программа не работает хотя на...

Сервер-клиент не работает через интернет
Есть готовые сервер клиент приложения в локальной сети работают на ура а если пытаться подключиться через интернет к компьютеру не в моей...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru