Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 07.01.2018
Сообщений: 8
.NET 4.x

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

27.09.2019, 12:19. Показов 1333. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый. Начал изучать c# windows forms, стал делать многопоточный клиент-сервер и столкнулся с проблемой. Суть проблемы в том, что при отправке от клиента сообщение на сервер приходит, а обратно нет. Если использовать метод socket.receiv(data) то окно наглухо зависает.При чем тот же самый метод получения работает в консольной программе.
Клиент;
C#
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
{
            IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(address), port);
 
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            // подключаемся к удаленному хосту
            socket.Connect(ipPoint);
 
            try
            {
                string message = textBox1.Text;
 
                byte[] data = Encoding.Unicode.GetBytes(message);
 
                socket.Send(data);
 
                // получаем ответ
                data = new byte[256]; // буфер для ответа
                StringBuilder builder = new StringBuilder();
                int bytes = 0; // количество полученных байт
 
                while (socket.Available > 0) ;
                {                    
                        bytes = socket.Receive(data);
                        builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
 
                  
                } 
                
                richTextBox1.Text = "ответ сервера: " + builder.ToString();
 
                // закрываем сокет
                    socket.Shutdown(SocketShutdown.Both);
                    socket.Close();
            }
            catch (Exception ex)
            {
                richTextBox2.Text = (ex.Message);
            }
        }
Сервер:
C#
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
while (true)
                {
                    Socket handler = listenSocket.Accept();
                    // создаем новый поток для обслуживания нового клиента
                    Thread clientThread = new Thread(new ThreadStart(thread));
                    clientThread.Start();
                    void thread()
                    {
                        // получаем сообщение
                        StringBuilder builder = new StringBuilder();
                        int bytes = 0; // количество полученных байтов
                        byte[] data = new byte[256]; // буфер для получаемых данных
                        do
                        {
                            bytes = handler.Receive(data);
                            builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
 
                        }
                        while (handler.Available > 0);
                        Console.WriteLine(DateTime.Now.ToLongTimeString() + " " + buildername.ToString() + ": " + builder.ToString());
                        fileStream = File.Open(filePath, FileMode.Append);
                        StreamWriter output = new StreamWriter(fileStream);
                        // отправляем ответ
                        string message = "ваше сообщение доставлено\r\n";
                        data = Encoding.Unicode.GetBytes(message);
                        handler.Send(data);
                        output.Write(DateTime.Now.ToLongTimeString() + ":" + " " + buildername + " " + builder + Environment.NewLine);
 
                          handler.Shutdown(SocketShutdown.Both);
                        handler.Close();
                        // закрываем сокет
                        output.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
 
            }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.09.2019, 12:19
Ответы с готовыми решениями:

Проблема с получением ключей типа REG_DWORD через WinAPI
День добрый. Проблема в следующем: имеется некий код для чтения информации из реестра на удаленных ПК средствами WinAPI ...

Проблема с получением привязанных данных при передаче готового объекта
все привет.Помогите разобраться У меня есть главная форма. По кнопке вызывается форма 2 на которой пользователь вносит данные. ...

Проблема с получением писем с pop.gmail.com (ssl)
Взял за основу пример в этом посте https://www.cyberforum.ru/windows-forms/thread171086.html#post999538 попытался доавить подключение...

3
91 / 65 / 18
Регистрация: 09.12.2015
Сообщений: 209
27.09.2019, 15:21
1. Работа с сетью выносится в отдельный поток, что бы не подвешивать интерфейс. Ну или хотя бы в цикле вызовите
Applicatin.DoEvents();

2. Зачем этот вечный цикл?
C#
1
while (handler.Available > 0);
3. Выставьте в настройках максимальное время ожидания ответа.
0
0 / 0 / 0
Регистрация: 07.01.2018
Сообщений: 8
27.09.2019, 18:44  [ТС]
С циклом накосячил. В новый поток сделал, все равно спотыкается в receive и кроме подключения на сервер ничего не приходит
0
91 / 65 / 18
Регистрация: 09.12.2015
Сообщений: 209
30.09.2019, 16:46
Клиент ждет ответ сервера.
Смотрите через Fiddler или WireShark что у вас приходит и уходит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.09.2019, 16:46
Помогаю со студенческими работами здесь

Проблема с получением групп из Active Directory
Собственно достаю из AD группы в которых состоит пользователь вот так: DirectoryEntry entry = new DirectoryEntry(directoryPath,...

Проблема с получением JSON пакета в WCF сервисе
господа, требуется помощь в следующей ситуации. У меня имеется WCF сервис, и он должен принимать JSON пакеты, POST запросом, с обязательно...

Отправить POST с последующим получением ответа
Смотрите ка <?php $myCurl = curl_init(); curl_setopt_array($myCurl, array( CURLOPT_URL =>...

Проблемы с получением ответа RADIUS из локальной сети
Мучаю микротиковский хотспот сам тестовый микротик подключен как dhcp-клиент в другой микротик (установленный дома...

Отправка переменной с JS в php с последующем получением ответа (Ajax?)
Всем привет. Нужно реализовать вот такую схему: Запрос с айди в JS > php файл с функцией (желательно, одной из нескольких), которая...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru