【发布时间】:2012-02-13 14:30:59
【问题描述】:
我正在尝试实现一个双向客户端-服务器程序,其中客户端和服务器可以在彼此之间传递序列化对象。我正在尝试使用 Qt(QTcpSocket 和 QTcpServer)来做到这一点。我已经在 java 中实现了这样的程序,但我不知道如何使用 Qt 来实现。我已经检查了fortune client 和fortune 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()<<socket->readBufferSize();
}
客户
这个类是客户端。它应该发送字符串'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()<<tcpSocket->write(array);
}
请告诉我我做错了什么,或者告诉我在 Qt 中建立我想要什么的一般逻辑。
【问题讨论】:
标签: c++ qt tcp client-server