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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по UDP чату. 
:(
    Опции темы
KPEHDEL
Дата 22.9.2012, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте. Делаю UDP чат. Возник вопрос как лучше отправить сообщение всем.

Допустим в чате авторизовались(послали логин/пароль) 3 пользователя. Записывать адрес каждого и потом в цикле с помощью sendto отправлять каждому? Ведь UDP не устанавливает соединение.

Или как это делают нормальные люди?)
PM MAIL WWW ICQ   Вверх
tzirechnoy
Дата 22.9.2012, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 2
Всего: 16



У меня есть одна шутка про UDP. Но, боюсь, она до вас не дойдёт...
PM MAIL   Вверх
KPEHDEL
Дата 22.9.2012, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

У меня есть одна шутка про UDP. Но, боюсь, она до вас не дойдёт...


Мог бы и написать, раз уж постишь. Может дошла бы) Я не совсем тупой как бы) Протокол, вроде знаю.

Это сообщение отредактировал(а) KPEHDEL - 22.9.2012, 15:47
PM MAIL WWW ICQ   Вверх
tzirechnoy
Дата 22.9.2012, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 2
Всего: 16



Цитата
 Может дошла бы


Ужэ не дошла, успокойтесь.
PM MAIL   Вверх
KPEHDEL
Дата 22.9.2012, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



tzirechnoy, дошло только после того как разжували)

Вопрос актуален.
Сейчас записываю адреса авторизовавшихся в sockaddr_in users_online_addr[10]; И потом в цыкле отправляю.
Но это ведь не нормально да?

Это сообщение отредактировал(а) KPEHDEL - 23.9.2012, 10:56
PM MAIL WWW ICQ   Вверх
feodorv
Дата 22.9.2012, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Цитата(KPEHDEL @  22.9.2012,  20:34 Найти цитируемый пост)
users_online_addr[10];

Если у Вас ограничение в 10 пользователей, то почему не использовать TCP?

Добавлено через 2 минуты и 22 секунды
Цитата(KPEHDEL @  22.9.2012,  20:34 Найти цитируемый пост)
Но это ведь не нормально да? 

Всё зависит от логики, которую Вы хотите воплотить. 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
volatile
Дата 22.9.2012, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(KPEHDEL @  22.9.2012,  15:46 Найти цитируемый пост)
Мог бы и написать, раз уж постишь. Может дошла бы) Я не совсем тупой как бы) 

KPEHDEL, тут шутка юмора заключалась в том что она не дошла бы до вас не потому что вы тупой, а потому, что протокол UDP не дает никаких гарантий (в отличии от TCP) по доставке пакетов.

еще из приблизительно такого типа юмора, что запомнилось:
Всех людей можно разделить ровно на три категории: тех кто считать умеет, и тех кто не умеет.
ну и т.д.


PM MAIL   Вверх
borisbn
Дата 23.9.2012, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Ещё есть: люди делятся на 10 категорий - те кто понимает двоичную систему и тех, кто нет


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
semibug
Дата 23.9.2012, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сервер какой-то предусматривается?

Отправить можно по очереди всем через sendto, как извращение - использовать мульти и широковещательные пакеты.

По поводу гарантии доставки UDP сообщений - в локалке скорее всего потерь не будет (если нет переходов 10/100/1000 на узлах и приложений забивающих каналы).
Если гарантии нужны, рекомендую попридумывать какой-то механизм подтверждений, в течении 2 дней, потом посмотреть на TCP.



Это сообщение отредактировал(а) semibug - 23.9.2012, 10:05
PM   Вверх
KPEHDEL
Дата 23.9.2012, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо за шутки)
Цитата

Если у Вас ограничение в 10 пользователей, то почему не использовать TCP?

Ограничение не в 10 пользователей. Просто пока написал столько.

Цитата

Если гарантии нужны, рекомендую попридумывать какой-то механизм подтверждений, в течении 2 дней, потом посмотреть на TCP.

В моей задаче больше подходит UDP. Полная гарантия доставки не нужна, так как если пакет будет доставлен сильно позже, он уже не будет нужен. 

Цитата

Сервер какой-то предусматривается?

Да, сервер предусматривается, работать должно не только в локалке.

Цитата

Отправить можно по очереди всем через sendto, 

Пока так и сделал, но это не красиво.

Цитата

как извращение - использовать мульти и широковещательные пакеты


Пойду подробнее читать об этом.

Спасибо за ответы, если будут ещё варианты, пишите.

Интересно как же делают в онлайн играх сделанных на udp, думаю там не отправляют по очереди в цикле с помощью sendto smile 
PM MAIL WWW ICQ   Вверх
tzirechnoy
Дата 23.9.2012, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 2
Всего: 16



