2016-09-26 13 views
1

私は、foreachループでラインにより、サーバ回線にクライアントから文字列を送信しよう:QTcpSocket経由で文字列を送信して読み込む方法は?

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

しかし、クライアントは、最初の文字列を受け取ります。文字列から "\ n"を削除すると、サーバーは1つの大きな文字列にまとめられた一連の文字列を受け取ります。私は "\ 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

関連する問題