Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2015, 11:43   #1
gotom
Новичок
Джуниор
 
Регистрация: 04.02.2015
Сообщений: 2
Восклицание Клиент-серверное приложение чат

Помогите разобраться с форматом команд передачи данных. Могу выслать курсач для ознакомления.
gotom вне форума Ответить с цитированием
Старый 04.02.2015, 16:52   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Простой чат на С++, Qt.
Притом, на мой взгляд, там достаточно интересное решение в плане использования адаптера для сокета. Это позволяет варьировать формат передачи данных во время выполнения программы, например, переходить на шифрованную передачу и т.п.
rrrFer вне форума Ответить с цитированием
Старый 04.02.2015, 18:15   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от gotom Посмотреть сообщение
Помогите разобраться с форматом команд передачи данных. Могу выслать курсач для ознакомления.
Вы бы язык уточнили. А формат передачи Json и XML
8Observer8 вне форума Ответить с цитированием
Старый 04.02.2015, 22:36   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
А формат передачи Json и XML
Почему? - это самые правильные форматы? )
rrrFer вне форума Ответить с цитированием
Старый 05.02.2015, 12:32   #5
gotom
Новичок
Джуниор
 
Регистрация: 04.02.2015
Сообщений: 2
По умолчанию

Ребят подскажите или посоветуйте литературу! В приложении 3 из чего состоят пакеты данных в данном случае(в общем полную структуру пакета что в него входит).
Вложения
Тип файла: rar Клиент-серверное приложение.rar (90.9 Кб, 30 просмотров)
gotom вне форума Ответить с цитированием
Старый 05.02.2015, 14:58   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Почему? - это самые правильные форматы? )
С сервером vk.com по ним обмен происходит. Да и со многими другими, например, с серверами погоды и т.д. Сейчас самый популярный - это Json. Удобно. Лучше придерживаться Json

Цитата:
Сообщение от gotom Посмотреть сообщение
Ребят подскажите или посоветуйте литературу! В приложении 3 из чего состоят пакеты данных в данном случае(в общем полную структуру пакета что в него входит).
Спасибо за документ! Очень интересный. Оказывается у вас Qt. У меня есть пример простейшего чата на Qt: вот исходники (справа кнопка "Download ZIP")

Определённо вам нужно очень внимательно прочитать главу 40 из этой книги. С книгой идёт диск с примерами. Это единственная книга на русском. Есть ещё, но по GUI, автора Саммерфилд. А на английском можете читать? Хотя вам и этой с головой хватит. Ещё можете видео-уроки погуглить, типа: как базу данных сделать на Qt и т.д. Лучше гуглить на английском, там больше качественного материала. Даже если не понимаете, то можно просто смотреть и повторять

И ещё с Qt идут примеры по сети, базам данных и Json:

C:\Qt\Qt5.4.0\Examples\Qt-5.4\network
C:\Qt\Qt5.4.0\Examples\Qt-5.4\sql
C:\Qt\Qt5.4.0\Examples\Qt-5.4\corelib\json\savegame

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

Последний раз редактировалось Stilet; 06.02.2015 в 07:46.
8Observer8 вне форума Ответить с цитированием
Старый 05.02.2015, 19:22   #7
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
У меня есть пример простейшего чата на Qt: вот исходники (справа кнопка "Download ZIP")
Чето я не понял. Там лежит один проект, называется Server. Вроде как и запускается сервер. Почему-то MainWindow правда создает его, но ладно...
Вылазит окно, вроде как клиента.
Внутри есть код (обработчик НАЖАТИЯ КНОПКИ отправки сообщения):
Код:
if ( m_statusLabel->text().isEmpty() ) {
        m_connection->send( message );
    } else {
        m_server->send( message );
    }
Т.е.:
1) на сервере есть кнопка для отправки
2) у клиента выходит тоже есть указатель на сервер?
Я чето не пойму что это вообще ? - что ты вообще представляешь под сервером и почему он у каждого клиента есть? Что там за муть с сессиями?

Лично мне кажется, что у тебя только один клиент может подлючен быть к серверу. И почему-то писать может сервер клиенту и клиент серверу.
Чат - это обычно когда 100 юзеров подключаются к одному серверу и общаются через него (посмотри по моей ссылке пример). У тебя не чат вроде как...

