如何通过QTcpSocket发送和读取字符串行?

时间:2016-09-26 12:49:45

标签: qt qtcpsocket qtcpserver

我尝试在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());
    }
};

1 个答案:

答案 0 :(得分:3)

您当时可能会收到多行,但只能阅读第一行。通过canReadLine查看尽可能多的行。这样的事情:

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