Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
1

Qt Network

16.04.2012, 03:57. Показов 3312. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Кто работал с плюшками network-a?
сейчас начал смотреть всякие QNetworkAccessManager, QNetworkConfigurationManager и т.п. плюшки, пришел к выводу, что пользы от этого в Desktop приложении как от ракушки в шкафу, если всё правильно понял, то эти плюшки заточены либо под мобильные устройства, либо под работу с HTTP. или я ошибаюсь?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.04.2012, 03:57
Ответы с готовыми решениями:

Многопоточность и network
Всем привет! Я сейчас пытаюсь написать программу для сбора сведений о торрентах, т.е. написать...

подключение библиотеки QT network
содержание .pro файла QT += core gui QT += network greaterThan(QT_MAJOR_VERSION,...

Qt network не подключить QTcpServer
Пытался написать эхо-сервер. Опыта с Qt мало. Создал консольное приложение Qt. При попытке...

Network Audio System
Появилась задача под qt3 в линуксе звук воспроизводить, пишет ошибку установите nas 1.2 и некое au....

13
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
16.04.2012, 10:32 2
ошибаешься чего тебе надобно старче ?
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
16.04.2012, 13:28  [ТС] 3
ну вот хотя бы взять QRequest QResponse ну или как-то так... они в network одни, не перепутать... создаём менеджера с одной и с другой стороны (клиент, сервер) и каким же макаром мне с клиента достучаться до сервера (просто передать набор байт как вариант, или некий класс)?

Добавлено через 38 секунд

Не по теме:

зы: это мне вчера качественно не спалось :)) решил восполнять пробелы в знаниях....

0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
16.04.2012, 16:31 4
Лучший ответ Сообщение было отмечено как решение

Решение

вот пример:
Сервер

.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#ifndef CLIENTCONNECT_H
#define CLIENTCONNECT_H
 
#include <QObject>
#include <QHostAddress>
#include <QTcpServer>
#include <QTcpSocket>
#include <QFile>
#include <QStringList>
#include <QApplication>
 
class ClientConnect : public QObject
{
    Q_OBJECT
private:
    enum states {TOE=0,//0 Нолики
                 TAC,  //1 Крестики
                 NO,   //2 Нет ожидающих игроков
                 YES,  //3 Есть игрок ожидающий соперника
                 NAME, //4 Значение говорящее клиенту отправить свое имя
                 PRES, //5 Значение говорящее клиенту представить всю инфу о себе
                 WINN, //6 Значение говорящее о результате игры
                 STEP, //7 Значение говорящее кто и куда походил
                 DOWN, //8 Игрок готов начать игру
                 CONN, //9 Соперник подключился
                 FULL, //10 Сервер переполнен
                 ERROR,//11 Ошибка...
                 NONE, //12 Ничья
                 CLNT, //13 Клиент
                 BAN,
                 SRV
 
                };
    QTcpServer *server;
    QTcpSocket *gamer;
    QTcpSocket *tmpGamer;
    QByteArray data;
    QHostAddress host;
    int srv_port;
    QList<QString> NameConUser;
    QHash <int, void(ClientConnect::*)(QStringList)> pointFunc;
    QHash <states, QTcpSocket *> TablePartGame; // содержит двух игроков играющих между собой
    QHash <states, QTcpSocket *> tmpTablPart; // временая переменная для простоты манипуляции с данными
    QHash <int, QHash <states, QTcpSocket *> > TableGamer; // полнная таблица игроков
    QString findstatic(QString); // поиск в файле статистики информации о подключенном игроке
 
    QTcpSocket * find_gamer(int, int);
    void writeHashPoint();
    void mesPRESS(QStringList);
    void mesSTEP(QStringList);
    void mesWIN(QStringList);
    void mesNAME(QStringList);
 
 
public:
    explicit ClientConnect(QObject *parent = 0);
    ClientConnect(QObject *parent, QHostAddress type_addr, int port);
 
signals:
    void press(QString); //  о том что игрок представился
    void step(QString); // о том что обработана строка хода игрока
    void win(QStringList); // сигнализируем интерфейсу что есть победитель
    void user_down(QString); // сигнал для оповещения что игрок отключился
public slots:
    void NewGamer();
    void GetMessage();
    void UserDisconnect(); // обрабатываем отключенного пользователя
};
#endif // CLIENTCONNECT_H


.срр
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
#include "clientconnect.h"
 
ClientConnect::ClientConnect(QObject *parent) :QObject(parent)
{
 
}
 
ClientConnect::ClientConnect(QObject *parent, QHostAddress type_addr, int port):QObject(parent), host(type_addr), srv_port(port)
{
    server = new QTcpServer(this);
    //заполняем контейнер указателей на функицию
    writeHashPoint();
    //запускаем сервер
    if(server->listen(host,srv_port))
    {
        qDebug()<<"SERVER STARTED!";
        connect(server,SIGNAL(newConnection()),this, SLOT(NewGamer()));
    }
    else
    {
         // qDebug()<<"ERROR: SERVER NOT RUNING " << server->errorString();
    }
}
 
void ClientConnect::NewGamer()
{
    qDebug()<<"USER CONNECTED";
    data.clear();
    gamer = server->nextPendingConnection();
    connect(gamer, SIGNAL(readyRead()), this, SLOT(GetMessage()));
    data.insert(0, QString("%1").arg(NAME));
    qDebug()<<"SEND DATA USER-Y " << data;
    gamer->write(data);
    data.clear();
}
 
void ClientConnect::GetMessage()
{
    gamer = (QTcpSocket*)sender();
    if(gamer->bytesAvailable() >0)
    {
        QString str(gamer->readAll());
        QStringList lst = str.split(";");
        qDebug()<< "SERVER GET DATA FROM GAMER: " << str;
        // если адрес функции верен выполняем ее
        if(pointFunc.value(lst.at(0).toInt()))
        {
            qDebug()<< "RUN FUNCTIONS: " << lst.at(0);
            (this->*(this->pointFunc[lst.at(0).toInt()]))(lst);
        }
    }
    else
    {
         // qDebug()<< "NO DATA!!!!!!!!";
    }
}
 
void ClientConnect::writeHashPoint()
{
    pointFunc[PRES] = &ClientConnect::mesPRESS;
    pointFunc[STEP] = &ClientConnect::mesSTEP;
    pointFunc[WINN] = &ClientConnect::mesWIN;
    pointFunc[NAME] = &ClientConnect::mesNAME;
}
 
// обрабатываем сообщение о клиенте
void ClientConnect::mesPRESS(QStringList lst)
{
     qDebug()<<"mesPRESS RUNING";
    QString addUser="";
    //Указываем имя объекту
    qDebug()<<"mesPRESS OBJECT NAME " << lst.at(3) ;
    //                                           name           id table       id part
    gamer->setObjectName(QString("%1;%2;%3").arg(lst.at(3)).arg(lst.at(1)).arg(lst.at(2)));
    //ID_Table
    qDebug()<<"mesPRESS ID_TABLE " << lst.at(1);
    addUser+=QString("%1;").arg(lst.at(1));
    //ID_Part
    qDebug()<<"mesPRESS ID_PART " << lst.at(2);
    addUser+=QString("%1;").arg(lst.at(2));
    //NAME
    qDebug()<<"mesPRESS NAME " << lst.at(3);
    addUser+=QString("%1;").arg(lst.at(3));
    //IP
    qDebug()<<"mesPRESS IP "  << gamer->peerAddress().toString();
    addUser+=QString("%1;").arg(gamer->peerAddress().toString());
    //Port
    qDebug()<<"mesPRESS PORT " << srv_port ;
    addUser+=QString("%1;").arg(srv_port);
    //X|O
    qDebug()<<"mesPRESS X|O " << lst.at(4);
    addUser+=QString("%1;").arg(lst.at(4));
    // получаем статистику
    QString usrStatic = findstatic(lst.at(3));
    if(!usrStatic.isEmpty())
    {
        qDebug()<< "USER STATIC IS NOT EMPY " << usrStatic;
        //убираем имя пользователя из строки статистики
        usrStatic.replace(QString("%1;").arg(lst.at(3)),"");
         qDebug()<< "USER STATIC AFTE REPLACE " << usrStatic;
    }
    else
    {
        usrStatic=QString("0;0;0;0;");
    }
    qDebug()<<"mesPRESS USER STATIC " <<usrStatic;
 
    addUser+=usrStatic;
    qDebug()<< "NameConUser.size() ===" << NameConUser.size();
    qDebug()<< "NameConUser.size()%2 ===== "  << NameConUser.size()%2;
 
    if(NameConUser.size()%2==0)
    {
        // ищем адрес пративника, аргументы id d общей табл играков и id в партии
        gamer = find_gamer(lst.at(1).toInt(), lst.at(2).toInt());
        qDebug()<<"mesPRESS %2 != 0";
        data.clear();
        data.insert(0,QString("%1;%2;%3").arg(CONN).arg(lst.at(3)).arg(usrStatic));
        // сообщаем ожидающему игроку имя и статистику его соперника...
        gamer->write(data);
    }
    data.clear();
    // сообщаем GUI о подключившемся игроке
    emit press(addUser);
    qDebug("mesPRESS run");
}
 
