2016-09-26 6 views
1

나는 foreach는 루프 라인으로 서버 라인에 클라이언트에서 문자열을 보내려고. 문자열에서 "\ n"을 제거하면 서버는 하나의 큰 문자열로 병합 된 문자열 묶음을받습니다. 나는 "\ n"을 덧붙여서 데이터를 문자열로 나눌 것이라고 생각했다.이 문자열은 readLine()으로 읽을 수있다. 나는 무엇을 놓쳤는가?QTcpSocket을 통해 문자열 줄을 보내고 읽는 방법?</p> <pre><code>foreach(QString s, stringlist) client.sendMessage(s); </code></pre> <p>그러나 클라이언트는 첫 번째 문자열을받습니다

내 클라이언트

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