我在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())));
之后,不会发生任何错误,但是没有收到来自套接字服务器的消息。
套接字服务器是由他人开发的,并且在其他类似项目中已多次使用,因此服务器必须可以。问题是我的客户代码。但是我不知道我的错误在哪里。
答案 0 :(得分:0)
在文件顶部添加#include<QDebug>
。
在MainWindow类头文件中,添加QByteArray qba;
作为私有成员变量。
将您的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();
}