Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
5 / 5 / 4
Регистрация: 30.06.2012
Сообщений: 427

Многопоточный запрос у сервера

30.09.2021, 22:23. Показов 3784. Ответов 21

Студворк — интернет-сервис помощи студентам
Всем здравствуйте! Нужна помощь в состыковке всех методов. Я взял тестовое задание на вакансию c# программиста, просто, чтобы поработать с настоящим заданием, на саму вакансию не претендую.

Задание звучит так: По tcp\ip подключиться к серверу и отправить на него стрингом число от 1 до, условно, 500. На каждое присланное число сервер присылает целое число в диапазоне от 0 до 1е7 и по бокам от этого числа еще всякий мусор, символы там, точки. Нужно получить все числа и вычислить медиану.

Проблема в том, что каждое число сервер присылает с задержкой. Я, в целом, сделал всё, кроме многопоточности. Я пытаюсь реализовать это через async-await, но понимаю, что опыта мало, потому обращаюсь к вам. Как мне одновременно запрашивать несколько таких чисел у сервера с их последующей обработкой? Общую схему вижу такую:

5 асинк методов, которые отправляю числа от 1 до 500, каждый отвечает за свой диапазон чисел. Скажем, первый метод в цикле for отправляет числа от 1 до 100, второй от 101 до 200 и так далее. Каждое полученное число фильтруется через регулярные выражения, где отрезается весь мусор по бокам, само число конвертируется в инт и отправляется в общий массив. После выполнения всех 5 методов с их циклами уже в Мэйне весь массив сортируется и вычисляется медиана, так же все числа массива записываются в файл, но это уже чисто для меня.

Я понимаю, что скорее всего что-то упускаю, потому прошу, не откажите, покажите верный путь. Мой код кидает эксепшн: "Unable to read data from the transport connection: Программа на вашем хост-компьютере разорвала установленное подключение..."

Прикладываю код:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
namespace ConsoleApp1
{
   namespace ConsoleApp1
{
    class Program
    {
        static int[] numList = new int[2018];
        private const int port = 2013;
        private const string server = "xxx.xxx.xxx.xxx";
        static TcpClient client = new TcpClient();
 
        static void Main(string[] args)
        {
            
            client.Connect(server, port);
            request2();
 
            foreach (var item in numList)
            {
                File.AppendAllText("FileONE.txt", item.ToString());
            }
 
                // Закрываем потоки
 
            client.Close();
                
           
            Console.WriteLine("Запрос завершен...");
            Console.ReadKey();
        }
        public async static void request2()
        {
            for (int i = 1; i <= 2018; i+=5)
            {
                await Task.Run(() =>
                {
                    //sending a string
                    NetworkStream streamSend = client.GetStream();
                    StreamWriter writer = new StreamWriter(streamSend);
                    writer.WriteLine(i.ToString() + "\n");
                    writer.Flush();
 
                    //getting a string
                    NetworkStream stream = client.GetStream();
                    StreamReader reader = new StreamReader(stream);
                    string message = reader.ReadLine();
 
                    //filtering out
                    string regex = message;
                    string pattern = @"\d+";
                    Regex rg = new Regex(pattern);
                    MatchCollection match = rg.Matches(regex);
 
                    int result = Convert.ToInt32(match[0].Value);
                    Console.WriteLine(result);
 
                    numList[i] = result;
               });
               
            }
        }
 
        }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.09.2021, 22:23
Ответы с готовыми решениями:

Многопоточный пост запрос
Делаю многопоточные Пост запросы на страничку используя для синхронизации lock. Проблема в том если использовать много потоков то многие...

При каких сценариях можно увидеть различия в следующих реализациях сервера: однопоточный, многопоточный
Доброго времени суток! Подскажите, пожалуйста, при каких сценариях можно увидеть различия в следующих реализациях сервера: однопоточный,...

Не отправляется запрос с сервера
Проект имеет API на сервере api.domain.info и сам клиент на domain.info. Клиент написан на Angular 5. Суть вопроса: при запуске приложения...

21
5 / 5 / 4
Регистрация: 30.06.2012
Сообщений: 427
03.10.2021, 14:20  [ТС]
Студворк — интернет-сервис помощи студентам
ipsorokin, воткнул:
C#
1
2
3
4
sw.WriteLine(message);
            sw.Flush();
            await Task.Delay(15000);
            var strR = sr.ReadLine();
Это помогает избавиться от пустых строк в начале, но это не решает обрезанные стринг. И так же приходят только числа по последнему i в цикле. Ладно, пока думаем.
0
5 / 5 / 4
Регистрация: 30.06.2012
Сообщений: 427
04.10.2021, 14:38  [ТС]
Ну что, обрезанные стринги решил. Теперь регуляркой просто ищу число, у которого по бокам есть какие-либо небуквенные символы, типа точек, пробелов, табов. И если несоответствие шаблону, то просим число еще раз. Осталась единственная проблема - скорость работы. Я получил все числа безошибочно, но это заняло почти три часа. Попробую как-то адаптировать способ ipsorokin, чтобы увеличить скорость получения ответов.

C#
1
2
3
4
5
6
 string pattern = @"\W(\d+)\W";
                    Regex rg = new Regex(pattern);
                    Match match = rg.Match(regex);
                    Console.WriteLine(message);
                    int result = Convert.ToInt32(match.Groups[1].Value);
                    Console.WriteLine("Number " + i + ": " + result);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.10.2021, 14:38

POST запрос на Api сервера
Привет. Хочу реализовать на пайтоне отправку запроса на апи сервера. Какой модуль нужен для реализации? Запрос состоит из адреса апи...

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

Отправить запрос с сервера клиенту
Здравствуйте. У меня возникла проблема. Нужно отправить запрос с сервера/сайта в программу и использовать материал, переданный с...

Ответ сервера на запрос микроконтроллера.
Всем пр! Сделал девайсину, которая отправляет запрос на вебсервер и должна получить ответ. В принципе всё работает, запрос уходит,...

Ответ сервера UDP на запрос
Добрый день. Перешел с Python на C#, решаю задачу поиска и подключения устройств Arduino (в роли сервера) по протоколу UDP к клиенту...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru