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

Асинхронный или синхронный клиент TCP в приведенных примерах

05.10.2012, 00:27. Показов 6213. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста это код синхронного или асинхронного клиента и сервера

Клиент:
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
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
 
namespace ClientCSharp
{
    class TCP_Client
    {
        static void Main(string[] args)
        {
            try
            {
                Int32 port = 12345;//порт сервера
                string message = "CALC * 12 6\n";//строка, которую пошлем серверу
                TcpClient client = new TcpClient("localhost", port);
 
                //преобразуем строчку в массив байт
                Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
 
                // вводим поток stream для чтения и записи через установленное соединение                
                NetworkStream stream = client.GetStream();
 
                // посылаем сообщение серверу 
                stream.Write(data, 0, data.Length);
 
                Console.WriteLine("Sent: {0}", message);//печатаем то, что отправили
 
                // буффер для приема сообщений
                data = new Byte[1000];
 
                // строка для приема сообщений сервера
                String responseData;
 
                // получаем сообщение от сервера
                Int32 bytes = stream.Read(data, 0, data.Length);
                responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
                //печатаем то, что получили
                Console.WriteLine("Received: {0}", responseData);
 
                // закрываем соединение
                stream.Close();
                client.Close();
            }
            catch (ArgumentNullException expt)
            {
                Console.WriteLine("ArgumentNullException: {0}", expt);
            }
            catch (SocketException expt)
            {
                Console.WriteLine("SocketException: {0}", expt);
            }
 
            Console.WriteLine("\n Press Enter to continue...");
            Console.Read();
        }
    }
}
Сервер:
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
64
65
66
67
68
69
70
71
72
73
74
75
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
 
class TCP_Server
{
    public static void Main()
    {
        TcpListener server = null;
        try
        {
            Int32 port = 12345; //порт сервера
            IPAddress localAddr = IPAddress.Parse("127.0.0.1");//ip-адрес сервера (интерфейс)
 
            //TcpListener - класс TCP-сервера из .Net Framework Class Library
            server = new TcpListener(localAddr, port);
 
            // начинаем ожидание подсоединений клиентов на интерфейсе localAddr и порту port
            server.Start();
 
            // буффер для приема сообщений и соответствующая ему строка для вывода на экран
            Byte[] bytes = new Byte[1000];
            String data;
 
            //ответ клиенту
            String answer_message;
 
            //цикл обработки подсоединений клиентов
            while (true)
            {
                Console.Write("Waiting for a connection... ");
                // Ждем соединения клиента
                TcpClient client = server.AcceptTcpClient();
                //Ура! Кто-то подсоединился!
                Console.WriteLine("Connected!");
                // вводим поток stream для чтения и записи через установленное соединение
                NetworkStream stream = client.GetStream();
                int i = stream.Read(bytes, 0, bytes.Length);
                if (i > 0)
                {
                    // преобразуем принятые данные в строку ASCII string.
                    data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                    //печатаем то, что получили
                    Console.WriteLine("Received: {0}", data);
                    //анализируем запрос клиента и вычисляем результат
                    int res = 72;
                    answer_message = "OK " + res.ToString() + (char)13 + (char)10;
                    //печатаем то, что будем отправлять
                    Console.WriteLine("Sent: {0}", answer_message);
                    //преобразуем строчку-ответ сервера в массив байт
                    byte[] msg = System.Text.Encoding.ASCII.GetBytes(answer_message);
                    // отправляем ответ
                    stream.Write(msg, 0, msg.Length);
                }
 
                // закрываем соединение
                client.Close();
            }
        }
        catch (SocketException expt)
        {
            Console.WriteLine("SocketException: {0}", expt);
        }
        finally
        {
            // Stop listening for new clients.
            server.Stop();
        }
 
        Console.WriteLine("\nHit enter to continue...");
        Console.Read();
    }
}
Взято от сюда Сетевое программирование
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.10.2012, 00:27
Ответы с готовыми решениями:

Асинхронный TCP сервер-клиент: не выходит считать поток
Ситуация у меня следующая: пишу приложение клиент-сервер, ну, в одном приложении и клиент и сервер, но работает либо-либо, просто для...

Как превратить синхронный запрос, в асинхронный?
Всем добра. Есть скрипт, который нажимает на сайте кнопочки. Кнопочек довольно много. Какую нажимать решает алгоритм, на сервере. Скрипт...

TCP-сервер и TCP-клиент. Клиент не находит файл.
Всем привет! Решил изучать передачу данных по сети и начал с освоения примера, приведённого в книге "Visual C# 2008. Базовый курс...

8
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
05.10.2012, 00:29
Оба синхронные.
0
 Аватар для _Loader_
6 / 6 / 1
Регистрация: 18.04.2012
Сообщений: 92
05.10.2012, 00:35  [ТС]
А можно ли переделать в асинхронный и сложно ли это будет?
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
05.10.2012, 00:54
если ты задаешь такие вопросы считай что это невероятно сложно и вообще переделать нельзя
0
 Аватар для _Loader_