// обработка сообщения о том куда кто походил
void ClientConnect::mesSTEP(QStringList lst)
{
    data.clear();
    QString userStep = QString("%1;%2;%3;%4;%5").arg(STEP).arg(lst.at(1)).arg(lst.at(2)).arg(lst.at(3)).arg(lst.at(4));
    qDebug()<< "SEND USER-Y STEP: " <<userStep;
    data.insert(0, userStep);
    qDebug()<<lst.size();
    qDebug()<<"X " <<lst.at(3);
    qDebug()<<"Y " <<lst.at(4);
    tmpGamer = find_gamer(lst.at(1).toInt(), lst.at(2).toInt());
    tmpGamer->write(data);
    emit step(QString("Игрок %1 сделал ход: %2 %3").arg(tmpGamer->objectName()).arg(lst.at(3)).arg(lst.at(4)));
    qDebug("mesSTEP run");
    data.clear();
}
 
 
void ClientConnect::mesWIN(QStringList lst)
{
    emit win(lst);
    qDebug("mesWIN run");
}
 
void ClientConnect::mesNAME(QStringList lst)
{
    bool user_fail=false;
    for(int i=0; i<NameConUser.size(); ++i)
    {
        if(NameConUser.at(i)==lst.at(1))
        {
            user_fail=true;
        }
    }
    if(user_fail)
    {
        data.clear();
        data.insert(0,QString("%1;%2").arg(ERROR).arg(NAME));
        gamer->write(data);
        gamer->close();
        data.clear();
    }
    else
    {
        connect(gamer, SIGNAL(disconnected()),this, SLOT(UserDisconnect()));
        if(NameConUser.size()%2==0)
        {
            data.clear();
            data.insert(0, QString("%1;%2;%3;%4;%5").arg(PRES).arg(NO).arg(TableGamer.size()).arg(TablePartGame.size()).arg(TOE));
            gamer->write(data);
            TablePartGame.insert(TOE, gamer);
            NameConUser << lst.at(1);
        }
        else
        {
            data.clear();
            data.insert(0, QString("%1;%2;%3;%4;%5").arg(PRES).arg(YES).arg(TableGamer.size()).arg(TablePartGame.size()).arg(TAC));
            gamer->write(data);
            TablePartGame.insert(TAC, gamer);
            TableGamer.insert(TableGamer.size(), TablePartGame);
            TablePartGame.clear();
            NameConUser << lst.at(1);
        }
    qDebug()<< "NameConUser.size() " << TablePartGame.size();
    qDebug() << "TableGamer.size() " << TableGamer.size();
    }
  qDebug("mesNAME run");
}
 
