Qt实现简易局域网通信(二)

开发环境:Windows10
Qt版本:Qt5.11.0


现在设计客户端,服务端设计请参考地址:Qt实现局域网简易通信(一)
同样先来看界面:
Qt实现简易局域网通信(二)
文章图片


通过连接服务器的IP和端口号连接服务器,并能发送消息至服务器。
同样,先在.pro文件里添加网络模块

QT+= core gui network

widget.h文件代码
#ifndef WIDGET_H #define WIDGET_H#include #include #include #include #include #include namespace Ui { class Widget; }class Widget : public QWidget { Q_OBJECTpublic: explicit Widget(QWidget *parent = 0); ~Widget(); private slots: void on_But_socket_lianjie_clicked(); void on_Btn_socket_send_clicked(); void oneProcessConnected(); //连接成功函数 void oneProcessReadyRead(); //读取服务器信息函数 void oneProcessDisconnected(); //服务器断开函数 void oneProcessError(QAbstractSocket::SocketError err); //出错函数private: Ui::Widget *ui; QTcpSocket *myClient; //定义客户端对象void InitSocket(); //初始化客户端函数 }; #endif // WIDGET_H

widget文件代码
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); InitSocket(); }Widget::~Widget() { delete ui; }void Widget::InitSocket() { myClient = new QTcpSocket(this); //分配空间 }//连接服务器槽函数 void Widget::on_But_socket_lianjie_clicked() { QString serveIP = ui->Edit_serve_IP->text(); //获取服务器IP QString servePort = ui->Edit_serve_Port->text(); //获取服务器端口号 myClient->connectToHost(QHostAddress(serveIP),servePort.toInt()); //连接服务器 //myClient->connectToHost("192.168.85.1",10086); connect(myClient,SIGNAL(connected()),this,SLOT(oneProcessConnected())); //连接成功 connect(myClient,SIGNAL(readyRead()),this,SLOT(oneProcessReadyRead())); //读取服务器信息数据 connect(myClient,SIGNAL(disconnected()),this,SLOT(oneProcessDisconnected())); //服务器断开 connect(myClient,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(oneProcessError(QAbstractSocket::SocketError))); //出错函数}//连接成功函数 void Widget::oneProcessConnected() { QString msg = QString("谢天谢地,可算是连上服务器了!"); ui->textEdit_serve->append(msg); }//读取服务器信息函数 void Widget::oneProcessReadyRead() { QString msg,str1,str2; str1 = QString("服务器[%1:%2] 说:").arg(myClient->peerAddress().toString()).arg(myClient->peerPort()); while(!myClient->atEnd()) { str2.append(QString(myClient->readAll())); } msg = QString("%1%2").arg(str1).arg(str2); ui->textEdit_serve->append(msg); }//服务器断开函数 void Widget::oneProcessDisconnected() { QString msg = "服务器退出 "; ui->textEdit_serve->append(msg); }//出错函数 void Widget::oneProcessError(QAbstractSocket::SocketError err) { qDebug() << err; }//点击发送按键向服务器发送信息 void Widget::on_Btn_socket_send_clicked() { QString msg = ui->textEdit_socket->toPlainText(); int ret = myClient->write(msg.toUtf8()); if(ret <= 0) { return; } ui->textEdit_socket->clear(); }

总结一下客户端编写步骤:
1、使用connectToHost(QHostAddress(serveIP),servePort.toInt())连接服务器;
2、使用信号函数readyRead()读取服务器的数据信息;
3、点击发送按键调用myClient->write(msg.toUtf8())向服务器发送数据信息。


至此,一个简易的局域网通信完成了,现结合服务器来看看运行效果

同时运行服务器和客户端代码,界面显示如下:
Qt实现简易局域网通信(二)
文章图片

此截屏将服务器和客户端放一起,上面为服务器,下面为客户端,手动输入IP地址和端口号,点击服务器的绑定,客户端点击链接,看信息框提示的信息便知服务器和客户端连接成功。
查看信息发送功能
Qt实现简易局域网通信(二)
文章图片


在客户端输入“你好”,点击发送,便在服务器端出现“你好”,将从客户端获取的IP地址和端口号填入服务器的客户端接口,输入信息并点击发送,同样,在客户端接收到消息。完成!
工程源码下载地址(包括服务端和客户端代码):Qt局域网通信源码

【Qt实现简易局域网通信(二)】发布工程安装包下载地址(可执行exe文件包):Qt局域网通信测试效果


    推荐阅读