国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

《QT從基礎(chǔ)到進階·十六》QT實現(xiàn)客戶端和服務(wù)端的簡單交互

這篇具有很好參考價值的文章主要介紹了《QT從基礎(chǔ)到進階·十六》QT實現(xiàn)客戶端和服務(wù)端的簡單交互。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

QT版本:5.15.2
VS版本:2019

客戶端程序主要包含三塊:連接服務(wù)器,發(fā)送消息,關(guān)閉客戶端
服務(wù)端程序主要包含三塊:打開消息監(jiān)聽,接收消息并反饋,關(guān)閉服務(wù)端

1、先打開服務(wù)端監(jiān)聽功能

void TCPServer::listen()
{
    initWsaData();
    //創(chuàng)建套接字
    sock = socket(AF_INET, SOCK_STREAM, 0);
    //創(chuàng)建地址簇對象
    sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(9888);
    sin.sin_addr.s_addr = htonl(INADDR_ANY);
    //綁定套接字
    int bindStatus = ::bind(sock, (struct sockaddr*)&sin, sizeof(sin));
    if (bindStatus == -1) {
        qDebug() << "socket bind failed!" << endl;
        ui.textBrowser->setText("socket bind failed!");
        return;
    }
    else {
        qDebug() << "socket bind success!" << endl;
        ui.textBrowser->setText("socket bind success!");
    }
    //將套接字設(shè)為監(jiān)聽模式,等待客戶端連接
    int listenStatus = ::listen(sock, 128);
    if (listenStatus == -1) {
        qDebug() << "listen failed" << endl;
        ui.textBrowser->setText("listen failed");
        return;
    }
    else {
        qDebug() << "set listen success, server is listening..." << endl;
        ui.textBrowser->setText("set listen success, server is listening...");
    }
    //收到請求主后,接收連接請求,返回一個對應(yīng)此次連接的新套接字
    //接受連接請求
    sockaddr_in sinAccept;
    int len = sizeof(sin);
    newSock = accept(sock, (struct sockaddr*)&sinAccept, &len);
    if (newSock == SOCKET_ERROR) {
        qDebug() << "connect failed" << endl;
        ui.textBrowser->setText("connect failed");
        return;
    }
    else {
        qDebug() << "connect success, ready to recv data" << endl;
        ui.textBrowser->setText("connect success, ready to recv data");
    }
}

2、點擊客戶端connect連接服務(wù)端

void TCPClient::Connect(const std::string ip, const int port)
{
    bool res = initWsaData(); //初始化套接字庫
    if (!res) return;

    //常用協(xié)議族:AF_UNIX(本機通信)AF_INET(TCP/IP – IPv4)AF_INET6(TCP/IP – IPv6)
    //套接字類型:SOCK_STREAM(TCP流)SOCK_DGRAM(UDP數(shù)據(jù)報)SOCK_RAW(原始套接字)
    //protocol”一般設(shè)置為“0”
    sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == SOCKET_ERROR) {
        qDebug() << "Failed to create socket" << endl;
        ui.textBrowser->setText("Failed to create socket");
        return;
    }
    else {
        qDebug() << "Socket created successfully" << endl;
        ui.textBrowser->setText("Socket created successfully");
    }

    //設(shè)置地址
    sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(port);
    sin.sin_addr.s_addr = inet_addr(ip.c_str());

    //連接服務(wù)器
    int connStatus = ::connect(sock, (struct sockaddr*)&sin, sizeof(sin));
    if (connStatus == -1) {
        qDebug() << "Failed to connect to the server" << endl;
        ui.textBrowser->setText("Failed to connect to the server");
        return;
    }
}

3、在客戶端輸入消息點擊send發(fā)送到服務(wù)端

void TCPClient::DataTransmission()
{
    string msg = ui.lineEdit->text().toStdString();
    /*char sendBuf[MAX_MSG_SIZE];
    memset(sendBuf, 0, MAX_MSG_SIZE)*/;
    
    int sendStatus = send(sock, msg.c_str(), MAX_MSG_SIZE, 0);
    if (sendStatus == 0) {
        qDebug() << "Failed to send information" << endl;
        ui.textBrowser->setText("Failed to send information");

        //關(guān)閉套接字及套接字庫
        closesocket(sock);
        WSACleanup();
        return;
    }

    char recvBuf[MAX_MSG_SIZE];
    memset(recvBuf, 0, MAX_MSG_SIZE);
    int recvStatus = recv(sock, recvBuf, MAX_MSG_SIZE, 0);
    if (recvStatus == -1) {
        qDebug() << "Failed to receive message" << endl;
        ui.textBrowser->setText("Failed to receive message");

        //關(guān)閉套接字及套接字庫
       /* closesocket(sock);
        WSACleanup();*/
        return;
    }
    else {
        qDebug() << "Server information:" << recvBuf << endl;
        string msg = "---------Server information:" + string(recvBuf);
        ui.textBrowser->setText(QString::fromStdString(msg));
    }
}

