Название: QTextStream и ее использоование с QTcpSocket
Отправлено: t.key от Март 25, 2010, 01:49
Проблема передаче текста в QTextStream. Даже не понятно прибыл ли мой текст. Получаю ее пустым. #include <iostream> #include <QTcpServer> #include <QTcpSocket> #include <QTextStream> #include <QHostAddress>
using namespace std;
int client(){ QTcpSocket socket; socket.connectToHost(QHostAddress::LocalHost, 6112); if (socket.state() != QAbstractSocket::ConnectingState){ cerr << "!:client not connecting ...\n"; return 1; }
if (!socket.waitForConnected()){ cerr << "!:client not connected ...\n"; return 1; } else cout << "::client connection succeed ..\n";
QTextStream stream(&socket); stream.setCodec("UTF-8");
stream << "hello";
return 0; }
int server(){ QTcpServer server; if (!server.listen(QHostAddress::Any, 6112)){ cerr << "!:server not listening ...\n"; return 1; }
QTcpSocket socket; while (!server.waitForNewConnection(1000)); if (!socket.setSocketDescriptor(server.socketDescriptor())){ cerr << "!:server not connected ...\n"; return 1; } else cout << "::server socket state " << socket.state() << " ...\n";
QTextStream stream(&socket); stream.setCodec("UTF-8");
QString str; str = stream.readLine(); /* Пытался использовать stream >> str; тот же эффект. */
cout << "::" << str.toStdString() << endl;
return 0; }
int main(){ int a; cin >> a; if (a == 0) return server(); else if (a == 1) return client(); else return 0; }
Укажите ошибку плиз.
Название: Re: QTextStream и ее использоование с QTcpSocket
Отправлено: pastor от Март 25, 2010, 02:28
Добавь QCoreApplication app(argc, argv); C++ (Qt) int main(int argc, char **argv){ QCoreApplication app(argc, argv); int a; cin >> a; if (a == 0) return server(); else if (a == 1) return client(); else return 0; }
И добавь waitForReadyRead() C++ (Qt) int server(){ ..... else cout << "::server socket state " << socket.state() << " ...\n"; if (!socket.waitForReadyRead()) return 1; QTextStream stream(&socket); .... }
Но лучше перейти на асинхронный режим работы (signal/slot), чтоюы не блокировать главный поток. Ознакомся с документацией по QAbstractSocket в ассистанте.
Название: Re: QTextStream и ее использоование с QTcpSocket
Отправлено: t.key от Март 25, 2010, 07:51
Внес ваши изменения, сервер застревает на !socket.waitForReadyRead(). Это очень сильно упрощенный код, часть GUI программы, заняти гланого потока не проблема. Я подумал, кокда заработает здесь, применю это там(SIGNAL, SLOT). Меня интересует как связать QTextStream и QTcpSocket. В книге и QAssistant'е ниче толкового не нашел.
Название: Re: QTextStream и ее использоование с QTcpSocket
Отправлено: pastor от Март 25, 2010, 11:53
Внес ваши изменения, сервер застревает на !socket.waitForReadyRead().
Значит данные клиент не получил. Еще изменения: C++ (Qt) int client(){ .... QTextStream stream(&socket); stream.setCodec("UTF-8"); stream << "hello"; stream.flush(); socket.disconnectFromHost(); socket.waitForDisconnected(); return 0; }
Запускаем сначала сервер, потом клиент под отладчиком. Смотрим, думаем )
Название: Re: QTextStream и ее использоование с QTcpSocket
Отправлено: t.key от Март 26, 2010, 03:16
Мое новое добавление: cout << "::stream status " << stream.status() << endl;
Для клиента 0 (QTextStream::Ok 0 The text stream is operating normally.), для сервера 1 (QTextStream::ReadPastEnd 1 The text stream has read past the end of the data in the underlying device.). Значит текст все же дошел. Кажись он както не так считывает.
|