Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.96/47: Рейтинг темы: голосов - 47, средняя оценка - 4.96
6 / 6 / 2
Регистрация: 11.04.2011
Сообщений: 260
1

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

18.05.2012, 20:45. Просмотров 8912. Ответов 3
Метки нет (Все метки)


Столкнулся с задачей. Есть сервер, который отправляет xml сообщения на клиент. Нужно сделать чтобы могло подключиться несколько клиентов к моему серверу. Чтобы они все получали мои файлы.
Делал вот так:
C#
1
2
3
4
5
6
7
8
9
10
 // Создаем TCP сервер и слушаем запросы клиентов
            TcpListener server = new TcpListener(IPAddress.Any,11000);
            server.Start();
 
                        // Проверяем, есть ли клиенты
            while (true)
            {
                server.AcceptTcpClient();
                Console.WriteLine("...Подключен клиент...");
            }
отправляю вот так:

C#
1
2
3
byte[] xml = File.ReadAllBytes(string.Format(tb_xml_name.Text + "\\" + "F000{0}.xml", xml_filename));
                s.Send(xml);
                s.Close();
Отправка происходит после формирования xml файла.

Нужно каждый подключившийся клиент, при помощи массива записывать и при помощи массива каждому клиенту отправлять сообщение.
Помогите пожалуйста, как это реализовать в коде? Когда был один клиент, делал через сокет соединение. Заранее спасибо! )
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2012, 20:45
Ответы с готовыми решениями:

Несколько клиентов к одному серверу через Socket
У меня не получается подключить больше одного клиента к одному серверу. Для тестирования использую...

Как сделать так, чтобы несколько клиентов подключались к одному серверу?
Приветствую!У меня есть 2 кода для клиента и сервера,осуществлённые через сокеты: Клиент...

Как серверу выборочно посылать сообщения одному из клиентов?
сервер // Get port from player // scanf("%5d", &port); // Create a new socket to listen...

Подключение к одному серверу по разным адресам
Здравствуйте, уважаемые!!! :lool: Замучался с настройками подключений к серверу. Сервер имеется...

3
0 / 0 / 0
Регистрация: 19.05.2012
Сообщений: 18
19.05.2012, 20:40 2
Хм... Как-то делал такое, только через VB. И делал кстати через сокеты.
Почитай вот это:
http://habrahabr.ru/post/120157/
0
17 / 17 / 1
Регистрация: 16.09.2010
Сообщений: 100
19.05.2012, 22:43 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
Футболист
526 / 428 / 142
Регистрация: 31.10.2011
Сообщений: 1,008
19.05.2012, 23:35 4
прийду домой скину проект сервера и клиента, посмотриш код

а лучше напиши в скайп, anton07notna
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2012, 23:35

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

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

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

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

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


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

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

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