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

标签 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()))); ,没有错误发生,但是没有从套接字服务器收到消息.

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/

相关文章:

c++ - NSUserNotificationCenter defaultUserNotificationCenter 在 Qt 应用程序中返回 null

c++ - 'chrono' 库输出错误

c++ - Makefile: 没有那个文件或目录

c++ - 为进程添加权限

qt - qml 文本字段中的换行符,文本属性不起作用

c++ - QCamera 获取分辨率和原始帧

c++ - 要不要使用事件对象?

c++ - 诊断神秘的 WM_PAINT 消息

macos - Mac OS 10.9 上的 QMetaObject::changeGuard 崩溃

qt - QLayout 可以隐藏而不是调整 QWidget 的大小吗?