Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C# Аналог Allsubmitter, если в базе с каталогами буду держать POST запросы к ним, выйдет ли толк https://www.cyberforum.ru/ csharp-net/ thread579020.html
Доброго времени суток! Задумал я создать клон пресловутого AllSubmitter. Конечно, это отличная программа и кто-то может сказать, зачем это все нужно, но тем не менее, своя будет тешить самолюбие....
C# Работа с ini файлом: как получить все секции
Проблема в следующем: Нашел api для работы с ini, нашел нужные мне функции: GetPrivateProfileSectionNames - получить имена всех секций в файле GetPrivateProfileString - получить ключ...
Приложение неожиданно завершается (многопоточный сервер) C#
Суть проблемы в том, что я использую COM-интерфейсы (OPC сервер), клиент передает класс, поддерживающий определенный интерфейс серверу, сервер запоминает ссылку и в определенный момент вызывает...
C# Анализ пикселей изображения Пытаюсь создать карту высот, но не простую. При конечной обработки (именно построении ландшафта) высота будет браться из файла, а не из картинки. Т.е будет файл, в котором будет записана высота... https://www.cyberforum.ru/ csharp-net/ thread578769.html
C# Программа для скачивания файлов с обменника https://www.cyberforum.ru/ csharp-net/ thread578607.html
Здравствуйте! Передомной стоит задача: написать программу типа JDownloader. Тоесть, программе дается ссылка на файл с файлообменника (например депозитовского...
C# Получить свой внутренний IP4 адрес
подобных тем нашел много на форму и не только, но не один из них не подходит: // Получение имени компьютера. String host = System.Net.Dns.GetHostName(); // Получение ip-адреса....
C# Отправка почты: нужны примеры реализации, желательно с комментариями
перерыл весь форум нет нормального рабочего кода для отправки почты из созданной программы может кто-нибудь показать нормальный код с комментариями плиз и желательно под VS2008
C# Обфускация C# - приложения Здравия всем зашедшим! Задумал обфусцировать свою программу, но пройтись одним обфускатором - глупая затея, так как расшифровывает всё даже школьник. Советовали .Ner Reactor, но его дешифровали... https://www.cyberforum.ru/ csharp-net/ thread577678.html
C# Запись в массивы из XML https://www.cyberforum.ru/ csharp-net/ thread577672.html
Имеется XML <?xml version="1.0" encoding="utf-8"?> <root> <CL name_group="group1"> <CL name = "1" sdf="123"/> <CL name = "2" sdf="456"/> </CL> <CL name_group="group2"> <CL name = "3"...
C# Как разбить файл XML на 2 или несколько Помогите, пожалуйста разбить 1 фаил XML на несколько таким образом, чтобы 1 столбец был обшим!Т.е. как бы 1 длинную таблицу разбить на 2 маленькие.Спасибо! https://www.cyberforum.ru/ csharp-net/ thread577661.html
17 / 17 / 1
Регистрация: 16.09.2010
Сообщений: 100
19.05.2012, 22:43 0

Одновременное подключение несколько клиентов к одному серверу

19.05.2012, 22:43. Показов 8993. Ответов 3
Метки (Все метки)

Ответ

частично приведу пример как сделал это в WinForm.

класс MyServer:
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
85
86
87
88
89
90
91
92
93
94
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
 
namespace ServerInput
{
    public class MyServer
    {
        private TcpListener listener;
        private Thread startListen;
        //лист с подключенными клиентами
        public List<ClientConnection> listClients = new List<ClientConnection>();
 
        int port;
 
        public MyServer(int _port)
        {
            port = _port;
        }
 
        public void SendToAll(string str)
        {
            foreach (ClientConnection c in listClients)
                c.Send(str);
        }
 
        public void Start()
        {
            startListen = new Thread(new ThreadStart(Listen));
            startListen.Start();
        }
 
        public void Stop()
        {
            try
            {
                listener.Stop();
                foreach (ClientConnection c in listClients)
                {
                    c.Stop();
                }
                listClients.Clear();
            }
            catch
            {
            }
        }
 
        //удаляем клиента из листа клиентов
        public void RemoveClient(Socket sock)
        {
            ClientConnection buf = null;
            foreach (ClientConnection c in listClients)
            {
                if (c.connection == sock)
                    buf = c;
            }
            listClients.Remove(buf);
        }
 
        //сервер начинает слушать и подключать клиентов
        public void Listen()
        {
            try
            {
                try
                {
                    listener = new TcpListener(port);
                    listener.Start(10);
                }
                catch (Exception e)
                {
                    //не удалось включить сервер
                    return;
                }
                while (true)
                {
                    Socket connection = listener.AcceptSocket();
                    //добавляем клиента
                    ClientConnection Client = new ClientConnection(connection);
                    listClients.Add(Client);
                }
            }
            catch { }
        }
    }
}
Класс ClientConnection:
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
85
86
87
88
89
90
91
92
93
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Windows.Forms;
using System.Threading;
using System.IO;
 
namespace ServerInput
{
    public class ClientConnection
    {
        public Socket connection;
        private NetworkStream socketStream;
        private BinaryReader reader;
        private BinaryWriter writer;
 
        public string ip_server;
 
        public ClientConnection(Socket _connection)
        {
            connection = _connection;
            socketStream = new NetworkStream(connection);
            reader = new BinaryReader(socketStream);
            writer = new BinaryWriter(socketStream);
            ip_server = ((IPEndPoint)connection.LocalEndPoint).Address.ToString();
            Send("Server (" + ip_server + "): успешное подключение \n"); //отправляем клиенту сообщение об подключении
            Thread startListen = new Thread(new ThreadStart(Receive));
            startListen.Start();
        }
 
 
        public void Stop()
        {
            writer.Close();
            reader.Close();
            socketStream.Close();
            connection.Close();
        }
 
        //отправляем данные на клиент
        public void Send(string str)
        {
            try
            {
                writer.Write(str);
            }
            catch (SocketException e)
            {
                MessageBox.Show(e.ToString());
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }
 
        //получаем данные на сервер (постоянно)
        public void Receive()
        {
            try
            {
                string theReply = "";
                do
                {
                    try
                    {
                        theReply = reader.ReadString();
                        //здесь обрабатываем полученное сообщение
                    }
                    catch (IOException e)
                    {
                        SocketException ee = (SocketException)e.InnerException;
                        if (ee.ErrorCode == 10053) //обрабатываем исключение при выключении сервера
                        {
                            return;
                        }
                    }
                    catch (Exception e)
                    {
                    }
                }
                while (connection.Connected);
                Stop();
            }
            catch
            {
            }
        }
    }
}


Вернуться к обсуждению:
Одновременное подключение несколько клиентов к одному серверу
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2012, 22:43

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Возможно ли одновременное обращение из разных потоков к одному, уже созданному обьекту X?
Здравствуйте! Я создаю экземпляр обьекта X, обьект X будет загружать данные из файла в себя(тоесть...

Невозможность подключения клиентов к серверу
Здравствуйте. Проблема заключается в следующем: клиенты не могут подключится к моему серверу (во...

Плучить список подключившихся клиентов к серверу
Всем доброго времени суток! Возникла следующая задача: У меня есть сервер, к которому подключается...

ServerSocket передача файлов от клиентов серверу
Нужна помощь! Есть приложение для win. Сервер - клиент для передачи файлов. Работает это все дело...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.