प्रौद्योगिकी साझेदारी

Qt http संजाल प्रोग्रामिंग

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

शिक्षणस्य उद्देश्यम् : Qt HTTP संजालप्रोग्रामिंग

शिक्षण सामग्री

1. Http इति Hypertext Transfer Protocol इत्यस्य संक्षिप्तनाम, यत् ब्राउजर्-जालसर्वरयोः मध्ये संचारविनिर्देशं परिभाषयति । इदं सरलं अनुरोध-प्रतिसाद-प्रोटोकॉलं यत् प्रायः TCP इत्यस्य उपरि चाल्यते ।

कार्यम् : एतत् WWW सर्वरस्य ब्राउजर् च मध्ये सूचनास्थापनविनिर्देशान् निर्धारयति, तथा च एकः सम्झौता अस्ति यस्य पालनं पक्षद्वयं करोति ।
2.http कथं कार्यं करोति : १. HTTP क्लायन्ट्/सर्वर मॉडल् इत्यस्य आधारेण भवति तथा च संयोजन-उन्मुखम् अस्ति । HTTP लेनदेन प्रक्रिया

  1. क्लायन्ट् सर्वरेण सह संयोजनं स्थापयति;
  2. क्लायन्ट् सर्वरं प्रति अनुरोधं करोति;
  3. सर्वरः अनुरोधं स्वीकृत्य अनुरोधस्य अनुसारं प्रतिक्रियारूपेण तत्सम्बद्धां सञ्चिकां प्रत्यागच्छति:
  4. क्लायन्ट् सर्वरः च संयोजनं बन्दं कुर्वन्ति ।

Qt HTTP-सञ्चालनं द्विधा कार्यान्वितं करोति

1. QNetworkAccessManager तथा QNetworkReply वर्गाणां उपयोगं कुर्वन्तु:

  1. - QNetworkAccessManager Qt इत्यस्य संजालप्रवेशप्रबन्धकः अस्ति, यः HTTP/HTTPS अनुरोधं प्रेषयितुं प्राप्तुं च उत्तरदायी अस्ति ।
  2. - QNetworkAccessManager::get/post इत्यादीनां माध्यमेन GET/POST इत्यादीनां अनुरोधानाम् आरम्भं कुर्वन्तु, तथा च QNetworkReply वस्तुनि प्रत्यागच्छन्तु।
  3. - QNetworkReply तः प्रतिक्रियासङ्केतः, शीर्षकसूचना, सामग्री इत्यादीनि प्राप्तुम्। समकालिकं अतुल्यकालिकं च अनुरोधं कार्यान्वितं कुर्वन्तु।

2. QHttpEngine तथा QHttpNetworkRequest/Reply वर्गानां (निचलस्तरस्य) उपयोगं कुर्वन्तु:

  1. - QHttpEngine HTTP संयोजनानां प्रबन्धनस्य अनुरोधानाम् संसाधनस्य च उत्तरदायी अस्ति ।
  2. - अनुरोधस्य निर्माणार्थं QHttpNetworkRequest इत्यस्य उपयोगं कुर्वन्तु तथा च QHttpEngine इत्यस्य माध्यमेन प्रेषयन्तु।
  3. - प्रतिक्रियां प्राप्तुं प्रत्यागतं QHttpNetworkReply विश्लेषणं कुर्वन्तु।

सामान्यतया सरल HTTP-सञ्चालनानां कृते उच्चस्तरीय-QNetworkAccessManager-अन्तरफलकस्य उपयोगः पर्याप्तः अस्ति । सामान्यानि आवश्यकतानि सुविधापूर्वकं सम्पादयति ।

यदि भवान् निम्नस्तरीयनियन्त्रणस्य आवश्यकता अस्ति, यथा HTTP इञ्जिनस्य अनुकूलनं अथवा अनुरोध/प्रतिसादविवरणं, तर्हि भवान् QHttpEngine इत्यादीनां निम्नस्तरीयवर्गाणां उपयोगं कर्तुं शक्नोति ।

संक्षेपेण, Qt एकं सम्पूर्णं HTTP क्लायन्ट् कार्यान्वयनम् प्रदाति, तथा च विकासकाः वास्तविकआवश्यकतानां आधारेण संजालसञ्चारसञ्चालनानां कृते अधिकं उपयुक्तं अन्तरफलकं चयनं कर्तुं शक्नुवन्ति । एतेन Qt अनुप्रयोगानाम् विकासाय उत्तमं समर्थनं प्राप्यते ।

सारांशः - १.

