[英]socket server could not receive the message send by client
我在 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服務器收到消息。
socket服務器是別人開發的,在其他類似項目中使用過很多次,所以服務器肯定沒問題。 問題是我的客戶端代碼。 但我不知道我的錯誤在哪里。
在文件頂部添加#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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.