6 / 6 / 1
Регистрация: 18.04.2012
Сообщений: 92
05.10.2012, 01:04  [ТС]
m0nax, не жалуете новичков
0
1 / 1 / 0
Регистрация: 29.10.2013
Сообщений: 6
05.11.2013, 22:26
Асинхронный сервер, выполняется в отдельном потоке, тоже самое можно сделать с клиентом.

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading; // Потоки
 
class TCP_Server
{
    public void TpcServer() // Функция сервера
    {
      TcpListener server = null;
        try
        {
            Int32 port = 12345; //порт сервера
            IPAddress localAddr = IPAddress.Parse("127.0.0.1");//ip-адрес сервера (интерфейс)
 
            //TcpListener - класс TCP-сервера из .Net Framework Class Library
            server = new TcpListener(localAddr, port);
 
            // начинаем ожидание подсоединений клиентов на интерфейсе localAddr и порту port
            server.Start();
 
            // буффер для приема сообщений и соответствующая ему строка для вывода на экран
            Byte[] bytes = new Byte[1000];
            String data;
 
            //ответ клиенту
            String answer_message;
 
            //цикл обработки подсоединений клиентов
            while (true)
            {
                Console.Write("Waiting for a connection... ");
                // Ждем соединения клиента
                TcpClient client = server.AcceptTcpClient();
                //Ура! Кто-то подсоединился!
                Console.WriteLine("Connected!");
                // вводим поток stream для чтения и записи через установленное соединение
                NetworkStream stream = client.GetStream();
                int i = stream.Read(bytes, 0, bytes.Length);
                if (i > 0)
                {
                    // преобразуем принятые данные в строку ASCII string.
                    data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                    //печатаем то, что получили
                    Console.WriteLine("Received: {0}", data);
                    //анализируем запрос клиента и вычисляем результат
                    int res = 72;
                    answer_message = "OK " + res.ToString() + (char)13 + (char)10;
                    //печатаем то, что будем отправлять
                    Console.WriteLine("Sent: {0}", answer_message);
                    //преобразуем строчку-ответ сервера в массив байт
                    byte[] msg = System.Text.Encoding.ASCII.GetBytes(answer_message);
                    // отправляем ответ
                    stream.Write(msg, 0, msg.Length);
                }
 
                // закрываем соединение
                client.Close();
            }
        }
        catch (SocketException expt)
        {
            Console.WriteLine("SocketException: {0}", expt);
        }
        finally
        {
            // Stop listening for new clients.
            server.Stop();
        }
 
        Console.WriteLine("\nHit enter to continue...");
        Console.Read();
    
    }
    public static void Main()
    {
        Thread Server = new Thread(new ThreadStart(TpcServer));
        Server.Start(); // Вызываем поток
        /* Тут можно написать еще код*/
        
    }
}
1
 Аватар для Katya!
3 / 3 / 4
Регистрация: 27.12.2009
Сообщений: 103
09.09.2015, 15:09
Почему ошибка в строке Thread Server = new Thread(new ThreadStart(TpcServer)); ?

Добавлено через 51 минуту
Все понятно, нужно исправить на public static void TpcServer()
0
9 / 9 / 0
Регистрация: 26.01.2015
Сообщений: 94
09.09.2015, 21:01
Foru, У вас не ассинхронный, а многопоточный)
Ассинхронный это там где Stream.BeginRead, Stream.BeginWrite.
Могу ошибаться)
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
10.09.2015, 11:08
Цитата Сообщение от Licoze Посмотреть сообщение
Foru, У вас не ассинхронный, а многопоточный)
Ассинхронный это там где Stream.BeginRead, Stream.BeginWrite.
Могу ошибаться)
В целом - правильно. Точнее "синхронный сервер в другом/отдельном потоке".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.09.2015, 11:08
Помогаю со студенческими работами здесь

Верно ли утверждение: « действие оператора continue; в приведенных ниже примерах эквивалентно действию оператора goto next; ».
Помогите пожалуйста ответить на вопрос,если можно с примером;Верно ли утверждение: « действие оператора continue; в приведенных ниже...

Сцена зависает при запуске TCP-клиента, когда он подключен к TCP - серверу, при этом TCP-клиент полностью функционирует
Проблема описана в заголовке, и хотелось бы услышать ваше мнение, о том как можно решить проблему. Скрипт TCP-клиента на сцене: ...

Сервер не принимает сообщения TCP или клиент не отправляет
Столкнулся с такой проблемой что программа клиента принимает сообщения TCP и делает всё правильно. Или в программе сервера проблема или в...

Создание клиент сервера (TCP): не поступило отклика или компьютер отверг подключение
делаю так (сервер ) : Dim tcpListener As New TcpListener(Me._Port) tcpListener.Start() LOG("Ожидание...

Синхронный клиент-сервер, зависают окна
Написал на синхронный клиент-сервер, но при прослушивании порта сервер сразу же зависает, подскажите в чем косяк??? Клиент namespace...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru