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

开发环境:Windows10

Qt版本:Qt5.11.0


现在设计客户端,服务端设计请参考地址:Qt实现局域网简易通信(一)

同样先来看界面:

Qt实现简易局域网通信(二)_第1张图片

通过连接服务器的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_OBJECT

public:
    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实现简易局域网通信(二)_第2张图片

此截屏将服务器和客户端放一起,上面为服务器,下面为客户端,手动输入IP地址和端口号,点击服务器的绑定,客户端点击链接,看信息框提示的信息便知服务器和客户端连接成功。

查看信息发送功能

Qt实现简易局域网通信(二)_第3张图片

在客户端输入“你好”,点击发送,便在服务器端出现“你好”,将从客户端获取的IP地址和端口号填入服务器的客户端接口,输入信息并点击发送,同样,在客户端接收到消息。完成!

工程源码下载地址(包括服务端和客户端代码):Qt局域网通信源码

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


你可能感兴趣的:(Qt)