प्रथमः प्रकारः: QNetworkAccessManager संजालसंयोजनप्रबन्धकः, 2 क्रियाः: अनुरोधं प्राप्तुं वा प्रस्तुतुं वा प्राप्तुम्/पोस्ट् कुर्वन्तु, तथा च QNetworkReply इति वस्तुं प्रत्यागच्छन्तु यस्मिन् विविधाः संयोजनसूचनाः सन्ति

द्वितीयः प्रकारः: QHttpEngine केवलं संयोजनानुरोधं प्रबन्धयति तथा च तान् प्रेषयितुं उत्तरदायी नास्ति ।

  • अनुरोधं निर्मातुं QHttpNetworkRequest इत्यस्य उपयोगं कुर्वन्तु तथा च QHttpEngine इत्यस्य माध्यमेन प्रेषयन्तु ।

  • प्रतिक्रियां प्राप्तुं प्रत्यागतं QHttpNetworkReply विश्लेषणं कुर्वन्तु ।

परियोजनाप्रभावाः तथा मूलसङ्केतः

http पाठकः

http सर्वरः

कोर कोड

http पाठकः

  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. #include <QtNetwork> // 提供编程TCP/IP客户端和服务器的类
  5. #include <QUrl> // 提供接口使用URLs
  6. QT_BEGIN_NAMESPACE
  7. namespace Ui { class MainWindow; }
  8. QT_END_NAMESPACE
  9. class MainWindow : public QMainWindow
  10. {
  11. Q_OBJECT
  12. public:
  13. MainWindow(QWidget *parent = nullptr);
  14. ~MainWindow();
  15. private slots:
  16. void on_pushButton_clicked();
  17. private:
  18. Ui::MainWindow *ui;
  19. QNetworkAccessManager* accesssMgr;
  20. };
  21. #endif // MAINWINDOW_H
  22. #include "mainwindow.h"
  23. #include "ui_mainwindow.h"
  24. MainWindow::MainWindow(QWidget *parent)
  25. : QMainWindow(parent)
  26. , ui(new Ui::MainWindow)
  27. {
  28. ui->setupUi(this);
  29. accesssMgr =new QNetworkAccessManager(this);
  30. QObject::connect(accesssMgr,QOverload<QNetworkReply*>::of(&QNetworkAccessManager::finished),this,
  31. [this](QNetworkReply* reply){
  32. QString read=reply->readAll();
  33. ui->textBrowser->setText(read);
  34. reply->deleteLater(); //释放
  35. });
  36. }
  37. MainWindow::~MainWindow()
  38. {
  39. delete ui;
  40. }
  41. void MainWindow::on_pushButton_clicked()
  42. {
  43. ui->label->setText("数据正在下载中,请耐心等待......");
  44. QString url=ui->textEdit->toPlainText();
  45. qDebug()<<url;
  46. accesssMgr->get(QNetworkRequest(QUrl(url)));
  47. }

http सर्वरः

  1. #include "httpserver.h"
  2. HttpServer::HttpServer(QObject *parent) : QObject(parent)
  3. {
  4. server =new QTcpServer(this);
  5. //连接回调
  6. connect(server,&QTcpServer::newConnection,this,&HttpServer::MyselfNewConnectCalllSlot);
  7. //开始监听
  8. if(!server->listen(QHostAddress::Any,8088))
  9. {
  10. qDebug()<<"n致命错误:Web服务器没有启动,请重新检查!"<<endl;
  11. }
  12. else
  13. {
  14. qDebug()<<"n正常启动:Web服务器端口:8088,等待客户端连接......"<<endl;;
  15. }
  16. }
  17. void HttpServer::MyselfNewConnectCalllSlot(){
  18. socket = server->nextPendingConnection(); //获取连接
  19. while(!(socket->waitForReadyRead(100))); //等待套接字是否有可读数据。 一直阻塞线程等待,直到有可读数据到达套接字,或者超时返回。
  20. QString webdata;
  21. webdata.resize(1000);
  22. webdata=socket->read(1000);
  23. qDebug()<<"正常运行:从浏览器读取数据信息......"<<webdata;
  24. //封装http协议
  25. socket->write("HTTP/1.1 200 OKrn");
  26. socket->write("Content-Type: text/htmlrn");
  27. socket->write("Connection: closern");
  28. socket->write("Refresh: 3rnrn"); // 每秒刷新Web浏览器
  29. socket->write("<!DOCTYPE>"
  30. "<html>"
  31. "<header>"
  32. "<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>"
  33. "<title>HttpServer</title>"
  34. "</header>"
  35. "<body>客户端已经连接HttpSever服务器秒数为:");
  36. QByteArray byte;
  37. static qint16 icount=0;
  38. byte.setNum(icount++);
  39. socket->write(byte);
  40. socket->write("</html>");
  41. /*
  42. flush() 不会等待数据真正发送出去,只是把数据从本地缓冲区 flush 到内核缓冲区。
  43. 如果输出缓冲区没有数据,flush() 有可能不做任何操作。
  44. 调用 flush() 可以确保目前为止写到 socket 的所有数据都发送给对端,而不是 buffered 在本地。
  45. 一般在发送完请求或应答后调用,保证数据及时发送出去。
  46. */
  47. socket->flush(); //刷新 socket 对象的输出缓冲区。 并发送
  48. connect(socket, &QTcpSocket::disconnected, socket, &QTcpSocket::deleteLater);
  49. socket->disconnectFromHost();
  50. }

 