QString ClientConnect::findstatic(QString name)
{
    QFile statFile(qApp->applicationDirPath() + "/stat.txt");
    QString stat;
    QRegExp rx(name+";\\d+;\\d+;\\d+;\\d+;");
    rx.setMinimal(true);
 
    if(statFile.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        QTextStream rw(&statFile);
        while( !rw.atEnd())
        {
             stat = rw.readLine();
             if(stat.indexOf(rx,0)>=0)
             {
                qDebug()<<"STAT FOUND!!!!!!!!";
                 break;
             }
             else
             {
                 stat="";
             }
        }
        return stat;
    }
    else
    {
       qDebug()<<"STAT NOT FOUND";
        return "";
    }
}
 
void ClientConnect::UserDisconnect()
{
    QStringList key = sender()->objectName().split(";");
    qDebug() << "SENDER OBJECTNAME = " << key.at(0) << " " <<key.at(1) << " " << key.at(2);
    qDebug()<<"USER DISCONNECT TABLE GAMER SIZE == " << TableGamer.size();
    //ищем кто отключился, сообщяем противнику что игрок
    //отключился, добавляем информацию в лог сервера...
    data.clear();
    data.insert(0, QString("%1;%2").arg(DOWN).arg(CLNT));
    tmpGamer = find_gamer(key.at(1).toInt(), key.at(2).toInt());
    if (!tmpGamer->objectName().isEmpty())
    {
        tmpGamer->write(data);
    }
    if(TableGamer.size()>0)
    {
        tmpTablPart = TableGamer.value(key.at(1).toInt());
       qDebug() << "TMP TABLE SIZE "<<tmpTablPart.size();
        tmpTablPart.remove(static_cast<states>(key.at(2).toInt()));
       qDebug() << "TMP TABLE SIZE 2 "<<tmpTablPart.size();
        if(tmpTablPart.size()>0)
        {
            TableGamer.insert(key.at(1).toInt(),tmpTablPart);
        }
        else
        {
            TableGamer.remove(key.at(1).toInt());
        }
       qDebug()<<"USER DISCONNECT TABLE GAMER SIZE > 0 == " << TableGamer.size();
    }
    else
    {
        TablePartGame.clear();
    }
    NameConUser.removeOne(key.at(0));
    emit user_down(key.at(0));
}
 
QTcpSocket * ClientConnect::find_gamer(int tabl, int part)
{
    QHash <int, QHash <states, QTcpSocket *> >::const_iterator table = TableGamer.constBegin();
    while(table!=TableGamer.constEnd())
    {
        if(tabl ==table.key())
        {
            qDebug()<<"GOOD TABLE";
            tmpTablPart = table.value();
            qDebug()<<"tmpTablePart SIZE = " << tmpTablPart.size();
            QHash <states, QTcpSocket *>::const_iterator tblPart = tmpTablPart.constBegin();
            while(tblPart!= tmpTablPart.constEnd())
            {
                if(part!=tblPart.key())
                {
                qDebug()<<"GOOD PART " << tblPart.key();
                   return tblPart.value();
                }
                tblPart++;
            }
        }
        table++;
    }
    return new QTcpSocket();
}


Клиент

.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#ifndef LANGAME_H
#define LANGAME_H
 
#include <QObject>
#include <QApplication>
#include <QHostAddress>
#include <QTcpSocket>
#include <QDebug>
#include <QSettings>
#include <QMessageBox>
 
 
class LanGame : public QObject
{
    Q_OBJECT
private:
 
    enum states {TOE=0,//0 Нолики
                 TAC,  //1 Крестики
                 NO,   //2 Нет ожидающих игроков
                 YES,  //3 Есть игрок ожидающий соперника
                 NAME, //4 Значение говорящее клиенту отправить свое имя
                 PRES, //5 Значение говорящее клиенту представить всю инфу о себе
                 WINN, //6 Значение говорящее о результате игры
                 STEP, //7 Значение говорящее кто и куда походил
                 DOWN, //8 Кто-то отключился
                 CONN, //9 Соперник подключился
                 FULL, //10 Сервер переполнен
                 ERROR,//11 Ошибка...
                 NONE, //12 Ничья
                 CLNT, //13 Клиент
                 BAN,
                 SRV
 
                };
 
