在Qt套接字中,写入数据未到达服务器

时间:2014-10-16 10:11:28

标签: android c++ qt sockets

编写一个简单的应用程序,以便从PC Qt应用程序与Android设备进行通信。

在我的应用程序首次启动时,成功连接到Android应用程序。

我的信号:

connect(socket, SIGNAL(connected()),this, SLOT(connected()));
connect(socket, SIGNAL(readyRead()),this, SLOT(readyRead()));

void MyApp::connected()
{
    qDebug() << "connected...";
    socket->write("Init Connection \n");
    socket->flush();
}

void MyApp::readyRead()
{
    QString readData;
    qDebug() << "reading...";

    while(socket->bytesAvailable())
        readData= socket->readAll();

    qDebug()<<"Read Finished";

    if(socket->isWritable())
    {
        qDebug()<<"Yes Writable";
        socket->write("New Data");
        socket->flush();

    }
    else
        qDebug()<<"No Writable"; 
}

connected方法socket->write成功且Android应用程序能够读取数据,但在readyRead中,socket->write返回写入但未到达的字节数android app。

注意:在应用程序关闭或套接字关闭时,将在Android应用程序中运行的服务器端读取数据。

告诉我是否需要更多数据。

编辑:

1.在平板电脑和qt pc应用程序上运行的Android应用程序。两者都在同一网络(Intranet)上运行。

2.在一个程序中处理Qtcpscoket

3.在Android应用上处理ServerSocket,在Qt app上在socket>connectToHost(server_ip,portNo,QIODevice::ReadWrite);处理 调用onConnected方法。随后在Android应用程序中读取socket->write("Init Connection \n");

1 个答案:

答案 0 :(得分:0)

我不能发表评论,所以我会写在这里。您可以使用QIODevice函数bool QIODevice::waitForBytesWritten(int msecs) [virtual]代替bool flush()。如果您的PC应用程序停止,则问题在于第二次写入您的数据。或者,您可以检查函数flush()返回的值。