아마도 지나치게 야심을 가졌지 만 QLocalSockets 및 QTcpSocket을 통한 연결을 허용 할 수있는 서버 프로그램을 작성하려고합니다. 개념은 QLocalServer와 QTcpServer 모두가 새로운 연결을 수신와 '넥서스'객체를하는 것입니다 : 생성자 QIODevice에 대한 포인터를 취하는 서버 개체를 설정QIODevice를 기대하는 메소드에 QLocalSocket * 전달 *
Nexus::Nexus(QObject *parent)
: QObject(parent)
{
// Establish a QLocalServer to deal with local connection requests:
localServer = new QLocalServer;
connect(localServer, SIGNAL(newConnection()),
this, SLOT(newLocalConnection()));
localServer -> listen("CalculationServer");
// Establish a UDP socket to deal with discovery requests:
udpServer = new QUdpSocket(this);
udpServer -> bind(QHostAddress::Any, SERVER_DISCOVERY_PORT);
connect(udpServer, SIGNAL(readyRead()),
this, SLOT(beDiscovered()));
// Establish a QTcpServer to deal with remote connection requests:
tcpServer = new QTcpServer;
connect(tcpServer, SIGNAL(newConnection()),
this, SLOT(newTcpConnection()));
tcpServer -> listen(QHostAddress::Any, SERVER_COMMAND_PORT);
}
... 그리고 별도의 슬롯. 이론적으로이 은 QLocalSocket과 QTcpSocket이 모두 QIODevice를 상속하기 때문에이 작동해야합니다. 여기에 예를 들어 newLocalConnection 슬롯입니다 :
void Nexus::newLocalConnection()
{
// Create a new CalculationServer connected to the newly-created local socket:
serverList.append(new CalculationServer(localServer -> nextPendingConnection()));
// We don't allow more than one local connection, so stop listening on the server:
localServer -> close();
}
문제는이 오류주고, 컴파일되지 것입니다 : 유형이 명확 하지 관련이없는가 가리키는 지금
error C2664: 'CalculationServer::CalculationServer(QIODevice *,QObject *)' : cannot convert parameter 1 from 'QLocalSocket *' to 'QIODevice *' 1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
및 다른 곳에서 내 코드에서 내가 좋아하는 행동에 전혀 문제가 없습니다 :
QLocalSocket *socket = new QLocalSocket;
QIODevice *server = new QIODevice;
server = socket;
... 그래서 컴파일러는 t에 문제가있는 사람이 왜 말해 줄 수 그의? 생성자가 QLocalServer *를 수락 할 수있는 방법이 있습니까? 생성자가 무효 포인터와 추가 변수를 가져 와서 무엇이 전송되는지 알려주는 핵 옵션이 있다고 가정하면 QLocalSocket 또는 QTcpSocket에 대한 void 포인터를 다시 작성할 수 있지만 reinterpret_cast를 사용하는 것이 불편합니다. C++ 다형성의 직접적인 비트가되어야하는 것처럼 보입니다.
감사합니다,
스티븐.
맙소사 저, 그래, 고쳐줍니다. 고맙습니다. 나는 그것이 qlocalserver.h에서 참조되었다고 추측했지만 분명히 그렇지 않다고 생각한다. –