linux - localsocket服务器未收到readyread信号

标签 linux qt linux-kernel

我有一个 QLocalserver,我可以在其中读取非 QT 客户端发送的数据。接收到一些按键事件后发送数据。这意味着如果我按某个键,数据将通过 localsocket 发送到服务器,我必须在我的服务器中执行一些操作。

现在有时会出现即使sendto的返回值为+ve值即成功,数据也没有到达服务器的情况。仅当按下任何其他键时才会收到数据,即使此后我没有将数据发送到套接字。

我正在读取所有字节,直到在readyread槽中的while循环中结束,但仍然不知道问题是什么。谁能帮我解决这个问题。这是否与就绪读信号生成或某些调度问题有关。

Ready读槽如下

void MainWindow::ReadyRead(void)
{
  char cmd[sizeof( struct Data)];
  struct Data *Rcv;
  while(ui->client->bytesAvailable())
  {
    ui->client->read(cmd, sizeof(struct Data));
    Rcv= ( struct Data *)cmd;
    CommandParser(Rcv);
  }
}

最佳答案

没有一些代码,很难清楚地说出什么问题,我有一些假设:

  1. 由于数据看起来很小,可能是套接字(客户端)正在缓冲数据达到特定数量,因此未发送。请参阅“Nagle”算法...
  2. 你的“readyRead”槽中有无限循环吗?这可能会导致接收数据时出现问题。

不过,如果有一段代码,我们将不胜感激。

关于linux - localsocket服务器未收到readyread信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26492330/

相关文章:

python - XmbTextListToTextProperty 结果代码 -2 : error during executing cv2. imshow 来自 shell 脚本的 .py 文件

qt - 如何在键盘上仅显示带有 qt 的数字

c++ - 使用Qt拖放: Knowing target application on hover - is it possible?

linux - Linux源码编译问题

linux-kernel - linux页面缓存刷新顺序

c - 处理用户空间和内核之间的buf

linux - 静态与动态链接冲突和重复

linux - 静态插入linux内核模块

Linux 内核 - 如何获取特定版本(直到 SUBLEVEL)

linux - 使用 ALSA [或 V4L2] 通过轮询读取麦克风数据