运用qt制作客户端及服务器页面

首先,我们可以先在qt里制作一个简单的服务器页面,可以如下图:

对于客户端端口及客户端地址改变该对象的名称,使之与接下来代码中所用的名称相对应。在这里,我将客户端端口的对象名设为portLineEdit,客户端地址的对象名为addressLineEdit;

注意:在写服务器和客户端时需要在.Pro文件中增加network。

 接下来在widget.cpp 文件中创建一个服务器对象,为了接下来客户端向它的连接。创建socket的连接。将获得的客户端的地址以及客户端的端口号,在服务器窗口上显示出来。

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    server = new QTcpServer;
    server->listen(QHostAddress::AnyIPv4,8888);

    connect(server,&QTcpServer::newConnection,this,&Widget::newCon);
}

void Widget::newCon()
{
    QTcpSocket *socket =server->nextPendingConnection(); //创建socket连接
    QHostAddress clientAddress = socket->peerAddress();
    quint16 clientPort=socket->peerPort();

    ui->addressLineEdit->setText(clientAddress.toString());
    ui->portLineEdit->setText(QString::number(clientPort));

    connect(socket,&QTcpSocket::readyRead,this,&Widget::dealData);
}

void Widget::dealData()
{
    QTcpSocket *socket=(QTcpSocket *)sender();  //通过该函数获得信号的发出者
    ui->textEdit->setText(QString(socket->readAll()));
}
Widget::~Widget()
{
    delete ui;
}

服务器写好后,我们将开始写客户端,同样的,一开始我们可以先制作一个简单的客户端页面:

同样的,客户端里文件也同样需要有network

在这里,对登录及取消按钮进行转到槽,分别实现他们的功能,在服务器地址栏输入自己想连接的服务器地址,在服务器端口号里输入想连接的服武器的端口号。进行以下代码的编写:

void Widget::on_loginButton_clicked()
{
    QHostAddress serverAddress(ui->addressLineEdit->text());
    quint16 serverPort = ui->portLineEdit->text().toShort();

    client->connectToHost(serverAddress,serverPort);
}

void Widget::on_canelButton_clicked()
{
    this->close();
}

具体实现如下图所示:

猜你喜欢

转载自blog.csdn.net/tmh_15195862719/article/details/81812311