首先,我们可以先在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();
}
具体实现如下图所示: