Пишу тест в котором тестирую подключение и передачу/получение данных через QLocalSocket/QLocalServer в создаваемом мною потоке должен получить сообщение на один fifo и отправить через другой.
Функция читалка:
QString CConnLib::Read(const QString& host, unsigned int timeOut) {
QLocalSocket* socket = new QLocalSocket();
socket->connectToServer(host,QIODevice::ReadWrite);
if(socket->waitForConnected(timeOut))
{
if(socket->waitForReadyRead(timeOut))
{
QString answer;
quint16 blockSize=0;
QDataStream in(socket);
in.setVersion(QDataStream::Qt_4_0);
if(blockSize==0) {
if(socket->bytesAvailable()<(int)sizeof(quint16)) return QString("Read error1.") ;
in>>blockSize;
} else {
if(socket->bytesAvailable()<(int)blockSize) return QString("Read error2.");
}
in>>answer;
return answer;
}
else
{
return QString("Read error3.");
}
}
else
{
return QString("Connection error!");
}
}
Функция sender:
int CConnLib::Send(const QString& host,QString message,
unsigned int timeOut) {
QLocalServer server;
if(server.listen(host))
{
if(server.waitForNewConnection(timeOut))
{
QByteArray block;
QDataStream out(&block,QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out<<(quint16)0;
out << message.toStdString().c_str();
out.device()->seek(0);
out<<(quint16)(block.size()-sizeof(quint16));
QLocalSocket* conn = server.nextPendingConnection();
QObject::connect(conn, SIGNAL(disconnected()),
conn, SLOT(deleteLater()));
conn->write(block);
conn->flush();
conn->disconnectFromServer();
return 0;
}
else
{
return -1;
}
}
else
{
return -2;
}
}
Код run() потока:
void MyThread1::run() {
CConnLib l;
qDebug("Client's running...\n");
QString data;
data = l.Read("id",5000);
qDebug(data.toStdString().c_str());
l.Send("report",data,5000);
qDebug("Client's stoping...\n");
}
Код теста:
void ConnectorTest::ReadWriteTest()
{
MyThread1 client;
client.start();
CConnLib lib;
qDebug("Server's running...\n");
QCOMPARE(lib.Send(QString("id"),"Hello, world!",5000),0);
QCOMPARE(lib.Read(QString("report"),5000),QString("Hello, world!"));
while(client.isRunning()==true){};
qDebug("server's stoping...\n");
qDebug("that's all...");
}
Помогите кто чем может!! Разбираюсь недавно и совсем в тупик заехал: каждый раз тест ведет себя по разному.Но в общем кажется, что в потоке функция read не ждет соединения. Заранее спасибо!