【问题标题】:QT QTcpSocket not receiving any dataQT QTcpSocket没有收到任何数据
【发布时间】:2014-07-05 14:35:05
【问题描述】:

我正在 Qt Creator 中编写一个 C++ 项目,我有一个 QTcpSocket。它连接正常,但bytesAvailable() 始终是zero,即使我从我用 C# 编写的另一个项目向它发送数据。我测试了 C# 项目实际上是使用另一个 C# 项目发送数据,并且它正在正确发送数据。这是我的代码:

#include <QTcpSocket>
#include <QDebug>

void main()
{
    QTcpSocket *tcpSocket=new QTcpSocket();
    tcpSocket->connectToHost("127.0.0.1",8080);
    while(true)
    {
        if(tcpSocket->bytesAvailable()!=0)
        {
            qDebug()<<tcpSocket<-bytesAvailable();
        }
    }
    tcpSocket->disconnectFromHost();
}

谢谢。 :D

【问题讨论】:

标签: c# c++ qt sockets networking


【解决方案1】:

首先,所有 Qt 程序都需要一个应用程序对象来设置框架的许多内部结构。插入以下内容作为您的第一条语句:

QCoreApplication app(argc, argv);

其次,Qt中网络编程的普通方式是使用事件处理系统。由于您似乎不需要它,因此您应该改用阻塞函数,以便操作系统有机会告诉您的应用程序数据已到达。

在尝试从套接字读取之前,您必须使用waitForReadyRead()

阅读文档以获取有关阻塞和非阻塞 API 函数的更多详细信息。

【讨论】:

    【解决方案2】:

    你应该换行

    if(tcpSocket-&gt;bytesAvailable!=0)

    if(tcpSocket-&gt;bytesAvailable()!=0)

    【讨论】:

    • 感谢 IGHOR,但是 QTcpSocket 仍然没有接收到数据。
    • 把waitForConnected()放在connectToHost和qDebug()之后state()errorString();什么是输出?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多