4、在服務(wù)端點擊send接收客戶端消息并通知客戶端已收到消息

void TCPServer::DataTransmission()
{
    //用新建立的套接字和客戶端進行通信
    char recvBuf[MAX_MSG_SIZE];
    char sendBuf[MAX_MSG_SIZE];
    memset(recvBuf, 0, MAX_MSG_SIZE);
    memset(sendBuf, 0, MAX_MSG_SIZE);
    if (true) {
        int recvStatus = recv(newSock, recvBuf, MAX_MSG_SIZE, 0);
        if (recvStatus == -1) {
            qDebug() << "recv data failed" << endl;
            ui.textBrowser->setText("recv data failed");
            closesocket(sock);
            closesocket(newSock);
            WSACleanup();
            return;
        }
        else {
            qDebug() << "recv client new msg:" << recvBuf << endl;
            string msg = "--------------recv client new msg:" + string(recvBuf);
            ui.textBrowser->setText(QString::fromStdString(msg));
        }
        /*qDebug() << "請輸入回復(fù)消息:";
        cin >> sendBuf;*/
        string sendMsg = "has recv msg-------";
        int sendStatus = send(newSock, sendMsg.c_str(), sizeof(sendBuf), 0);
        if (sendStatus == -1) {
            qDebug() << "msg send failed" << endl;
            ui.textBrowser->setText("msg send failed");
            closesocket(sock);
            closesocket(newSock);
            WSACleanup();
            return;
        }
    }
}

qt 服務(wù)關(guān)閉時如何通知客戶端,QT從基礎(chǔ)到進階,qt,交互,開發(fā)語言,c++,ui,websocket,c語言

=====================

完整源碼下載

qt 服務(wù)關(guān)閉時如何通知客戶端,QT從基礎(chǔ)到進階,qt,交互,開發(fā)語言,c++,ui,websocket,c語言

??博客主頁: 主頁
??歡迎點贊 ?? 收藏 ?留言 ?? 如有錯誤敬請指正!
??本文由 夢回闌珊 原創(chuàng),首發(fā)于 CSDN,轉(zhuǎn)載注明出處??
??代碼改變世界,你來改變代碼!?文章來源地址http://www.zghlxwxcb.cn/news/detail-775483.html

到了這里,關(guān)于《QT從基礎(chǔ)到進階·十六》QT實現(xiàn)客戶端和服務(wù)端的簡單交互的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • mqtt服務(wù)器搭建與qt下的mqtt客戶端實現(xiàn)

    mqtt服務(wù)器搭建與qt下的mqtt客戶端實現(xiàn)

    ??MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協(xié)議),是一個基于客戶端-服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議。MQTT協(xié)議是輕量、簡單、開放和易于實現(xiàn)的,這些特點使它適用范圍非常廣泛。在很多情況下,包括受限的環(huán)境中,如:機器與機器(M2M)通信和物聯(lián)網(wǎng)(Io

    2024年02月06日
    瀏覽(26)
  • QT實現(xiàn)客戶端服務(wù)器HTTP(get請求、post請求)

    QT實現(xiàn)客戶端服務(wù)器HTTP(get請求、post請求)

    服務(wù)器代碼如下: QtHttpForS.h QtHttpForS.cpp main.cpp QtHttpForS.ui 客戶端代碼: QtHttpForC.h QtHttpForC.cpp mian.cpp QtHttpForC.ui 程序運行效果: GET請求: POST請求: POST請求使用postman測試: 注意: 可以發(fā)現(xiàn),在使用postman進行POST請求發(fā)送時,服務(wù)器接收到的請求頭與QTSocket的POST請求的請求頭

    2023年04月22日
    瀏覽(23)
  • Qt 服務(wù)器/客戶端TCP通訊

    Qt 服務(wù)器/客戶端TCP通訊

    最近需要用到TCP/IP通訊,這邊就先找個簡單的例程學(xué)習(xí)一下。Qt的TCP通訊編程可以使用QtNetwork模塊,QtNetwork模塊提供的類能夠創(chuàng)建基于TCP/IP的客戶端與服務(wù)端應(yīng)用程序,一般會使用QTcpSocket、QTcpServer類 網(wǎng)絡(luò)通信方式主要有兩種:TCP與UDP。以下拷貝網(wǎng)絡(luò)上總結(jié)兩者之間的區(qū)別:

    2023年04月26日
    瀏覽(20)
  • 20230904 QT客戶端服務(wù)器搭建聊天室

    20230904 QT客戶端服務(wù)器搭建聊天室

    Ser Cli

    2024年02月09日
    瀏覽(18)
  • Qt中使用TCP服務(wù)端及客戶端

    TCP(Transmission Control Protocol)是一種可靠、高度優(yōu)化的互聯(lián)網(wǎng)通信協(xié)議,廣泛用于各類網(wǎng)絡(luò)應(yīng)用程序中。在這篇博客中,我們將介紹如何在Qt中使用TCP服務(wù)端及客戶端。 要使用Qt創(chuàng)建TCP服務(wù)器,需要完成以下步驟: 步驟1:創(chuàng)建QTcpServer對象 步驟2:監(jiān)聽連接請求 在開始監(jiān)聽之前

    2024年02月15日
    瀏覽(22)
  • QT實現(xiàn)客戶端斷開連接

    QT實現(xiàn)客戶端斷開連接

    Widget.cpp Widget.h main.cpp

    2024年04月14日
    瀏覽(29)
  • QT TCP客戶端實現(xiàn)

    QT TCP客戶端實現(xiàn)

    QTcpSocket實例首先是通過connectToHost()嘗試連接到服務(wù)器,需要指定服務(wù)器的IP地址和端口。connectToHost()是異步方式連接服務(wù)器,不會阻塞程序運行,連接后發(fā)射connected()信號。 如果需要使用阻塞方式連接服務(wù)器,則使用waitForConnected()函數(shù)阻塞程序運行,直到連接成功或失敗。

    2024年02月09日
    瀏覽(29)
  • Qt多線程TCP服務(wù)器客戶端傳輸文件

    Qt多線程TCP服務(wù)器客戶端傳輸文件

    TCP是面向連接的運輸層協(xié)議。應(yīng)用程序在使用TCP協(xié)議之前,必須先建立TCP連接。在傳送數(shù)據(jù)完畢后,必須釋放已經(jīng)建立的TCP連接。 每一條TCP連接只能有兩個端點,每一條TCP連接只能是點對點的(一對一)。 TCP提供可靠交付的服務(wù)。通過TCP 連接傳送的數(shù)據(jù),無差錯、不丟失、不

    2024年02月13日
    瀏覽(18)
  • QT下的多線程TCP客戶端和服務(wù)器

    qt下的QTcpSocket在同一個線程使用時沒有問題的,但是如果進行跨線程,很容易出現(xiàn)問題。那么有什么方法可以跨線程進行使用嗎? 答案是肯定的:使用QThread的movetothread可以完成擴線程接收。 首先是基于QTcpSocket的類 頭文件tcpsocket.h 然后是cpp文件tcpsocket.cpp 再次基礎(chǔ)上,創(chuàng)建

    2024年01月17日
    瀏覽(25)
  • C++網(wǎng)絡(luò)編程 TCP套接字基礎(chǔ)知識,利用TCP套接字實現(xiàn)客戶端-服務(wù)端通信

    C++網(wǎng)絡(luò)編程 TCP套接字基礎(chǔ)知識,利用TCP套接字實現(xiàn)客戶端-服務(wù)端通信

    流式套接字編程針對TCP協(xié)議通信,即是面向?qū)ο蟮耐ㄐ?,分為服?wù)端和客戶端兩部分。 1)加載套接字庫( 使用函數(shù)WSAStartup() ),創(chuàng)建套接字( 使用socket() ) 2)綁定套接字到一個IP地址和一個端口上( 使用函數(shù)bind() ) 3)將套接字設(shè)置為監(jiān)聽模式等待連接請求( 使用函數(shù)

    2024年02月03日
    瀏覽(103)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包