여러 스레드를 처리 할 수있는 서버가 있습니다. 서버가 시작하고 청취하지만 들어오는 연결이 보류 중일 때 에코하는 데 문제가 있습니다.다중 스레드 Qt 서버가 클라이언트가 보낸 데이터를 반향하지 않습니다.
텔넷을 사용하여 소켓을 열고 데이터를 서버로 보내고 있습니다. 그러나 서버는 수신 대기 중임을 표시하지만 텔넷을 통해 입력 한 데이터를 반향 출력하지 않으며 수신 연결이 있음을 나타냅니다. 나는 개인 네트워크를 위해 Windows 방화벽을 차단하고 여전히 ... 아무것도하지 않습니다.
또한 서버 오류 문자열에 유용한 정보가 있는지 살펴 보았지만 모두 공백 문자열입니다.
이것은 나에게 완전한 신비이며, 누군가 건설적인 메모가 있다면 크게 감사 할 것입니다. 스레드 및 서버 코드는 다음과 같습니다.
server.cpp
#include "myserver.h"
MyServer::MyServer(QObject *parent) :
QTcpServer(parent)
{
}
void MyServer::StartServer()
{
if(!this->listen(QHostAddress::Any,1234))
{
qDebug() << "Could not start server";
}
else
{
qDebug() << "Listening...";
}
}
void MyServer::incomingConnection(int socketDescriptor)
{
qDebug() << socketDescriptor << " Connecting...";
MyThread *thread = new MyThread(socketDescriptor,this);
connect(thread, SIGNAL(finished()),thread, SLOT(deleteLater()));
thread->start();
}
thread.cpp 사용하는 Qt는 버전
#include "mythread.h"
MyThread::MyThread(int ID, QObject *parent) :
QThread(parent)
{ this->socketDescriptor = ID;
}
void MyThread::run()
{
qDebug() << socket->errorString();
//thread starts here
qDebug() << socketDescriptor << " Starting thread";
socket = new QTcpSocket();
if(!socket->setSocketDescriptor(this->socketDescriptor))
{
emit error(socket->error());
return;
}
connect(socket,SIGNAL(readyRead()),this,SLOT(readyRead()),Qt::DirectConnection);
connect(socket,SIGNAL(disconnected()),this,SLOT(disconnected()),Qt::DirectConnection);
qDebug() << socketDescriptor << " Client Connected";
exec();
}
void MyThread::readyRead()
{
QByteArray Data = socket->readAll();
qDebug() << socketDescriptor << " Data in: " << Data;
socket->write(Data);
}
void MyThread::disconnected()
{
qDebug() << socketDescriptor << " Disconnected";
socket->deleteLater();
exit(0);
}
incomingConnection - Qt 5 당신이'server.h'에서'Q_OBJECT' 매크로가 있습니까 : 다음 링크에서보세요? – Nejat
네, 가지고 있습니다. – MrPickles