Próbuję zaimplementować dwukierunkowy program klient-serwer, w którym klienci i serwery mogą przekazywać między sobą serializowane obiekty. Próbuję to zrobić za pomocą Qt (QTcpSocket i QTcpServer). Zaimplementowałem takie programy w Javie, ale nie mogę wymyślić, jak to zrobić za pomocą Qt. Sprawdziłem przykłady fortune client i fortune server ... ale z tego, co widzę, klient po prostu sygnalizuje serwer, a serwer przesyła mu trochę danych. Potrzebuję, aby klient i serwer wysyłali obiekty tam iz powrotem. Nie szukam kompletnego rozwiązania, szukam tylko wskazówek we właściwym kierunku.Qt dwukierunkowy serwer klienta przy użyciu QTcpSocket i QTcpServer
Napisałem kod, który akceptuje połączenie, ale nie akceptuje danych.
SERWER
ta klasa jest serwer; powinien akceptować połączenie i wyświetlać rozmiar bufora, który jest wysyłany. Jednak to jest wyprowadzanie 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();
}
CLIENT
Ta klasa jest klient. Powinien przesłać ciąg "hello". Wysyła go z powodzeniem (według mojej wiedzy)
#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);
}
Proszę mi powiedzieć, co robię źle, albo powiedz mi ogólną logikę ustalenia, co chcę w Qt.
Dziękuję bardzo, udało mi się przesłać dane przez gniazdo.Jednak nadal otrzymuję rozmiar bufora 0 z jakiegoś powodu. Każdy pomysł, dlaczego? – PTBG
Z dokumentów "Wielkość bufora odczytu równa 0 (wartość domyślna) oznacza, że bufor nie ma limitu rozmiaru, zapewniając, że żadne dane nie zostaną utracone". W związku z tym nie podaje żadnych informacji na temat rzeczywistej zawartości. Powinieneś użyć 'socket-> size()' lub 'socket-> bytesAvailable()' –