सारांशं कुरुत

http tcp आधारितः अनुप्रयोगस्तरप्रोटोकॉलः अस्ति, अतः tcp वर्गानां उपयोगः भविष्यति, प्रोटोकॉल-समायोजनं च निश्चितम् अस्ति ।मुख्य सदस्य कार्य डिजाइन

  1. 请求:
  2. GET /index.html HTTP/1.1
  3. Host: www.example.com
  4. User-Agent: Mozilla/5.0...
  5. Accept: text/html
  6. 响应:
  7. HTTP/1.1 200 OK
  8. Date: Mon, 27 Jan 2020 08:12:31 GMT
  9. Server: Apache/2.4.1 (Unix)
  10. Last-Modified: Wed, 22 Jul 2020 19:15:56 GMT
  11. ETag: "49092-5b6-52c65aa32f280"
  12. Accept-Ranges: bytes
  13. Content-Length: 438
  14. Connection: close
  15. Content-Type: text/html; charset=UTF-8
  16. <html>
  17. <head>
  18. <title>Welcome to example.com!</title>
  19. </head>
  20. <body>
  21. <h1>Hello World!</h1>
  22. <p>This is the hello world page for an example website.</p>
  23. </body>
  24. </html>
  25. 这个示例演示了一个简单的HTTP请求和响应过程:
  26. 客户端发送GET请求获取index.html页面
  27. 服务器返回200状态码,表示请求成功
  28. 返回各种报头如日期、服务器信息等
  29. 返回HTML页面内容作为响应体

 

Qt HTTP प्रोग्रामिंग् कृते मुख्यवर्गाः QNetworkAccessManager, QNetworkRequest तथा ​​QNetworkReply च सन्ति ।

QNetworkAccessManager: 1.1.

  • जालपुटे संयोजनानि अनुरोधाः च प्रबन्धयन्तु। दत्तांशं प्रेषयन्तु, प्राप्नुवन्तु च।

  • HTTP अनुरोधानाम् आरम्भार्थं get(), post(), put() इत्यादीनां उन्नतकार्यं प्रदाति ।

  • संकेत: समाप्त(), प्रमाणीकरणआवश्यक()等。

QNetworkRequest: 1.1.

  • HTTP अनुरोधं प्रतिनिधियति । URL, headers इत्यादीनि विशेषतानि समाविष्टानि सन्ति ।

  • अनुरोधविधिः, सामग्रीप्रकारः, शीर्षकसूचना इत्यादयः सेट् कुर्वन्तु ।

QNetworkReply: 1.1.

  • HTTP प्रतिक्रियां प्रतिनिधियति । स्थितिसङ्केतः सामग्रीं च प्रत्यागच्छतु।

  • संकेताः: downloadProgress(), error(), इत्यादयः प्रसंस्करणपरिणामान् सूचयन्ति ।

  • readAll() इत्यादीनि कार्यात्मकानि कार्याणि प्रतिक्रियासामग्रीम् पठन्ति ।

मुख्यपदार्थाः : १.

  1. QNetworkAccessManager वस्तु दृष्टान्तं रचयन्तु ।

  2. URL तथा गुणाः सेट् कर्तुं QNetworkRequest ऑब्जेक्ट् रचयन्तु ।

  3. अनुरोधं कर्तुं QNetworkAccessManager::get() अथवा post() इत्यादीनां कार्याणां आह्वानं कुर्वन्तु ।

  4. परिणामान् प्राप्तुं QNetworkReply इत्यस्य संकेतान् शृणुत।

  5. QNetworkReply इत्यस्य माध्यमेन सामग्रीं पठन्तु, अथवा त्रुटयः नियन्त्रयन्तु।

  6. QNetworkReply निष्कास्य स्मृति-लीकं निवारयितुं वस्तुनि अनुरोधयन्तु ।

अन्ते स्रोतसङ्केतलिङ्कं संलग्नं कुर्वन्तु
यदि भवतः सहायकं भवति तर्हि मे तारकं ददातु

Qt डेमो: सीखना qt प्रक्रिया (gitee.com)