]]>
]]>
IT Coders
Логин:
Пароль:
  ]]>Войти]]> ]]>Регистрация]]> ]]>Забыли?
 
 
СКОРОСТЬ ->
 
КАЧЕСТВО ->
 
УСПЕХ...
Интернет-магазин InFabrica - техника для Вас Персональный web-сайт Королёвой Надежды Михайловны Кинохабар - Интернет-гипермаркет фигурок персонажей из фильмов, кино сувениров и прочего околокиношного хабара Официальный сайт Льва Лещенко Официальный сайт компании "Белсис" Radhika - интернет-магазин специй, вегетарианских и диетических продуктов Портал школы "Золотое Сечение" Персональный web-сайт Богословской Оксаны СДЕЛАНО БОГОМ - Интернет-журнал Акксессуары для iPhone, iPad, iPod touch и Samsung Galaxy :: iHave Техно Офис - Компьютерный интернет-магазин Свадебный журнал WedInMoscow
 

Альтернативное содержимое

Закажите сайт у компании IT Coders
]]> ]]>
 
ВКонтакт Facebook Одноклассники Twitter Яндекс Livejournal Liveinternet Mail.Ru
Страницы: 1
нужна помощь по сокетам Архив со старого форума компании IT Coders
Здравствуйте, я впервые пишу клиент-серверное приложение. Хочу написать сервер к которому могут быть одновременно подключенны несколько клиентов, сервер рассылает всем клиентам одно и тоже сообщение. Покурил msdn и удалось только написать приложение соединяющие сервер только с одним клиентом.
Логика Сервера:
Код
public class ServerManager
    {
       
        private Socket Server; // создаём сокет для сервера
        private IPHostEntry HostEntry; // информация о хосте
        private IPAddress Address; // предосталяет коллекцию ip-адресов сервера 
        private IPEndPoint EndPoint; // точка подключения

        public ServerManager()
        {
            CreateConnectPoint();
            CreateSocket();
        }
        /// <summary>
        /// Создание точки подключения
        /// </summary>
        public void CreateConnectPoint()
        {
            // получаем имя компьютера и выводим его
            string hostName = Dns.GetHostName();
            Console.WriteLine("Computer name: " + hostName);

            // узнаём имя хоста и выводим его
            HostEntry = Dns.GetHostEntry(hostName);
            Console.WriteLine("Host name: " + HostEntry.HostName);

            // выбираем ip-адрес для создания сервера
            int serverPort;
            if (HostEntry.AddressList.Length == 1)
            {
                Console.WriteLine("Creating server on: " + HostEntry.AddressList[0]);

                Address = HostEntry.AddressList[0];

                Console.Write("Enter the server port: ");
                serverPort = int.Parse(System.Console.ReadLine());
            }
            else
            {
                Console.WriteLine("---- ---- ---- ----");
                Console.WriteLine("IP address list: ");

                // выводим список всех ip-адресов
                int addressIndex = 0;
                foreach (IPAddress tmpAdress in HostEntry.AddressList)
                {
                    Console.WriteLine(addressIndex + ": " + tmpAdress);
                    addressIndex++;
                }

                // спрашиваем пользователя
                Console.WriteLine("---- ---- ---- ----");
                Console.Write("Enter index of adress for creating a server: ");
                addressIndex = int.Parse(System.Console.ReadLine());

                // говорим, где будем создавать сервер
                Console.WriteLine("Creating server on: " + HostEntry.AddressList[addressIndex]);

                // получаем адрес, необходимый пользователю
                Address = HostEntry.AddressList[addressIndex];

                Console.Write("Enter the server port: ");
                serverPort = int.Parse(System.Console.ReadLine());
            }

            // создаем конечную точку подключения 
            EndPoint = new IPEndPoint(Address, serverPort);
        }

        /// <summary>
        /// Создание Сокета Сервера
        /// </summary>
        public void CreateSocket()
        {
                try
                {

                    // создаем сокет сервера на текущей машине
                    Server = new Socket(AddressFamily.InterNetwork,
                            SocketType.Stream, ProtocolType.Tcp);
                    
                    

                    Console.WriteLine("Server socket created.");
                }
                catch (SocketException error)
                {
                    // 10061 - порт подключения занят/закрыт
                    if (error.ErrorCode == 10061)
                    {
                        Console.WriteLine("Connection port is closed or busy.");
                        Console.WriteLine("Press any key to exit...");
                        Console.ReadKey();
                    }
                }

                // прослушивание
                try
                {
                    // cвязываем удаленную точку с сокетом
                    Server.Bind(EndPoint);
                    // устанавливаем лимит подключений
                    Server.Listen(10);
                    

                    // ждем подключение клиента
                    while (true)
                    {
                        Console.WriteLine("Waiting connection...");
                        
                        Server = Server.Accept();                                              

                        if (Server.Connected)
                        {
                            Console.WriteLine("Connection established.");
                            Console.ReadKey();
                            break;                            
                        }
                        
                        
                    }

                   
                }
                catch
                {
                    throw new Exception("Connection problem.");
                }
                
                
            
            
        }

        

        // отправка сообщения клиенту
        public void SendMessage()
        {
            string Message;

            Console.WriteLine("Enter your message:");
            Message = Console.ReadLine();

            byte[] ByteMsg = Encoding.Unicode.GetBytes(Message);
            
              
            Server.Send(ByteMsg);

            Console.WriteLine("Message sended.");            

        }


    }
