天天看點

Qt實作簡易區域網路通信(二)

開發環境:Windows10

Qt版本:Qt5.11.0

現在設計用戶端,服務端設計請參考位址:​​Qt實作區域網路簡易通信(一)​​

同樣先來看界面:

Qt實作簡易區域網路通信(二)

通過連接配接伺服器的IP和端口号連接配接伺服器,并能發送消息至伺服器。

同樣,先在.pro檔案裡添加網絡子產品

QT       += core gui network      

widget.h檔案代碼

#ifndef WIDGET_H
#define WIDGET_H

#include <QDebug>
#include <QWidget>
#include <QTcpSocket>
#include <QHostAddress>
#include <QNetworkInterface>
#include <QtCore/QObject>

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實作簡易區域網路通信(二)

此截屏将伺服器和用戶端放一起,上面為伺服器,下面為用戶端,手動輸入IP位址和端口号,點選伺服器的綁定,用戶端點選連結,看資訊框提示的資訊便知伺服器和用戶端連接配接成功。

檢視資訊發送功能

Qt實作簡易區域網路通信(二)

在用戶端輸入“你好”,點選發送,便在伺服器端出現“你好”,将從用戶端擷取的IP位址和端口号填入伺服器的用戶端接口,輸入資訊并點選發送,同樣,在用戶端接收到消息。完成!

繼續閱讀