0
自分自身に「接続」してデータを送信する簡単なプログラムを作成しています。それはQTcpServerを起動して、入ってくる接続を待ちます。私は別の機能を持っていますが、これはローカルホストとポートでこのサーバーに接続しようとします。これはコマンドプロンプトでTelnetを開いたときに動作しますが、実際のプログラムでは動作します。QT QTcpServerが時間内に接続していません
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
server = new QTcpServer(this);
//Initialize and start the server
connect(server, SIGNAL(newConnection()), this, SLOT(newConnection()));
if (!server->listen(QHostAddress::Any, 3665))
{
qDebug() << "Server failed to start!";
}
else
{
qDebug() << "Server started";
}
//Try to connect to the server
connectToServer("127.0.0.1", qint16(3665));
}
MainWindow::~MainWindow()
{
delete server;
delete ui;
}
void MainWindow::connectToServer(QString host, qint16 port)
{
qDebug() << "Connecting to " + host + " at port " + QString::number(port);
QTcpSocket socket;
socket.connectToHost(host, port);
if (!socket.waitForConnected(5000))
{
qDebug() << socket.errorString();
}
while (socket.bytesAvailable() < (int)sizeof(quint16))
{
if (!socket.waitForReadyRead(5000))
{
qDebug() << socket.errorString();
}
}
quint16 blockSize;
QDataStream in(&socket);
in.setVersion(QDataStream::Qt_5_5);
in >> blockSize;
while (socket.bytesAvailable() < blockSize)
{
if (!socket.waitForReadyRead(5000))
{
qDebug() << socket.errorString();
}
}
QString fortune;
in >> fortune;
qDebug() << fortune;
}
void MainWindow::newConnection()
{
qDebug() << "A connection has been found.";
QTcpSocket *socket = server->nextPendingConnection();
socket->write("hello client\r\n");
socket->flush();
socket->waitForBytesWritten(5000);
socket->close();
}
@KubaOber大丈夫です!私はそれに取り組んでいきます。プログラムにエラーが発生したときにリターンを追加したときに私は困惑し、connect関数が終了した後も新しい接続があったことが検出されました。 –
コールをブロックする代わりにイベントを使用する必要があります(waitFor ...)。例については、https://www.ics.com/files/qtdocs/network-http.htmlを参照してください。 – o9000
確かにシグナルは私が意味していたものです:) – o9000