2016-09-26 3 views
1

Я пытаюсь отправить строки от клиента к серверу построчно в цикле Еогеаспа:Как отправлять и читать строки строки через QTcpSocket?

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()); 
    } 
}; 

ответ

3

Вы, вероятно, получают больше, чем одну строку в то время, но только чтение первой. Прочитайте как можно больше строк, установив canReadLine. Что-то вроде этого:

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

Спасибо! Это именно то, чего я пропустил. Теперь все работает! – lena

Смежные вопросы