Код
public static class SomeServer
    {
        public static int port=13000;

        public static void Start()
        {            
            Thread th = new Thread(AcceptThread);
            th.IsBackground = true;
            th.Start();
        }

        static void AcceptThread()
        {                   
            
//создаём и запускаем TcpListener 
                IPAddress localAddr = IPAddress.Parse("127.0.0.1");
                TcpListener server = new TcpListener(localAddr, port);
                server.Start();              
                
//принимаем клиентов
                while (true)
                {
                    //приняли клиента                
                    TcpClient client = server.AcceptTcpClient();      
                    //запустили поток, работающий с этим клиентом
                    Thread th = new Thread(new ParameterizedThreadStart(ClientThread));
                    th.IsBackground = true;
                    th.Start(client as object);                     
                    
                    //пошли принимать клиентов дальше
                }                
        }
 
        static void ClientThread(object o)
        {
            //клиент, с которым работает этот поток
            TcpClient client = o as TcpClient;
            //создаём поток обмена данными с клиентом
            NetworkStream stream = client.GetStream();
            StreamReader reader = new StreamReader(stream, Encoding.BigEndianUnicode);
            StreamWriter writer = new StreamWriter(stream, Encoding.BigEndianUnicode);
            writer.AutoFlush = true;

            //читаем строки из потока, т.е. от клиента, и выводми
            while (true)
            {
                 string str = reader.ReadLine();
                 MessageBox.Show(str);
            }
 

        }
    }

вот для примера
Страницы: 1
01.12.2021    ]]>Новогодние скидки на «1С-Битрикс: Управление сайтом» и «Битрикс24» ]]>
Встречайте: новогодние скидки до 35% на «1С-Битрикс: Управление сайтом» и «Битрикс24»! С 1 по 31 декабря...
23.11.2021    ]]>Новый Битрикс24.Сиэтл. Попробуйте прямо сейчас!]]>
Бесплатный складской учет внутри CRM, скрам для системной работы над задачами, виртуальный WhatsApp для продаж в мессенджере и многое другое...
22.10.2021    ]]>Время:Битрикс24. Регистрируйтесь на презентацию обновлений!]]>
Присоединяйтесь к нам 23 ноября в 11.00 МСК и смотрите презентацию обновлений Битрикс24. Онлайн....
18.05.2021    ]]>Новый Битрикс24 изменил сценарии продаж и совместной работы]]>
18 мая мы представили Новый Битрикс24 – набор инструментов, которые помогают бизнесу адаптироваться к любым условиям и продолжать расти...
19.04.2021    ]]>Новый Битрикс24. Регистрируйтесь, чтобы увидеть и попробовать первыми!]]>
18 мая мы выпустим большое обновление Битрикс24. Это будет совершенно новый формат релиза. Все, что мы покажем на презентации, будет сразу...
Ваша корзина пуста
]]> Расчитайте стоимость услуг ]]>
Ваша корзина пуста
]]> ]]>
]]> Вакансии компании IT Coders ]]>
]]>
 

]]>
© IT Coders, 2008 - 2022
Под управлением CMS 1c-bitrix