Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用QtUdpSocket的简单通信c/s应用程序_C++_Qt - Fatal编程技术网

C++ 使用QtUdpSocket的简单通信c/s应用程序

C++ 使用QtUdpSocket的简单通信c/s应用程序,c++,qt,C++,Qt,我是Qt的初学者。我想使用QUdpSocket编写一个没有GUI的服务器应用程序。我已经编写了客户端GUI应用程序和服务器GUI应用程序。它们工作得很好。但是没有GUI的服务器工作得不好 我尝试使用while(true)循环使应用程序运行,因为我认为在代码“return a.exec()”后,应用程序将停止。但我的服务器应用程序无法运行 这是我的密码: 具有GUI的客户端: Widget::Widget(QWidget*parent): QWidget(母公司), ui(新ui::小部件) {

我是Qt的初学者。我想使用QUdpSocket编写一个没有GUI的服务器应用程序。我已经编写了客户端GUI应用程序和服务器GUI应用程序。它们工作得很好。但是没有GUI的服务器工作得不好

我尝试使用while(true)循环使应用程序运行,因为我认为在代码“return a.exec()”后,应用程序将停止。但我的服务器应用程序无法运行

这是我的密码: 具有GUI的客户端:

Widget::Widget(QWidget*parent):
QWidget(母公司),
ui(新ui::小部件)
{
用户界面->设置用户界面(此);
插座=新的QUdpSocket(本);
//单击“向服务器发送消息”按钮
连接(此->用户界面->按钮,信号(单击()),此,插槽(发送());
}
小部件::~Widget()
{
删除用户界面;
}
//发送消息
void小部件::send()
{
QByteArray msg=“client2:hello world”;
socket->writeDatagram(msg.data(),msg.size(),QHostAddress::LocalHost,6666);
}
客户端应用程序和带有GUI应用程序的服务器可以很好地工作。但是当我尝试制作一个没有GUI的服务器应用程序时,我发现服务器无法从客户端获取消息。 这是我的server.cpp,没有GUI:

#包括“server.h”
服务器::服务器(QObject*parent):QObject(parent)
{
插座=新的QUdpSocket(本);
数组=新的QByteArray();
套接字->绑定(QHostAddress::LocalHost,6666,QAbstractSocket::DontSharedAddress);
socket->open(QIODevice::ReadWrite);//如果没有此行,应用程序将显示:
//'QIOBevice::read(QUdpSocket):设备未打开',但它仍然可以从客户端获取消息。
连接(套接字、信号(readyRead())、此、插槽(printMsg());
}
void服务器::printMsg()
{
if(socket->hasPendingDatagrams())//我以前忘了这一行。
{
数组->调整大小(套接字->pendingDatagramSize());
套接字->读取数据报(数组->数据(),数组->大小());
socket->readAll();

qDebug()您的main中不应该有
while(true)
,否则,您实际上只是冻结了线程和Qt应用程序。这正是
app.exec();
的目的,它将在应用程序关闭时返回(更多详细信息)

如果您的应用程序(带或不带GUI)在调用
app.exec()

  • 您正在手动关闭它,例如使用
    qApp->quit();
  • 您正在强制退出,例如使用
    exit(1);
  • 致命错误或异常会提前结束应用程序

不要以图像形式发布代码。您应该以图像形式发布代码,并将其缩小到一个可以重现您的问题的范围。谢谢。我在编辑问题时发现了错误。我已修复了它。非常感谢。现在我理解了app.exec()之后的app.exec(),应用程序没有停止,信号和插槽仍在工作。我解决了我的问题。顺便问一下,你能告诉我如何使“app.exec()”像你一样明显吗?非常感谢。当然!你的“app.exec()”的背景色是什么意思'类似于灰色。很明显,它是代码。哦,当然,您只需将您的
代码
用反勾括起来,即,该字符:`