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

In Qt socket write data is not reaching the server

本文关键字:数据 服务器 Qt 套接字      更新时间:2023-10-16

编写一个简单的应用程序,从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应用程序的字节数。

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

如果需要更多数据,请告诉我。

编辑:

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

2.在单个程序中创建Qtcpscoket

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

我不能留下评论,所以我会在这里写。您可以使用QIODevice函数bool QIODevice::waitForBytesWritten(int msecs) [virtual]而不是bool flush()。如果你的电脑应用程序停止,那么问题就出在第二次写入数据上。也可以检查函数flush()返回的值。

相关文章: