簡體   English   中英

套接字服務器無法接收客戶端發送的消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM