河北廊坊建设局网站,wordpress 本机安装目录,学术网站建设,wordpress主题 下单上篇介绍了QT实现网络通信的服务器端#xff0c;还没看服务器的朋友们先去上篇了解#xff0c;这篇我来实现一下客户端的实现。
首先还是新建一个项目 选择mainwindow类
在通信前将.pro文件的第一行代码中追加network 窗口搭建
在mainwindow.ui中完成一下窗口的搭建 首先在…上篇介绍了QT实现网络通信的服务器端还没看服务器的朋友们先去上篇了解这篇我来实现一下客户端的实现。
首先还是新建一个项目 选择mainwindow类
在通信前将.pro文件的第一行代码中追加network 窗口搭建
在mainwindow.ui中完成一下窗口的搭建 首先在最上端放一个QWidget在里面放入label输入端口再放一个LineEdit它的Objectname为port表示输入的端口号在右边放一个Pushbutton输入连接Objectname是connect
端口下面类似LineEdit的Objectname是ip,PushButton的Objectname是disconnect 然后在下面放一个QGroupBox,name改为历史信息表示服务器客户端发送的信息都会保存在这在里面放一个TextEditObjectname改为record再水平布局
下面类似TextEdit的Objectname改为msg表示服务器要发送的信息每次点击发送清空发送的信息框中的内容
最下面还是先放一个QGroupBox,中间放一个pushbutton输入发送,Objectname改为sendMsg,再水平布局
最后整体 垂直布局这样服务器的窗口就搭建成功了
代码部分
mainwindow.h 首先在头文件的类中的private中定义要用到的套接字 槽函数在Ui中的按钮右键转到槽函数自动定义用来实现连接断开连接发送等功能
mianwindow.cpp 在构造函数中对ui中的端口号、ip进行初始化设置窗口标题为客户端在未连接的时候将断开连接设置为不可使用对头文件中定义的套接字进行实例化 三个connect,还是写在构造函数中
第一个connct:如果服务器有消息发来套接字就会收到一个readyRead的信号使用匿名函数将发送来的内容追加到record中
第二个connect: 如果客户端连接到服务器套接字就会收到connect的信号使用匿名函数将成功连接发送到record中如果连接成功就将连接按钮设置为不可操作将断开连接按钮设置为可以操作
第三个connect:如果客户端与服务器断开连接套接字会收到disconnect的信号使用匿名函数将服务器已断开发送到record中并将套接字关闭释放如果断开就将连接按钮设置为可操作将断开连接按钮设置为不可操作
点击按钮的三个槽函数的实现 点击senMsg就将msg文本框中的内容利用套接字write给服务器然后再追加到record文本框中
点击connecr将ip和端口号保存利用套接字中的connectToHost函数与服务器进行连接
点击disconnect将tcp套接字关闭将连接按钮设置为可操作断开连接设置为不可操作
通过以上步骤客户端也就实现完成了以下是全部代码
全部代码
mianwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include QMainWindow
#include QTcpSocketnamespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent nullptr);~MainWindow();private slots:void on_sendMsg_clicked();void on_connect_clicked();void on_disconnect_clicked();private:Ui::MainWindow *ui;QTcpSocket *tcp;};#endif // MAINWINDOW_Hmianwindow.cpp
#include mainwindow.h
#include ui_mainwindow.h
#include QHostAddressMainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui-setupUi(this);ui-port-setText(8899);ui-ip-setText(127.0.0.1);setWindowTitle(客户端);ui-disconnect-setDisabled(true);tcp new QTcpSocket(this);connect(tcp,QTcpSocket::readyRead,this,[](){//如果tcp收到一个readyRead信号就QByteArray data tcp-readAll();//把内容读出来放到data里ui-record-append(服务器say: data);//把内容追加到record中});connect(tcp,QTcpSocket::connected,this,[](){//如果套接字收到已连接消息将成功连接发送到record中ui-record-append(成功连接服务器);ui-disconnect-setDisabled(false);ui-connect-setDisabled(true);}) ;connect(tcp,QTcpSocket::disconnected,this,[](){//如果套接字收到断联消息就关闭套接字并释放ui-record-append(服务器已断开);tcp-close();tcp-deleteLater();ui-disconnect-setDisabled(true);ui-connect-setDisabled(false);}) ;}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_sendMsg_clicked()
{QString msg ui-msg-toPlainText();tcp-write(msg.toUtf8());ui-record-append(客户端say: msg);ui-msg-clear();
}void MainWindow::on_connect_clicked()
{QString ip ui-ip-text();//将ip地址赋值unsigned short port ui-port-text().toUShort();//将端口号赋值tcp-connectToHost(QHostAddress(ip),port); //connecttoHost函数用来连接服务器
}void MainWindow::on_disconnect_clicked()
{tcp-close();ui-disconnect-setDisabled(true);ui-connect-setDisabled(false);
}执行实例