我在 Windows 7 中使用 Qt creator 5.5.1。
编译器是VC 2010 32Bits。
我写了一个套接字客户端。可以正常连接,但无法将消息发送到服务器。
调试程序没有报错
char flash_result_data[] ={'0', '0', '0', '0', '0', '0', '0', '0'};
void MainWindow::on_pushBtn_LoadCfg_clicked()
{
if (tcpClient == NULL)
{
tcpClient = new QTcpSocket;
tcpClient->connectToHost(ui->txtIPServer->text(),ui->txtPortServer->text().toInt());
Sleep(1000);
QObject::connect(tcpClient,SIGNAL(readyRead()),this, SLOT(readMessageFromTCPServer()));
QTimer::singleShot(100000, this, SLOT(fun_timer()));
}
}
void MainWindow::readMessageFromTCPServer()
{
QObject::connect(this, SIGNAL( MySignal() ),this, SLOT( MySlot() ) );
std::string r="start";
QByteArray qba;
qba= tcpClient->readAll();
if (qba.contains(r.c_str()))
{
emit MySignal();
}
return;
}
void MainWindow::fun_timer()
{
int flash_result_data_size = sizeof(flash_result_data) / sizeof(char);
std::string flash_result_data_str = convertToString(flash_result_data, flash_result_data_size);
tcpClient->write(flash_result_data_str.c_str(),strlen((flash_result_data_str.c_str())));
}
当我调试程序时,套接字可以正常连接。运行此行后: tcpClient->write(flash_result_data_str.c_str(),strlen((flash_result_data_str.c_str())));
,没有错误发生,但是没有从套接字服务器收到消息.
socket服务器是别人开发的,在其他类似项目中多次使用,所以服务器肯定没问题。问题是我的客户端代码。但是我不知道我的错误在哪里。
最佳答案
在文件顶部添加 #include<QDebug>
.
在 MainWindow 类头文件中,添加 QByteArray qba;
作为私有(private)成员变量。
将您的 readMessageFromTCPServer 更改为:
void MainWindow::readMessageFromTCPServer()
{
QObject::connect(this, SIGNAL( MySignal() ),this, SLOT( MySlot() ) );
std::string r="start";
qba.append(tcpClient->readAll());
qDebug() << "BUFFER:" << QString::fromUtf8(qba);
if (qba.contains(r.c_str()))
{
emit MySignal();
}
return;
}
看qDebug
输出以查看如何接收数据。
另外,我认为这种联系是没有必要的QObject::connect(this, SIGNAL( MySignal() ),this, SLOT( MySlot() ) );
.
你可以调用MySlot();
因为信号和槽都是同一个对象的一部分。
if (qba.contains(r.c_str()))
{
MySlot();
}
关于c++ - 套接字服务器无法接收客户端发送的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59173753/