    QHostAddress host;
    int srv_port;
    QTcpSocket *gamer;
    QByteArray data;
    QSettings *Options;
    QString id_table; // id в общей таблице
    QString id_part; // id в таблице партии
    QHash <int, void(LanGame::*)(QStringList)> pointFunc;
 
 
    void createConnect();
    void writeHashPoint();
 
    void mesPRES(QStringList);
    void mesNAME();
    void mesCONN(QStringList);
    void mesSTEP(QStringList);
    void mesDOWN(QStringList);
    void mesERROR(QStringList);
 
public:
    explicit LanGame(QObject *parent = 0);
    LanGame(QObject *parent, QHostAddress type_addr, int port);
 
signals:
    void connect_to_srv();
    void gamer_disconnect();
    void connectError(QAbstractSocket::SocketError);
    void pres(QString);
    void client_step(QPointF); //получен ход противника  /////////////////////////////////////////////// не забыть отослать сигнал
    void type_game(int); //тип игры
    void lan_znak(int); //за кого играем по сети
    void con_down(QString);
    void apponent_connect(QStringList);
    void client_error(QString);
 
public slots:
    void user_disconnect();
    void sl_winner(QString);
    void sl_sen_messange(QString);
 
private slots:
    void gamerError(QAbstractSocket::SocketError);
    void getMessage();
 
};
 
#endif // LANGAME_H


.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include "langame.h"
 
LanGame::LanGame(QObject *parent) : QObject(parent)
{
 
}
 
LanGame::LanGame(QObject *parent, QHostAddress type_addr, int port):QObject(parent), host(type_addr), srv_port(port)
{
    gamer = new QTcpSocket(this);
    createConnect();
    writeHashPoint();
    Options = new QSettings(qApp->applicationDirPath() + "/config/options.ini", QSettings::IniFormat);
    gamer->connectToHost(host, srv_port);
}
 
void LanGame::createConnect()
{
    connect(gamer, SIGNAL(connected()), this, SIGNAL(connect_to_srv()));
    connect(gamer, SIGNAL(disconnected()), this, SIGNAL(gamer_disconnect()));
    connect(gamer, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(gamerError(QAbstractSocket::SocketError)));
    connect(gamer, SIGNAL(readyRead()), this, SLOT(getMessage()));
}
 
void LanGame::gamerError(QAbstractSocket::SocketError error)
{
    qDebug()<< gamer->errorString();
    gamer->close();
    emit connectError(error);
}
 
void LanGame::getMessage()
{
    if(gamer->bytesAvailable()>0)
    {
        qDebug()<<"GET MESSAGE ";
        QString str(gamer->readAll());
        QStringList lst = str.split(";");
        if(lst.at(0).toInt()==NAME)
        {
            qDebug() << "RUN FUNCTIONS!!!!" << lst.at(0);
            mesNAME();
        }
        else if (pointFunc.value(lst.at(0).toInt()))
        {
            qDebug() << "RUN FUNCTIONS!!!!" << lst.at(0);
            (this->*(this->pointFunc[lst.at(0).toInt()]))(lst);
        }
 
    }
 
}
 
void LanGame::writeHashPoint()
{
    pointFunc[PRES] = &LanGame::mesPRES;
    pointFunc[STEP] = &LanGame::mesSTEP;
    pointFunc[DOWN] = &LanGame::mesDOWN;
    pointFunc[CONN] = &LanGame::mesCONN;
    pointFunc[ERROR] = &LanGame::mesERROR;
}
 
void LanGame::mesERROR(QStringList lst)
{
    qDebug()<<"ERROR " << lst;
    emit client_error(lst.at(1));
    gamer->close();
}
 
void LanGame::mesCONN(QStringList lst)
{
    emit apponent_connect(lst);
}
 
