Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 03.12.2019
Сообщений: 6

TCP сервер

06.09.2020, 17:20. Показов 527. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте читающие я высрал попробовал написать TCP сервер, который бы получал числа, считал те, которые кратны 3 и возвращал обратно клиенту их кол-во. НО большая проблема в том, что никто в интернетах в примере не делает что-то сложнее отправления строки и, соответственно, у меня накопились вопросы, которые я не могу нагуглить(или не знаю, как такое найти). Когда я запускаю сервер и клиента, сервер после первого отправленного числа ругается, что число, которое он пытается сконвертировать слишком большое. Я начал гуглить, и у меня начала закрадываться мысль, что надо для каждого числа создавать соединение, но это же так не должно по идее работать.... В общем я тут написал много и не по делу, но главный вопрос: как правильно нужно устанавилвать соединение, чтобы передать эти числа? Может вообще их надо как-то массивом отправлять?.. Код прикрепляю, наверное в нем я очень сильно нагадил, за это извиняюсь. Скорее всего я написал конкретный бред, тогда можно просто порекоммендовать может книгу, с которой я бы разобрался.

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
static void Main(string[] args) // это клиент
        {
            TcpClient client = new TcpClient();
            client.Connect(IPAddress.Parse("127.0.0.1"), 322);
 
            NetworkStream CommunicationStream = client.GetStream();
            Random rand = new Random();
            int number = rand.Next(10000);
 
            Console.WriteLine("Серверу будет отправлено {0} чисел", number);
            try
            { 
                for (int i = 0; i < number; i++)
                {
                    byte[] numberByte = Encoding.UTF8.GetBytes(rand.Next().ToString());
                    CommunicationStream.Write(numberByte, 0, numberByte.Length);
                }
            }
            catch(SocketException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            StringBuilder resultString = new StringBuilder();
            byte[] buffer = new byte[512];
 
            while(CommunicationStream.DataAvailable)
            {
                int bytes = CommunicationStream.Read(buffer, 0, buffer.Length);
                resultString.Append(Encoding.UTF8.GetString(buffer, 0, bytes));
            }
 
            Console.WriteLine("Кол-во чисел, кратное 3:", Convert.ToInt32(resultString));
 
            CommunicationStream.Close();
            client.Close();
        }
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
static void Main(string[] args)/// это сервер
        {
            int counter = 0;
            
            TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 322);
            
            server.Start();
            Console.WriteLine("Сервер запущен, ожидание подключения");
            TcpClient client = server.AcceptTcpClient();
            Console.WriteLine("Пользователь подключен");
            NetworkStream ComminucatinStream = client.GetStream();
 
            byte[] buffer = new byte[512];
            Console.WriteLine("Принятые числа:");
            do
            {
                int bytes = ComminucatinStream.Read(buffer, 0, buffer.Length);
                int number = Convert.ToInt32(Encoding.UTF8.GetString(buffer, 0, bytes));// тут и ругается
                Console.WriteLine(number);
                if (number % 3 == 0) counter++;
            } while (client.Connected);
            Console.WriteLine("Кол-во кратных чисел: {0}", counter);
 
            ComminucatinStream.Close();
            client.Close();
            server.Stop();
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.09.2020, 17:20
Ответы с готовыми решениями:

TCP сервер
данные между сервером и клиентом передаются байтиками byte msg = Encoding.UTF8.GetBytes(Console.ReadLine()); //Конвертируем ...

Сервер на сокетах TCP
Здравствуйте.Пробую по примеру сделать простенький чат на TCP. В клиенте отсылаю сообщения, но до сервера доходит только первое. В чем...

TCP сервер обработчик запросов
Прошу помощи. Задача такая ... Есть сеть из 10 компов. Один сервер. На сервере программа принимает по TCP сообщения от клиентов и в...

4
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
06.09.2020, 20:30
к
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
            using (TcpClient client = new TcpClient())
            {
                client.Connect(IPAddress.Parse("127.0.0.1"), 322);
 
                using (NetworkStream CommunicationStream = client.GetStream())
                using (BinaryWriter writer = new BinaryWriter(CommunicationStream))
                using (BinaryReader reader = new BinaryReader(CommunicationStream))
                {
                    Random rand = new Random();
                    int number = rand.Next(10000);
 
                    Console.WriteLine("Серверу будет отправлено {0} чисел", number);
                    try
                    {
                        writer.Write(number); // кол-во
 
                        for (int i = 0; i < number; i++)
                        {
                            writer.Write(rand.Next()); // числа
                        }
                    }
                    catch (SocketException ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
 
                    int result = reader.ReadInt32();
                    Console.WriteLine("Кол-во чисел, кратное 3:", result);
                }
            }
с
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
            TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 322);
            server.Start();
            Console.WriteLine("Сервер запущен, ожидание подключения");
            using (TcpClient client = server.AcceptTcpClient())
            {
                Console.WriteLine("Пользователь подключен");
                using (NetworkStream CommunicationStream = client.GetStream())
                using (BinaryReader reader = new BinaryReader(CommunicationStream))
                using (BinaryWriter writer = new BinaryWriter(CommunicationStream))
                {
                    Console.WriteLine("Принятые числа:");
                    int numCount = reader.ReadInt32();
                    int counter = 0;
 
                    for (int i = 0; i < numCount; i++)
                    {
                        int num = reader.ReadInt32();
                        Console.WriteLine(num);
                        if (num % 3 == 0)
                            counter++;
                    }
                    writer.Write(counter);
                    Console.WriteLine("Кол-во кратных чисел: {0}", counter);
                }
            }
            server.Stop();
1
0 / 0 / 0
Регистрация: 03.12.2019
Сообщений: 6
06.09.2020, 21:40  [ТС]
Тут есть проблема: как только клиент перестает отправлять серверу числа и ждет число обратно, сервер моментально перестает выводить числа и просто стоит.

Добавлено через 4 минуты
Тут есть проблема: как только клиент перестает отправлять серверу числа и ждет число обратно, сервер моментально перестает выводить числа и просто стоит.(я на всякий случай продублировал, потому что я и не умею правильно пользоваться сайтом)
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
06.09.2020, 21:56
Цитата Сообщение от Heh_ Посмотреть сообщение
сервер моментально перестает выводить числа и просто стоит
А что он должен делать? Цикл заканчивается и всё...
0
0 / 0 / 0
Регистрация: 03.12.2019
Сообщений: 6
06.09.2020, 22:20  [ТС]
да, все хорошо, это уже я напортачил, спасибо большое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.09.2020, 22:20
Помогаю со студенческими работами здесь

TCP сервер запустить и остановить
Здравствуйте. Скажите пожалуйста: как сделать так: чтобы на одну кнопку на форме запустить TCP сервер: а на другую остановить его? ...

Поиск по маске на клиент сервер tcp
Я знаю что в обычном случае можно сделать поиск через void GetFiles() { //список файлов с расширением txt диска C: ...

Как сделать простой TCP сервер?
Нужен простой TCP сервер чтобы он соединялся с Access'ом и обрабатывал команды или хотя бы просто соединялся с ней. Вот моя СУБД

Tcp Сервер - Клиент обмен данными
Ситуация такая: есть Tcp клиент и сервер для xna игры. Реализован обмен объектами, которые содержатся в единой библиотеке. Объекты...

Книги о программировании TCP/IP (Клиент-сервер)
Всем привет! Посоветуйте книги (На Русском языке) о программировании TCP/IP на С# Желательно Начальный и средний уровни. Хотя не откажусь...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru