开发环境:Windows10
Qt版本:Qt5.11.0
现在设计客户端,服务端设计请参考地址: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())向服务器发送数据信息。
至此,一个简易的局域网通信完成了,现结合服务器来看看运行效果
同时运行服务器和客户端代码,界面显示如下:
文章图片
此截屏将服务器和客户端放一起,上面为服务器,下面为客户端,手动输入IP地址和端口号,点击服务器的绑定,客户端点击链接,看信息框提示的信息便知服务器和客户端连接成功。
查看信息发送功能
文章图片
在客户端输入“你好”,点击发送,便在服务器端出现“你好”,将从客户端获取的IP地址和端口号填入服务器的客户端接口,输入信息并点击发送,同样,在客户端接收到消息。完成!
工程源码下载地址(包括服务端和客户端代码):Qt局域网通信源码
【Qt实现简易局域网通信(二)】发布工程安装包下载地址(可执行exe文件包):Qt局域网通信测试效果
推荐阅读
- Qt|Qt常用UI控件读取、写入方法
- Qt|Qt For Android 之启动页
- QT|QT面试
- QT安装
- qt|qt for android实现app内通过按键后台运行程序
- qt|qt for android程序保活 程序后台一直运行不被清理掉(未完)
- QWidget实现手机ipad屏幕滑屏效果
- Qt|Qt官方示例-QML Axes
- 在QT/QML中使用FontAwesome做图标显示
- QT|QtCreator2.7.0桌面快捷方式创建过程