내가 QTcpServer 및 QTcpSocket를 사용하여 클라이언트/서버 기반 Qt는 응용 프로그램을 스트리밍 여러 데이터 클라이언트에서 서버 유형 + 데이터 전송, 나는 연결을하고 사이에 앞뒤로 일부 데이터를 보낼 관리 클라이언트 및 서버. 클라이언트는 서버 (문자열, INT, 파일 및 실시간 오디오 스트림)에 많은 종류의 데이터를 전송하고 내 서버에 있기 때문에 하나의 데이터 입력 SLOT (readyRead()) impliment :Qt는,
connect(socket, SIGNAL(readyRead()),this, SLOT(readyRead()));
내가 돈을 ' 이 모든 데이터를 구별하고 서버의 적절한 기능을 호출하는 방법을 알고 있습니다.
Example (in the server):
- if I receive string => call function showData(QString data);
- if I receive file => call function saveFile(QFile file);
- if I receive audio stream => play audio stream
- ...
SERVER : CLIENT
void Server::newClientConnection()
{
QTcpSocket *socket = server->nextPendingConnection();
connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
//...
}
void Server::readyRead()
{
QTcpSocket *clientSocket = qobject_cast<QTcpSocket *>(sender());
if (clientSocket == 0) {
return;
}
QDataStream in(clientSocket);
if (sizeMessageClient == 0)
{
if (clientSocket->bytesAvailable() < (int)sizeof(quint16)){
return;
}
in >> sizeMessageClient;
}
if (clientSocket->bytesAvailable() < sizeMessageClient) {
return;
}
sizeMessageClient = 0;
in >> data;
/*
I don't know the type of the received data !!
- if I receive string => call function showData(QString data);
- if I receive file => call function saveFile(QFile file);
- if I receive audio stream => play audio stream
- ...
*/
}
: 나는 완전한 솔루션을 찾고 있지 않다
Client::Client()
{
socket = new QTcpSocket(this);
connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
sizeMessageServer = 0;
}
void Client::readyRead()
{
QDataStream in(socket);
if (sizeMessageServer == 0)
{
if (socket->bytesAvailable() < (int)sizeof(quint16)) {
return;
}
in >> sizeMessageServer;
}
if (socket->bytesAvailable() < sizeMessageServer) {
return;
}
int messageReceived;
in >> messageReceived;
messageReceived = static_cast<int>(messageReceived);
sizeMessageServer = 0;
switch(messageReceived)
{
case 1:
qDebug() << "send a File";
sendFile();
break;
case 2:
qDebug() << "send a string data";
sendStringData();
break;
case 3:
qDebug() << "stream audio to the server";
streamAudioToServer();
break;
case n:
// ...
}
}
, 내가 찾고 있어요 모두가 올바른 방향으로 몇 가지 지침입니다 .
보인다. –
내가 어떻게 이런 일이 일어날 수 있는지 그물에 어떤 예를 찾을 수 없습니다 .. –
아주 최소한, 당신은 메시지의 유형과 값을 패키지에 다음 유형의 수신 엔드 스위치에 있습니다. –