Estoy intentando implementar un programa cliente-servidor bidireccional, donde los clientes y servidores pueden pasar objetos serializados entre ellos. Estoy tratando de hacer esto usando Qt (QTcpSocket y QTcpServer). He implementado programas como este en Java, pero no puedo encontrar la manera de hacerlo usando Qt. He comprobado los ejemplos fortune client y fortune server ... pero por lo que puedo ver, el cliente simplemente está señalando el servidor y el servidor le envía algunos datos. Necesito que el cliente y el servidor envíen objetos de un lado a otro. No estoy buscando una solución completa, todo lo que busco es una guía en la dirección correcta.Servidor de cliente bidireccional Qt utilizando QTcpSocket y QTcpServer
Escribí un código que acepta una conexión, pero no acepta los datos.
SERVIDOR
esta clase es el servidor; debería aceptar una conexión y generar el tamaño del búfer que se está enviando. Sin embargo, está emitiendo 0
#include "comms.h"
Comms::Comms(QString hostIP, quint16 hostPort)
{
server = new QTcpServer(this);
hostAddress.setAddress(hostIP);
this->hostPort = hostPort;
}
void Comms::attemptConnection(){
connect(server, SIGNAL(newConnection()), this, SLOT(connectionAccepted()));
//socket = server->nextPendingConnection();
server->listen(hostAddress,hostPort);
//receivedData = socket->readAll();
}
void Comms::connectionAccepted(){
qDebug()<<"Connected";
socket = new QTcpSocket(server->nextPendingConnection());
char* rec = new char[socket->readBufferSize()];
qDebug()<<socket->readBufferSize();
}
CLIENTE
Esta clase es el cliente. Debería estar enviando la cadena 'hola'. Se envía con éxito (que yo sepa)
#include "toplevelcomms.h"
#include "stdio.h"
TopLevelComms::TopLevelComms(QString hostIP, quint16 hostPort)
{
tcpSocket = new QTcpSocket();
hostAddress.setAddress(hostIP);
this->hostPort = hostPort;
}
void TopLevelComms::connect(){
tcpSocket->connectToHost(hostAddress,hostPort,QIODevice::ReadWrite);
//tcpSocket->waitForConnected(1);
QString string = "Hello";
QByteArray array;
array.append(string);
qDebug()<<tcpSocket->write(array);
}
Por favor, dime lo que estoy haciendo mal, o me dice la lógica general de establecer lo que quiero en Qt.
Muchas gracias, pude enviar datos a través del socket.Sin embargo, sigo obteniendo un tamaño de buffer de 0 por alguna razón. ¿Alguna idea de por qué? – PTBG
De los documentos "Un tamaño de almacenamiento intermedio de lectura de 0 (valor predeterminado) significa que el almacenamiento intermedio no tiene límite de tamaño, lo que garantiza que no se pierda ningún dato". Por lo tanto, no da ninguna indicación sobre el contenido real. Deberías usar 'socket-> size()' o 'socket-> bytesAvailable()' –