Есть клиент (наслденик QTcpSocket) , в нем реализованы функции запроса к серверу :
client::client(QWidget *parent) :
QWidget(parent)
{
socket = new QTcpSocket(this);
this->setSocketConnections();
connect(this->connectButton,SIGNAL(clicked()),this,SLOT(connectToServer()));
}
void client::setSocketConnections()
{
connect(socket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(displayError(QAbstractSocket::SocketError)));
connect(socket,SIGNAL(connected()),this,SLOT(readTask()));
}
void client::connectToServer()
{
netxBlockSize=0;
serverIp = ipLineEdit->text();
serverPort = portLineEdit->text().toInt();
socket->abort();
socket->connectToHost(serverIp,serverPort);
}
void client::readTask()
{
QByteArray block;
QDataStream out(&block,QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_6);
out << quint16(0) << 10;
out.device()->seek(0);
out << quint16 (block.size() - sizeof(quint16));
socket->write(block);
}
Сервер от QTcpServer :
server::server(QObject *parent) :
QTcpServer(parent)
{
connectToDB();
QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();
for (int i = 0; i < ipAddressesList.size(); ++i) {
if (ipAddressesList.at(i) != QHostAddress::LocalHost &&
ipAddressesList.at(i).toIPv4Address()) {
this->listen(ipAddressesList.at(i),27015);
break;
}
}
if (this->serverAddress().isNull())
this->listen(QHostAddress::LocalHost,27015);
}
void server::incomingConnection(int socketDescriptor)
{
ClientThread * thread= new ClientThread(socketDescriptor,colors,specifications, this);
connect(thread,SIGNAL(finished()),thread,SLOT(deleteLater()));
thread->start();
}
И клиентский поток от QThread :
ClientThread::ClientThread(int socketDescriptor,
const QMap <int, QString> & colors,
const QMap < int , QPair <QString , QString> > & specification,
QObject *parent ) :
socketDescriptor(socketDescriptor),
colors(colors),
specification(specification),
QThread(parent)
{
nextBlockSize = 0;
}
void ClientThread::Run()
{
socket = new QTcpSocket();
connect(socket,SIGNAL(readyRead()),this,SLOT(start()));
socket->setSocketDescriptor(socketDescriptor);
qDebug() << "HAHA";
socket->disconnectFromHost();
socket->waitForDisconnected();
}
Первый раз пишу клиент/сервер. Но почему-то у меня не запускается поток, т.е. получается что сокет не генирирует сигнал readyRead? А почему, ведь данные приходят от клиента..нет ?
Сообщение отредактировал Andrewshkovskii - 15.5.2010, 19:34