void LanGame::mesDOWN(QStringList lst)
{
    emit con_down(lst.at(1));
    gamer->close();
}
 
void LanGame::mesSTEP(QStringList lst)
{
    qDebug()<<"Form SERVER get Message: " << lst;
    qDebug()<< "Координаты: " << lst.at(3).toInt() << lst.at(4).toInt();
    emit client_step(QPointF(lst.at(3).toInt(),lst.at(4).toInt()));
}
 
void LanGame::mesNAME()
{
    data.clear();
    data.insert(0, QString("%1;%2").arg(NAME).arg(Options->value("LanGame/Name","LanGamer_"+id_table).toString()));
    gamer->write(data);
}
 
void LanGame::mesPRES(QStringList lst)
{
    QString str_to_srv;
    qDebug()<<"Form SERVER get Message: " << lst;
    data.clear();
    id_table = lst.at(2);
    id_part = lst.at(3);
    qDebug()<<"IDClient: "<<id_table;
    emit lan_znak(lst.at(3).toInt());
    //ui->graphicsView->setEnabled(false);
    //Команда серверу
    data.insert(0,QString("%1;").arg(PRES));
    //наш ID_TABLE который выдал сервер
    data.insert(data.size(),QString("%1;").arg(id_table));
    //наш ID_Part который выдал сервер
    data.insert(data.size(),QString("%1;").arg(id_part));
    //наше имя
    data.insert(data.size(),Options->value("LanGame/Name","LanGamer_"+id_table).toString()+";");
    //За кого играем
    data.insert(data.size(),QString("%1;").arg(lst.at(4)));
    //передаем данные на сервер
    gamer->write(data);
    //чистим переменную на всякий случай :)
    data.clear();
    str_to_srv=QString("%1;%2;%3").arg(lst.at(1)).arg(id_table).arg(id_part);
    emit pres(str_to_srv);
}
 
void LanGame::user_disconnect()
{
    gamer->close();
}
 
void LanGame::sl_winner(QString str)
{
    data.clear();
    data.insert(0,str);
    gamer->write(data);
}
 
void LanGame::sl_sen_messange(QString str)
{
    data.clear();
    data.insert(0, str);
    gamer->write(data);
    data.clear();
}


код сильно не причесан но думаю принцип понятен
5
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
16.04.2012, 16:53  [ТС] 5
да ну.... ) тут и ёжику всё понятно...
меня же интересует больше работа именно с классами QNetworkAccessManager и c QNetworkRequest, а так же с QNetworkReply. С сокетами то всё просто, а вот как работать с менеджером и запросом-ответом?
0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
16.04.2012, 17:22 6
ааа вот оно где сабака зарыта, тогда ничего сложного, мне влом выдирать из проекта, поэтому на днях друг просил мини апп ему склепать, труды можешь смотреть в атаче, там как раз с этим есть момент GetMyIP.rar
1
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
16.04.2012, 17:33  [ТС] 7
Цитата Сообщение от Чистый Посмотреть сообщение
ааа вот оно где сабака зарыта, тогда ничего сложного, мне влом выдирать из проекта, поэтому на днях друг просил мини апп ему склепать, труды можешь смотреть в атаче, там как раз с этим есть момент Вложение 143499
пасиб, посмотрю...

Не по теме:

я смотрю тебя в модераторы записали, ну это... поздравляю, что ли)))

0
Чистый
16.04.2012, 17:37
  #8

Не по теме:

:drink: спасибо!

0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
16.04.2012, 19:15  [ТС] 9
просмотрел в поперёк код, если правильно понял, там чистейшей воды работа с http протоколом, угу?
0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
16.04.2012, 19:22 10
в проекте да
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
16.04.2012, 21:02  [ТС] 11
круто))) а помимо HTTP эти классы на что либо годны? )))
0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
16.04.2012, 21:03 12
конкретнее
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
16.04.2012, 21:21  [ТС] 13
ну.... к примеру открыть прозрачно для меня сокет тсп\юдп и что нить с него получить, послать, могёт так сделать?
0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
16.04.2012, 21:24 14
прозрачно нет, для не прозрачно есть QTcpSocket
0
16.04.2012, 21:24
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.04.2012, 21:24
Помогаю со студенческими работами здесь

