【问题标题】:How to send and read string lines via QTcpSocket?如何通过 QTcpSocket 发送和读取字符串行?
【发布时间】:2017-02-03 19:49:41
【问题描述】:

我尝试在 foreach 循环中逐行将字符串从客户端发送到服务器:

foreach(QString s, stringlist)
   client.sendMessage(s);

但是客户端只接收到第一个字符串。当我从字符串中删除“\n”时,服务器会收到一堆字符串合并成一个大字符串。我认为添加“\n”会将数据划分为我可以使用readLine() 读取的字符串。我错过了什么?

我的客户

class cClient:public QTcpSocket
{
public:
    void sendMessage(QString text)
    {
        text = text + "\n";
        write(text.toUtf8());        
    }
};

和服务器:

class pServer:public QTcpServer
{
    Q_OBJECT
public:
    pServer()
    {
        connect(this,SIGNAL(newConnection()),SLOT(slotNewConnection()));
    }

public slots:
    void slotNewConnection()
    {
        QTcpSocket* c = nextPendingConnection();
        connect(c,SIGNAL(readyRead()),this, SLOT(readData()));
    }

    void readData()
    {
        QTcpSocket* conn = qobject_cast<QTcpSocket*>(sender());
        QString data = QString(conn->readLine());
    }
};

【问题讨论】:

    标签: qt qtcpsocket qtcpserver


    【解决方案1】:

    您当时可能收到不止一行,但只阅读了第一行。通过检查canReadLine 阅读尽可能多的行。类似的东西:

    void readData()
    {
        QTcpSocket* conn = qobject_cast<QTcpSocket*>(sender());
        QStringList list;
        while (conn->canReadLine())
        {
            QString data = QString(conn->readLine());
            list.append(data);
        }     
    }
    

    【讨论】:

    • 谢谢!这正是我错过的。现在一切正常!
    猜你喜欢
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 2020-08-16
    • 2010-11-22
    • 1970-01-01
    • 2013-02-21
    • 2017-01-07
    相关资源
    最近更新 更多