套接字服务器无法接收客户端发送的消息

时间:2019-12-04 10:22:26

标签: c++ qt

我在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())));之后,不会发生任何错误,但是没有收到来自套接字服务器的消息。

套接字服务器是由他人开发的,并且在其他类似项目中已多次使用,因此服务器必须可以。问题是我的客户代码。但是我不知道我的错误在哪里。

1 个答案:

答案 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();
  }