Network ошибка при метакомпиляции
Ошибки: 1) In function `Downloader::qt_static_metacall(QObject*, QMetaObject::Call, int, void**):...

Synchronous NetWork - не получается синхронизировать два запроса
Не получает синхронизировать два запроса. muclass.h #ifndef MYCLASS_H #define MYCLASS_H ...

Network: как реализовать передачу и прием объекта
QTcpSocket *client = (QTcpSocket*)sender(); client-&gt;write(...) //отправка строки...

Ошибка: qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method...
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method qt.network.ssl:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Как клонировать определенную ветку в Git
bytestream 24.01.2025
Одной из ключевых функций Git является возможность клонирования веток, что позволяет создавать локальные копии удаленных репозиториев и работать с определенными версиями проекта. Этот механизм. . .
Как в цикле обойти строки DataFrame в Pandas Python
bytestream 24.01.2025
DataFrame представляет собой одну из основных структур данных в библиотеке Python Pandas, которая организует информацию в виде двумерной таблицы с строками и столбцами. Эта структура данных особенно. . .
Как получить имя текущей ветки в Git
bytestream 24.01.2025
При работе с Git часто возникает необходимость определить имя текущей ветки, в которой ведется разработка. Знание текущей ветки является критически важным аспектом для эффективного управления. . .
Как отсортировать массив объектов по значению поля объекта в JavaScript
bytestream 24.01.2025
При разработке веб-приложений на JavaScript разработчики часто сталкиваются с необходимостью работать с массивами объектов. Эти структуры данных представляют собой упорядоченные наборы элементов, где. . .
Ошибка "src refspec master does not match any" при пуше коммита в Git
bytestream 24.01.2025
При работе с системой контроля версий Git разработчики нередко сталкиваются с различными ошибками, одной из которых является сообщение "src refspec master does not match any". Эта ошибка возникает. . .
Как округлить не более двух цифр после запятой в JavaScript
bytestream 24.01.2025
При работе с числами в JavaScript разработчики часто сталкиваются с необходимостью округления десятичных значений до определенного количества знаков после запятой. Это особенно важно при работе с. . .
Как сделать UPDATE из SELECT в SQL Server
hw_wired 24.01.2025
В современных системах управления базами данных операции обновления и выборки данных являются фундаментальными инструментами для работы с информацией. SQL Server предоставляет мощные команды UPDATE и. . .
Как вставить элемент в массив на указанный индекс в JavaScript
hw_wired 24.01.2025
Массивы являются одной из фундаментальных структур данных в JavaScript, предоставляющей разработчикам мощный инструмент для хранения и управления упорядоченными наборами данных. Они позволяют хранить. . .
Чем отличаются HashMap и Hashtable в Java
hw_wired 24.01.2025
В мире разработки на Java существует множество инструментов для работы с коллекциями данных, и среди них особое место занимают структуры данных для хранения пар ключ-значение. HashMap и Hashtable. . .
Как конвертировать видео в GIF
hw_wired 24.01.2025
В современном мире анимированные изображения стали неотъемлемой частью цифровой коммуникации. Формат GIF (Graphics Interchange Format) представляет собой особый тип файлов, который позволяет. . .
Как скопировать текст в буфер обмена на JavaScript во всех браузерах
hw_wired 24.01.2025
Копирование текста в буфер обмена стало неотъемлемой частью современных веб-приложений, значительно улучшающей пользовательский опыт и упрощающей работу с контентом. В эпоху активного обмена. . .
Как скрыть клавиатуру на Android
hw_wired 24.01.2025
При разработке Android-приложений часто возникает необходимость управлять видимостью экранной клавиатуры для улучшения пользовательского опыта. Одним из наиболее эффективных способов контроля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru