215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
1

Клиент - сервер. Где использовать Using для TcpClient?

29.05.2017, 22:04. Показов 1068. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот мы запускаем Server
C#
1
new Server(80);
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
internal class Server
    {
        private readonly TcpListener Listener;
 
        public Server(int Port)
        {
            Listener = new TcpListener(IPAddress.Any, Port);
            Listener.Start();
            while (true)
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback(ClientThread), Listener.AcceptTcpClient());
                int workerThreads = Environment.ProcessorCount * 8;
                ThreadPool.SetMaxThreads(workerThreads, workerThreads);
                ThreadPool.SetMinThreads(2, 2);
            }
        }
 
        public void ClientThread(object StateInfo)
        {
            try
            {
                new Client((TcpClient)StateInfo);
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        ~Server()
        {
            Listener?.Stop();
        }
    }
// Тут использовать using?
C#
1
2
3
4
5
6
7
8
9
10
  class Client
        {
            public Client(TcpClient client)
            {
                using (client)
                {
                    // код
                }
            }
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2017, 22:04
Ответы с готовыми решениями:

Написать клиент-серверное приложение, где клиент должен отсылать запрос на сервер, а тот должен опрашивать БД
Здравствуйте, имею задачу, но не знаю как реализовать. Задача состоит в том чтобы написать клиент...

Возможно ли при VDI использовать сервер - Linux, а клиент - Windows?
Не знаю правильно ли выбрал топик, если нет пусть модэрмтор перенисьот. Интерисует следуещие: можно...

Клиент-сервер: Где лучше хранить результаты вычислений?
Есть программа-сервер и программа-клиент. Программа-сервер - консольное приложение, принимающее от...

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

1
Эксперт .NET
12090 / 8369 / 1280
Регистрация: 21.01.2016
Сообщений: 31,548
30.05.2017, 06:01 2
Defences, класс Client не имеет права закрывать\диспозить объект TcpClient так как он получает его извне, а значит кто-то другой ответственен за управление жизнью данного объекта:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        public void ClientThread(object StateInfo)
        {
            try
            {
                using(var tcpClient = StateInfo as TcpClient) {
                   new Client(tcpClient);
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Замечу, что конструктор класса должен выполнять только инициализацию объекта, но уж ни как не являться полноценным методом с какой-то логикой. Вся логика в классе должна вызываться явно:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        public void ClientThread(object StateInfo)
        {
            try
            {
                using(var tcpClient = StateInfo as TcpClient) {
                   var client = new Client(tcpClient); // только инициализируется, но ничего не делает
                   client.ProcessRequest();
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Применять финализатор (~Server()) нужно только в купе с реализацией интерфейса IDisposable. Это ни разу не тот же деструктор, что и в С++!
0
30.05.2017, 06:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2017, 06:01
Помогаю со студенческими работами здесь

Смена настройки параметра сети (использовать или не использовать прокси-сервер для локальных подключений)
Всем доброго дня! Опишу сложившуюся ситуацию: На работу постоянно хожу с домашним ноутом. У нас в...

Клиент-сервер в один клик!(элемет сервер, клиент)
Вот решил поделиться с вами своей идеей и её реализацией. Всегда написание Сервера и Клиента к...

Для чего и где и удобнее использовать структуры, а где классы?
Для чего и где и удобнее использовать структуры, а где классы?

This. Для чего он? И где лучше использовать, а где не желательно
Дл я чего используют this? И где лучше использовать, а где не желательно?


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru