Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Форум (UDP) 
:(
    Опции темы
Ronin08
Дата 16.4.2008, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 16.2.2008
Где: г.Москва

Репутация: нет
Всего: 1



Доброго времени суток!
имеется код "форума"
Код

namespace Forum_Console
{
    class Chat
    {
        private static IPAddress remoteIPAddress;
        private static int remotePort;
        private static int localPort;

        [STAThread]
        static void Main(string[] args)
        {
            try
            {
                //Получаем данные, необходимые для соединения
                Console.WriteLine("Enter Local Port");
                localPort = Convert.ToInt16(Console.ReadLine());

                Console.WriteLine("Enter Remote Port");
                remotePort = Convert.ToInt16(Console.ReadLine());

                Console.WriteLine("Enter Remote IP address");
                remoteIPAddress = IPAddress.Parse(Console.ReadLine());

                //Создаем слушающий поток
                Thread tRec = new Thread(new ThreadStart(Receiver));
                tRec.Start();

                while (true)
                {
                    Send(Console.ReadLine());
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
        private static void Send (string datagram)
        {
            //Создаем UdpClient
            UdpClient sender = new UdpClient();

            //Создаем IPEndPoint по информации об удаленном хосте
            IPEndPoint endPoint = new IPEndPoint(remoteIPAddress, remotePort);

            try
            {
                //Преобразуем данные в массив байтов
                byte[] bytes = Encoding.ASCII.GetBytes(datagram);

                //Отправляем данные
                sender.Send(bytes, bytes.Length, endPoint);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            finally
            {
                //Закрываем соединение
                sender.Close();
            }
        }

        public static void Receiver()
        {
            //Создаем UdpClient для чтения входящих данных
            UdpClient recevingUdpClient = new UdpClient(localPort);

            //IPEndPoint с информацией об удаленном хосте
            IPEndPoint RemoteIpEndPoint = null;

            try
            {
                Console.WriteLine("----***Ready for Chat!!!***----");
                while (true)
                {
                    //Ожидание дейтаграммы
                    byte[] reciveBytes = recevingUdpClient.Receive(ref RemoteIpEndPoint);
                    //Преодразуем и отображаем данные
                    string returndata = Encoding.ASCII.GetString(reciveBytes);
                    Console.WriteLine("-" + returndata.ToString());
                }
            }
            catch (Exception e )
            {
                Console.WriteLine(e.ToString ());
            }
        }
    }
}

Когда 2 участника , то все ок, 
но когда я хочу сделать что-то типа сервер и 2 клиетна (т.е. сервер видет сообщения от всех клиентов и свои сообщения, а клиент тока сообщения свои и сервера"), то возникают проблемы, т.к. у каждого участника есть Приемный порт и Отправляющий порт("Форум" должен работать на одной машине).
Заметьте, что "форум" в кавычках, т.к. это форумом нельзя назвать smile 
Так вот как сделать, чтобы сообщение от сервера видел не 1 клиент, а все.
надо как-то разобраться с отправляющим портом на сервере, чтобы был не один, а несколько(они же и будут приемными портами клиентов) 
--------------------
Зачем вставать рано или поздно? Надо вставать вовремя
PM MAIL   Вверх
Gelis
Дата 16.4.2008, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 26.10.2006
Где: Брест

Репутация: нет
Всего: 4



В качестве remoteIPAddress нужно взять один из адресов диапазона адресов груповой рассылки
PM MAIL   Вверх
Gelis
Дата 16.4.2008, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 26.10.2006
Где: Брест

Репутация: нет
Всего: 4



Адреса групповой рассылки находятся в диапазоне 224.0.0.0 - 239.255.255.255
Прочитайте в MSDN про методы UdpClient JoinMulticastGroup и DropMulticastGroup
PM MAIL   Вверх
Ronin08
Дата 16.4.2008, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 16.2.2008
Где: г.Москва

Репутация: нет
Всего: 1



так я же написал, что все и клиенты, и сервер работают на одной машине, т.е. remoteIPAddress = 127.0.0.1 (IP-адресс локальной обратной связи)
--------------------
Зачем вставать рано или поздно? Надо вставать вовремя
PM MAIL   Вверх
it_medved
Дата 22.4.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 1.5.2007
Где: Днепропетровск

Репутация: нет
Всего: 1



Создай массив сокетов, и посылай им все сообщения по очереди, кроме того, хто прислал это сообщение. я так делал
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0772 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.