İstemcilerin ve sunucuların birbirleri arasında seri hale getirilmiş nesneleri geçirebileceği iki yönlü bir istemci-sunucu programı uygulamaya çalışıyorum. Bunu Qt (QTcpSocket ve QTcpServer) kullanarak yapmaya çalışıyorum. Java gibi programlar yaptım ama Qt kullanarak nasıl yapılacağını anlayamıyorum. fortune client ve fortune server örneklerini inceledim ama görebildiğim kadarıyla, istemci sadece sunucuyu sinyalliyor ve sunucu bazı verileri gönderiyor. İstemci ve sunucu için nesneleri ileri geri göndermeye ihtiyacım var. Tam bir çözüm aramıyorum, tek aradığım şey doğru yönde bir rehberlik.QTcpSocket ve QTcpServer kullanarak Qt iki yönlü istemci sunucusu
Bağlantı kabul eden ancak verileri kabul etmeyen bazı kodlar yazdım.
SUNUCU
bu sınıf sunucusudur; bir bağlantıyı kabul etmeli ve gönderilmekte olan tamponun boyutunu çıkarmalı. Ancak 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();
}
MÜŞTERİ
Bu sınıf çıktısı istemcisidir. 'Merhaba' dizesini göndermeli. Bu
#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);
}
yanlış yapıyorum söyle yoksa bana Qt istediğini kurma genel mantığını söyle (bildiğim kadarıyla) başarıyla gönderir.
Çok teşekkürler, veriyi sokete gönderebiliyordum.Ancak hala bir sebepten dolayı 0 tampon büyüklüğüne ulaşıyorum. Bir fikrin neden? – PTBG
Dokümanlardan "Okuma arabelleği boyutu 0 (varsayılan değer), arabelleğin boyut sınırlaması olmadığını ve hiçbir verinin kaybolmadığını" belirtir. Bu nedenle, gerçek içerik hakkında hiçbir bilgi vermez. 'Socket-> size()' veya 'socket-> bytesAvailable()' yi kullanmalısınız. –