Именно отправляют, именно в цыкле (ну, с некоторым распараллеливанием, которое распараллеливание вообще, и не зависит от sockets). 
Мультикаст, по сути, пока не работает -- то есть если это полностью твоя сеть, с твоими роутерами и свитчами, и у тебя есть власть над админами конечных точек -- то есть шанс это настроить. Если клиент, который владеет сетью и конечными точками, готов заплатить тебе 100500 баксов за твоё решэние -- тожэ. В средне-нормальной IP-сети -- нет, он просто не работает.
Броадкаст -- это в рамках одного сегмента сети, и поэтому ни для чего кроме настройки сети в этом сегменте неприспособлен.

Добавлено через 2 минуты и 25 секунд
И самое важное: дажэ локальная сеть с 1% потерь -- это хреновенькая локальная сеть, но работающая и встречающаяся нередко. 0.1% потерь -- это сплошь и рядом. Если не хочешь, чтобы каждая 300-я фраза молча пролетала мимо клиента -- надо что-то делать.
PM MAIL   Вверх
KPEHDEL
Дата 23.9.2012, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну в принципе представление я получил, то есть если ориентация не только на сеть, то в цикле и с распараллеливанием.

Цитата

Если не хочешь, чтобы каждая 300-я фраза молча пролетала мимо клиента -- надо что-то делать. 

Что-то делать для уменьшения вероятности потери нужного пакета в любом случаи прийдётся, но это уже немного позже. 

Спасибо за ответы. smile 
PM MAIL WWW ICQ   Вверх
feodorv
Дата 23.9.2012, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Цитата(KPEHDEL @  23.9.2012,  11:55 Найти цитируемый пост)
В моей задаче больше подходит UDP.

Пожалуйста, объясните, почему. И как Вы хотите реализовать отсоединение клиента от чат-сервера.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Леопольд
Дата 23.9.2012, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 10
Всего: 13



Цитата(KPEHDEL @  23.9.2012,  10:55 Найти цитируемый пост)
В моей задаче больше подходит UDP.

Видеочат - конференция? Если просто текст, тогда непонятно почему UDP лучше.



--------------------
вопросов больше чем ответов
PM MAIL   Вверх
KPEHDEL
Дата 23.9.2012, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Пожалуйста, объясните, почему. И как Вы хотите реализовать отсоединение клиента от чат-сервера. 


Цитата

Видеочат - конференция? Если просто текст, тогда непонятно почему UDP лучше.


В универе скоро будет задание, сделать мини игру на сокетах. Ориентация при моём выборе идёт не на чат, просто решил, что стоит начать с консольного чата.

Выбрал UDP в основном из-за быстроты и гибкости. Про все его минусы знаю, про то, что нет гарантии доставки, произволный порядок передачи данных, размножение и т.д.
В мини-игре, которую я буду реализовывать, если пакет прийдёт позже он попросту не будет нужен. Следовательно гарантия доставки не нужна, нужна скорость.

Конечно, скорей всего я встречу подзадачу, в которой вероятность потери должна быть минимальна, и было бы интересно, попробовать своять велосипед самому. Ведь это весело и хардкорно. 

Возможно буду использовать UDP совместно с TCP, для разных подзадач. Также сейчас читаю о RUDP.

Кстате моё мнение, что именно для чата, TCP подошёл бы больше, так как в чате важнее не скорость, а гарантия. Возможно для чата его и буду использовать.

Однако сейчас работаю с UDP, следовательно вопросы пока о UDP.

Цитата

И как Вы хотите реализовать отсоединение клиента от чат-сервера. 

Со стороны клиента при отправке соответствующей команды.
Со стороны сервера, в качестве проверки, отправка клиенту запроса(не один раз), на который клиент должен ответить, иначе дисконнект.

В догонку задам маленький вопрос:
Сделал два потока, чтобы приём и отправка сообщений не мешали друг другу.
Функция потока:
Код

static unsigned __stdcall ThreadFunc( void* pArguments ) {
    while( 1 ) {
        cout<<"S<=C: "<<endl;
        cin>>Winsock.buff;
        Winsock.Sending_to_server();
        
        Sleep(20);
    }

    _endthreadex( 0 );
    return 0;



Метод в котором вызывается второй поток:
Код

int Winsock::messaging() {
    // Create the second thread.
    HANDLE hThread = (HANDLE)_beginthreadex( NULL, 0, &ThreadFunc, NULL, 0, NULL );    
    
    CloseHandle( hThread );

    while( 1 ) {
        cout<<"test"<<endl;
        Reception_from_server();
        cout<<"S=>C: "<<&buff[0]<<endl;
        Sleep(20);
    }
    
    return 0;
}


Так вот, созданный второй поток работает нормально.
А цикл while в отвечающий за приём работает не нормально, нельзя сказать, что не работает вовсе.
Происходит следующее:
Сначала 1 раз выводится test.
А потом работает только второй поток. Иначе бы сообщением "test" заспамило, а также я получал бы сообщения от сервера.

Подскажите пожалуйста в чём дело. Заранее спасибо.

PS: Наверное тему правильнее было создать в разделе C/C++: Сети. Если так перенесите пожалуйста.

Это сообщение отредактировал(а) KPEHDEL - 23.9.2012, 22:20
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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