Я там вопросы задавал, про сессии ответь пожалсто. Я что-то не понял что ты ими пытался сделать.

Последний раз редактировалось rrrFer; 05.02.2015 в 19:27.
rrrFer вне форума Ответить с цитированием
Старый 05.02.2015, 20:13   #8
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Можно запустить за разных компьютерах локальной сети и обмениваться сообщениями. Это просто простейший пример передачи сообщений
8Observer8 вне форума Ответить с цитированием
Старый 05.02.2015, 21:15   #9
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Можно запустить за разных компьютерах локальной сети и обмениваться сообщениями. Это просто простейший пример передачи сообщений
Ты не ответил на вопросы.
Компьютеров всего 2 или я что-то не понял?
Зачем там сессии? Какую задачу они решают? (про сессии настойчиво спрашиваю, т.к. я ими не пользовался, загуглил, разобрался, но не понял что они делают в твоем примере).

И да, если это "простейший пример" - зачем там сессии? Зачем там QSettings? - разве все это не "усложняет простейший пример"?

Лично я не пользую QSettings потому что это уныло. Там есть несколько форматов хранения и native ИМХО самое УГ, т.к. в линуксе он создаст файл рядом с исполняемым файлом, в винде - запишет инфу в реестр (а кто ее удалит потом?), а под ведром - вроде как должен создать sqlite базу где-то в дебрях мобилы. Ini-файлы (которые он тоже может создать) - тоже не лучший вариант. Опять же под андройдом они не взлетят 99% или сломаются при обновлении.

Не по теме, но интересно, ты смотрел пример по моей ссылке? )

Если я не ошибся в предыдущем посте - то твой чат - УГ.
То, что ты называешь сервером - никто кроме тебя и Крупника сервером не назовет.
Ты "упростил пример" там где не надо, но усложнил в других местах. Код сложный и ЗАПУТАННЫЙ. Я разобрался с огромным трудом (хотя я не тот, кому ты посоветовал "простой пример").
Код не читаемый вообще, особенно доставляет замес клиента и сервера в один флакон.

Если студент попробует сдать твою поделку - его отчислят к чертовой матери сразу.

Цитата:
Определённо вам нужно очень внимательно прочитать главу 40 из этой книги
И что, Шлее учит вот так говнокодить?

Последний раз редактировалось Stilet; 06.02.2015 в 07:50.
rrrFer вне форума Ответить с цитированием
Старый 06.02.2015, 08:09   #10
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Да, я быстро сфорганил. Его конечно проработать нужно. Конфигурирование я скопипастил из какого-то примера, которые c Qt идут. Для упрощения убрать бы это, конечно

Из Шлее я взял только код отправки пакета:

Код:
void Server::send( const QString &text )
{
    QByteArray  arrBlock;
    QDataStream out( &arrBlock, QIODevice::WriteOnly );
    out.setVersion( QDataStream::Qt_5_0 );

    out << quint16( 0 ) << text;

    out.device()->seek( 0 );
    out << quint16( arrBlock.size() - sizeof( quint16 ) );

    m_socket->write( arrBlock );
}
И код приёма пакета:

Код:
void Connection::slotReadyRead()
{
    QTcpSocket* clientSocket = ( QTcpSocket* )sender();
    QDataStream in( clientSocket );
    in.setVersion( QDataStream::Qt_5_0 );

    for ( ;; ) {
        if (!m_nextBlockSize) {
            if (clientSocket->bytesAvailable() < (int)sizeof(quint16)) {
                break;
            }
            in >> m_nextBlockSize;
        }

        if (clientSocket->bytesAvailable() < m_nextBlockSize) {
            break;
        }

        QString inputData;
        in >> inputData;
        emit signalReceivedData( inputData );

        m_nextBlockSize = 0;
    }
}
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Клиент-серверное приложение asmars C# (си шарп) 7 05.07.2013 11:04
Клиент-Серверное приложение и БД Mihail.Glukhov БД в Delphi 17 25.04.2012 11:52
Клиент-Серверное приложение...? spamer Общие вопросы по программированию, компьютерный форум 2 15.03.2012 12:42
Клиент Серверное приложение BARNEY Общие вопросы Delphi 2 28.10.2010 09:30
Возможно-ли Клиент-серверное приложение типа Клиент(Pascal) а сервер(CGI)? Demol Работа с сетью в Delphi 1 21.04.2009 16:18