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

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

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2014, 11:38   #1
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию поддержка сети Qt

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

Код:
#include "myserver.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyServer server(2323);
    server.show();

    return a.exec();
}
Это пример из книги Шилдта.
тут в конструктор передается номер порта. А по чему именно 2323? в этих цифра есть какой то смысл или они просто из головы взяты?

Теперь что касается клиента
В книге сказано что для реализации сервера надо создать объект QTcpSocket затем вызвать метод connectToHost() передав ему имя компьютера или его IP-адрес и номер порта
По чему в качестве имени компьютера передается значения "localhost"? в чем его смысл? Это наводит на мысль что то связанное с локальной сетью. А возможно осуществить соединение не по локальной сети, а через интернет?
Код:
#include "myclient.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //MyClient w;
    //w.show();
    MyClient client("localhost", 2323);
    client.show();

    return a.exec();
}
Код:
MyClient::MyClient(const QString &strHost, int n_port, QWidget *parent)
    : QWidget(parent), next_block_size(0)
{
    tcp_socket = new QTcpSocket(this);
    tcp_socket->connectToHost(strHost, n_port);

    connect(tcp_socket, SIGNAL(connected()), SLOT(slotConnected()));
    connect(tcp_socket, SIGNAL(readyRead()), SLOT(slotReadyRead()));
    connect(tcp_socket, SIGNAL(error(QAbstractSocket::SocketError)),
            this, SLOT(slotError(QAbstractSocket::SocketError)));

    txt_info = new QTextEdit;
    txt_input = new QLineEdit;
    txt_name = new QLineEdit;

    txt_info->setReadOnly(true);

    QPushButton *cmd = new QPushButton("&Send");
    connect(cmd, SIGNAL(clicked()), SLOT(slotSendToServer()));
    connect(txt_input, SIGNAL(returnPressed()), this, SLOT(slotSendToServer()));

    // Layout
    QVBoxLayout *vb = new QVBoxLayout;
    vb->addWidget(new QLabel("<H1> Client </H1>"));
    vb->addWidget(new QLabel("Name"));
    vb->addWidget(txt_name);
    vb->addWidget(txt_info);
    vb->addWidget(txt_input);
    vb->addWidget(cmd);
    setLayout(vb);

}
Это еще не все по ходу дела будут еще вопросы.
SAMOUCHKA вне форума Ответить с цитированием
Старый 05.06.2014, 13:36   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
тут в конструктор передается номер порта. А по чему именно 2323? в этих цифра есть какой то смысл или они просто из головы взяты?
можно брать и из головы если свой протокол, если это HTTP сервер, то обычно это порт 80.
этот номер порта нужно будет указать клиенту.
Цитата:
По чему в качестве имени компьютера передается значения "localhost"? в чем его смысл? Это наводит на мысль что то связанное с локальной сетью. А возможно осуществить соединение не по локальной сети, а через интернет?
а погуглить...
localhost это псевдоним к адресу 127.0.0.1, что означает коннект сам к себе, сеть там вообще не используется.
через интернет коннект возможен, вы же пишите сейчас))

главное чтоб сервер был доступен.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.08.2014, 09:32   #3
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

скажите как лучше передавать по сети базу данных SQL
SAMOUCHKA вне форума Ответить с цитированием
Старый 28.08.2014, 09:02   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,618
По умолчанию

База находится в файле и не обновляется во время передачи - значит можно передавать как файл.

Ну а в противном случае по строкам. Опять же база не должна обновляться во время передачи.
rrrFer вне форума Ответить с цитированием
Старый 30.11.2014, 22:33   #5
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
База находится в файле и не обновляется во время передачи - значит можно передавать как файл.

Ну а в противном случае по строкам. Опять же база не должна обновляться во время передачи.
Ну хорошо, буду передавать по строкам и БД в это время обновляться не будет.
Мне не надо все время передавать всю БД, а только изменения прошедшие с момента последней передачи. Например добавились или изменились некоторые строки.
SAMOUCHKA вне форума Ответить с цитированием
Старый 02.12.2014, 19:23   #6
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,618
По умолчанию

Ну значит используй индексы в БД - они могут ускорить экпоненциально выборку данных за указанный период.

Запрашивай у базы данных за период и выдавай их клиенту. Делов-то...
rrrFer вне форума Ответить с цитированием
Старый 06.12.2014, 12:43   #7
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

да я даже всю БД, цылеком не могу передать. клиент то не знает сколько там строк
SAMOUCHKA вне форума Ответить с цитированием
Старый 06.12.2014, 13:19   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вы с БД как работаете то?

выборку же делаете так или иначе, вот эту выборку и передайте.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.12.2014, 13:28   #9
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,618
По умолчанию

SAMOUCHKA
Нахрена клиенту знать сколько там строк? - я написал выше что делать и как. Количество строк клиенту знать не нужно.
rrrFer вне форума Ответить с цитированием
Старый 06.12.2014, 14:11   #10
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а вы с БД как работаете то?

выборку же делаете так или иначе, вот эту выборку и передайте.
передать не проблема, в цикле передаю все строки.

Цитата:
Нахрена клиенту знать сколько там строк? - я написал выше что делать и как. Количество строк клиенту знать не нужно.
по чему не надо?

Как принять? От куда я знаю сколько строк надо принимать?
Хоть подскажите что ни будь на эту тему. гугление особо не помогло.

Надо быстрее сделать, дотянул до последнего, думал это просто

Последний раз редактировалось SAMOUCHKA; 06.12.2014 в 14:19.
SAMOUCHKA вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поддержка на экзамене Владилена Фриланс 1 15.06.2011 13:10
Справка и поддержка strong78 Операционные системы общие вопросы 12 24.01.2011 11:28
Socket: Подключение клиента из глобальной сети к серверу, расположенному в локальной сети Дамир Общие вопросы .NET 4 01.12.2010 12:12
Поддержка плагинов Altera Общие вопросы Delphi 4 29.07.2009 18:03