gpt4 book ai didi

c++ - Qt - QTcpserver 工作不正常

转载 作者:可可西里 更新时间:2023-11-01 10:28:34 30 4
gpt4 key购买 nike

我正在做一个简单的服务器-客户端应用程序。但是,客户端从服务器端获得了一些未定义的行为。找回错误码后,才知道是服务器断开了连接。

这是服务端main.cpp

#include <QApplication>
#include <QFile>
#include <QFileDialog>
#include <QMessageBox>
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>

class MyMessageBox:public QMessageBox
{
public:
MyMessageBox(std::string message,QWidget *parent=0):QMessageBox(QMessageBox::NoIcon,QString("ErrorMessage"),QString(message.c_str()),QMessageBox::Ok,parent,Qt::Widget)
{
}
};

class My_Server:public QTcpServer
{
Q_OBJECT
public:
My_Server();
public slots:
void on_Connection();
};

My_Server::My_Server():QTcpServer()
{
connect(this,SIGNAL(newConnection()),this,SLOT(on_Connection()));
}

void My_Server::on_Connection()
{
MyMessageBox mm("Connection Established");
mm.exec();
QTcpSocket * my_Socket = this->nextPendingConnection();

my_Socket->waitForBytesWritten(30000);

QByteArray block("Hi all");

my_Socket->write(block);
}

int main(int argc,char * argv[])
{
QApplication app(argc,argv);

My_Server tcp_Server;
tcp_Server.listen(QHostAddress("127.0.0.1"),15000);

return app.exec();
}

#include "main.moc"

这是客户端main.cpp

#include <QApplication>
#include <QDataStream>
#include <QFile>
#include <QFileDialog>
#include <QHostAddress>
#include <QMessageBox>
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>

class MyMessageBox:public QMessageBox
{
public:
MyMessageBox(std::string message,QWidget *parent=0):QMessageBox(QMessageBox::NoIcon,QString("ErrorMessage"),QString(message.c_str()),QMessageBox::Ok,parent,Qt::Widget)
{
}
};

int main(int argc,char * argv[])
{
QApplication app(argc,argv);

QTcpSocket client_Socket;

client_Socket.connectToHost(QHostAddress("127.0.0.1"),15000);

QDataStream in(&client_Socket);
in.setVersion(QDataStream::Qt_4_7);

client_Socket.waitForReadyRead(30000);

char buf[100]={'\0'};
client_Socket.read(buf,(quint16)sizeof(buf));
QString nothing(buf);

MyMessageBox mm((QString("++ ")+nothing+" ++").toStdString());
mm.exec();

MyMessageBox mn(QString::number(client_Socket.error()).toStdString());
mn.exec();

return app.exec();
}

这是pro文件(两者相同)

TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .

# Input
SOURCES += main.cpp

QT += network

我无法找出服务器端断开连接的原因。如果有人帮助我找出原因,我将感谢他们。

注意:我在windows平台下使用的是Qt-4.7.2

最佳答案

连接正在关闭,因为您的服务器在发送该消息后立即退出。

这可能是因为您正在使用 QApplication,但实际上并没有持久的 GUI 小部件。因此,一旦您完成第一个对话框的显示,事件循环就会立即停止。

试试:

  • 改为在服务器端使用 QCoreApplication。 (并且不要启动消息框 - QCoreApplication 不允许使用 GUI。)
  • 为您的服务器提供一个负责启动 TCP 服务器的主要小部件。

关于c++ - Qt - QTcpserver 工作不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6476392/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com