Я пытаюсь реализовать двунаправленную программу клиент-сервер, в которой клиенты и серверы могут передавать друг другу сериализованные объекты. Я пытаюсь сделать это, используя Qt (QTcpSocket и QTcpServer). Я реализовывал подобные программы на java, но не могу понять, как это сделать с помощью Qt. Я просмотрел примеры fortune client и fortune server... но из того, что я вижу, клиент просто подает сигнал серверу, а сервер посылает ему некоторые данные. Мне нужно, чтобы клиент и сервер посылали объекты туда и обратно. Я не ищу готового решения, все, что мне нужно, это подсказка в правильном направлении".
Я написал код, который принимает соединение, но не принимает данные.
SERVER
этот класс является сервером; он должен принимать соединение и выводить размер буфера, который отправляется. Однако он выводит 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()<readBufferSize();
}
CLIENT
Этот класс является клиентом. Он должен отправить строку 'hello'. Он отправляет ее успешно (насколько мне известно)
#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()<write(array);
}
Пожалуйста, скажите мне, что я делаю неправильно, или расскажите мне общую логику создания того, что я хочу в Qt.