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

QT TCP網(wǎng)絡(luò)編程——服務(wù)端的實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了QT TCP網(wǎng)絡(luò)編程——服務(wù)端的實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

QT TCP網(wǎng)絡(luò)編程——服務(wù)端的實(shí)現(xiàn)


溫馨提示:初來(lái)乍到,請(qǐng)多關(guān)照,文章如有不足,還請(qǐng)不吝賜教。本程序是仿照通訊助手(NetAssist.exe)進(jìn)行界面設(shè)計(jì)以及基本功能實(shí)現(xiàn)的,主要實(shí)現(xiàn)的功能有監(jiān)聽服務(wù)器端口、發(fā)送、接收數(shù)據(jù)。使用到的工具及編程語(yǔ)言為:visual studio 2015、QT、C++,其中代碼僅供參考

前言


提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
視頻演示:

一、QT TCP服務(wù)器

在開始編寫代碼之前,首先要知道QT網(wǎng)絡(luò)編程需要用到兩個(gè)類:
1、QTcpServer:主要是實(shí)現(xiàn)服務(wù)器的端口監(jiān)聽。
2、QTcpSocket:套接字,消息的接收和發(fā)送。
以上兩個(gè)類是實(shí)現(xiàn)QT TCP服務(wù)器必不可少的,這與QT TCP客戶端用的只有QTcpSocket類,后面的文章會(huì)講到,此處不做過多贅述。

二、編程步驟

1.引入主要的庫(kù)

#include “qtcpserver.h”
#include “qtcpsocket.h”
#include “qnetworkinterface.h”


2.界面的設(shè)計(jì)

主要使用的是QT,拉取控件實(shí)現(xiàn)的:
QT TCP網(wǎng)絡(luò)編程——服務(wù)端的實(shí)現(xiàn)


3.具體實(shí)現(xiàn)步驟

3.1自動(dòng)獲取本機(jī)地址

如果是簡(jiǎn)單的使用QNetworkInterface::allAddresses(),獲取到的IP集合中包含fff之類的數(shù)據(jù),所以就需要進(jìn)行篩選。篩選本地地址的主要思路如下:
1.IP地址的組成主要是數(shù)字;
2.IP地址的范圍主要是0.0.0.0~255.255.255.255之間(不細(xì)分);
3.IP字段都包含“.”;
4.IP字段以“.”劃分,有四段;
根據(jù)上面的思路,就可以在程序加載后,將本地合法的IP地址渲染到QComboBox中。

代碼如下(示例):

QStringList strList;
	//得到本地IP的一個(gè)集合
	QList<QHostAddress> ipList = QNetworkInterface::allAddresses();
	//循環(huán)取出
	for (int i = 0; i < ipList.size(); i++) {
		QString ipStr = ipList[i].toString();
		//ip地址在7~15之間
		if (ipStr.size() < 7 || ipStr.size() > 15) {
			continue;
		}

		QStringList ipStrList = ipStr.split(".");
		//ip以.隔開 分為4組
		if (ipStrList.size() != 4) {
			continue;
		}

		for (int j = 0; j < ipStrList.size(); j++) {
			int ipData = ipStrList[j].toInt();
			try
			{
				//必須是數(shù)字 并且在0~255
				if (ipData < 0 || ipData > 255) {
					break;
				}
			}
			catch (const std::exception&)
			{
				break;
			}
		}
		strList.append(ipStr);
	}
	impl->ui.ipAddressBox->addItems(strList);

3.1 監(jiān)聽端口

開啟服務(wù)器端口服務(wù),建立QTcpServer對(duì)象,使用listen()方法就可以開啟指定的端口。

impl->tcpServer->listen(ipAddress, port)//監(jiān)聽指定IP 端口

服務(wù)器監(jiān)聽成功后,客戶即可通過指定的IP和端口連接到該服務(wù)器。服務(wù)器通過接收到newConnction()信號(hào)來(lái)判斷是否有客戶連接。

connect(impl->tcpServer, SIGNAL(newConnection()), this,SLOT(dealNewClientConnect()));

3.2 客戶連接

由于連接到服務(wù)器的客戶不止一個(gè),且服務(wù)器在發(fā)送數(shù)據(jù)時(shí),可以進(jìn)行群發(fā),也可以進(jìn)行單發(fā),所以在客戶連接到服務(wù)器時(shí),一定要先存儲(chǔ)好每個(gè)可戶端。這里使用的是構(gòu)造一個(gè)結(jié)構(gòu)體數(shù)據(jù)來(lái)存儲(chǔ)。

typedef struct {
QString clientIpAddress;
quint16 clientPort;
QTcpServer* sockServers;
QTcpSocket* tcpClients;
}ClientInfos;

有了結(jié)構(gòu)體后,當(dāng)有新的客戶連接到服務(wù)器時(shí),將該客戶端的IP即端口存儲(chǔ)下來(lái),代碼如下:

ClientInfos info;
//有新的連接
impl->tcpSocket = impl->tcpServer->nextPendingConnection();
info.tcpClients = impl->tcpSocket;
//獲取連接到服務(wù)器的客戶IP及地址
quint16 port = impl->tcpSocket->peerPort();
info.clientPort = port;
//IP
QHostAddress address =  impl->tcpSocket->peerAddress();
QString ip = address.toString();
info.clientIpAddress = ip;
//添加到結(jié)構(gòu)體
impl->tcpSocketLists.append(info);

//更新combox
updateConnectBox();

impl->ui.receiveEdit->append(QString("[%1]# IP:%2,PORT:%3已連接").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")).arg(ip).arg(port)+"<br/>");
//當(dāng)客戶有數(shù)據(jù)過來(lái)時(shí),會(huì)產(chǎn)生readyRead信號(hào)
connect(impl->tcpSocket, SIGNAL(readyRead()), this, SLOT(receiveData()));
//當(dāng)客戶自動(dòng)斷開連接時(shí),會(huì)產(chǎn)生disconnected信號(hào)
connect(impl->tcpSocket, SIGNAL(disconnected()), this, SLOT(dealDisconnected()));

3.3 讀寫數(shù)據(jù)

服務(wù)器的接收和發(fā)送數(shù)據(jù),主要是QTcpSocket提供的。
1.讀:

QByteArray arrs = impl->tcpSocketLists.at(i).tcpClients->readAll();

2.寫:

impl->tcpSocketLists.at(i).tcpClients->write(sendData.toLatin1());

3.4 客戶斷開連接

客戶端自動(dòng)斷開連接時(shí),會(huì)產(chǎn)生disconnected信號(hào)。這里主要是為了重新渲染連接到服務(wù)器的客戶端數(shù)量。

4 程序代碼鏈接

百度網(wǎng)盤鏈接分享

提取碼:6565


總結(jié)

提示:這里主要是自己寫這個(gè)程序過程的感悟,讀者可看可不看:

其實(shí)QT為TCP網(wǎng)絡(luò)編程提供了現(xiàn)成的類,只需要調(diào)用即可。主要還是界面功能的一些實(shí)現(xiàn),需要好好去琢磨。好了,QT服務(wù)器的實(shí)現(xiàn)就介紹在這了,有什么問題或想法,請(qǐng)私信我哦,下期再見!拜謝!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-441620.html

到了這里,關(guān)于QT TCP網(wǎng)絡(luò)編程——服務(wù)端的實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【網(wǎng)絡(luò)編程】TCP流套接字編程(TCP實(shí)現(xiàn)回顯服務(wù)器)

    【網(wǎng)絡(luò)編程】TCP流套接字編程(TCP實(shí)現(xiàn)回顯服務(wù)器)

    Socket(既能給客戶端使用,也能給服務(wù)器使用) 構(gòu)造方法 基本方法: ServerSocket(只能給服務(wù)器使用) 構(gòu)造方法: 基本方法: 客戶端代碼示例: 服務(wù)器代碼示例: 運(yùn)行結(jié)果: 代碼執(zhí)行流程: 服務(wù)器啟動(dòng),阻塞在accept,等待客戶端建立連接. 客戶端啟動(dòng).這里的new操作會(huì)觸發(fā)和服務(wù)器之間建立連

    2024年04月25日
    瀏覽(23)
  • 【網(wǎng)絡(luò)編程】實(shí)現(xiàn)UDP/TCP客戶端、服務(wù)器

    【網(wǎng)絡(luò)編程】實(shí)現(xiàn)UDP/TCP客戶端、服務(wù)器

    需要云服務(wù)器等云產(chǎn)品來(lái)學(xué)習(xí)Linux的同學(xué)可以移步/--騰訊云--/--阿里云--/--華為云--/官網(wǎng),輕量型云服務(wù)器低至112元/年,新用戶首次下單享超低折扣。 ? 目錄 一、UDP 1、Linux客戶端、服務(wù)器 1.1udpServer.hpp 1.2udpServer.cc 1.3udpClient.hpp 1.4udpClient.cc 1.5onlineUser.hpp 2、Windows客戶端 二、T

    2024年02月06日
    瀏覽(19)
  • C#實(shí)現(xiàn)簡(jiǎn)單TCP服務(wù)器和客戶端網(wǎng)絡(luò)編程

    C#實(shí)現(xiàn)簡(jiǎn)單TCP服務(wù)器和客戶端網(wǎng)絡(luò)編程

    在C#中進(jìn)行網(wǎng)絡(luò)編程涉及許多類和命名空間,用于創(chuàng)建和管理網(wǎng)絡(luò)連接、傳輸數(shù)據(jù)等。下面是一些主要涉及的類和命名空間: System.Net 命名空間: 這個(gè)命名空間提供了大部分網(wǎng)絡(luò)編程所需的類,包括: IPAddress :用于表示IP地址。 IPEndPoint :表示IP地址和端口號(hào)的組合。 Socke

    2024年02月11日
    瀏覽(37)
  • 【網(wǎng)絡(luò)編程】實(shí)現(xiàn)一個(gè)簡(jiǎn)單多線程版本TCP服務(wù)器(附源碼)

    【網(wǎng)絡(luò)編程】實(shí)現(xiàn)一個(gè)簡(jiǎn)單多線程版本TCP服務(wù)器(附源碼)

    accept 函數(shù)是在服務(wù)器端用于接受客戶端連接請(qǐng)求的函數(shù),它在監(jiān)聽套接字上等待客戶端的連接,并在有新的連接請(qǐng)求到來(lái)時(shí)創(chuàng)建一個(gè)新的套接字用于與該客戶端通信。 下面是 accept 函數(shù)的詳細(xì)介紹以及各個(gè)參數(shù)的意義: sockfd: 是服務(wù)器監(jiān)聽套接字的文件描述符,通常是使用

    2024年02月13日
    瀏覽(30)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程套接字&UDP服務(wù)器客戶端的簡(jiǎn)單模擬

    【計(jì)算機(jī)網(wǎng)絡(luò)】網(wǎng)絡(luò)編程套接字&UDP服務(wù)器客戶端的簡(jiǎn)單模擬

    需要云服務(wù)器等云產(chǎn)品來(lái)學(xué)習(xí)Linux的同學(xué)可以移步/–騰訊云–/官網(wǎng),輕量型云服務(wù)器低至112元/年,優(yōu)惠多多。(聯(lián)系我有折扣哦) 每臺(tái)主機(jī)都有自己的IP地址,當(dāng)數(shù)據(jù)在進(jìn)行通信的時(shí)候,除了要發(fā)送的數(shù)據(jù)外,在報(bào)頭里面還要包含發(fā)送方的IP和接收方的IP,這里發(fā)送方的IP就

    2024年02月20日
    瀏覽(101)
  • python網(wǎng)絡(luò)編程:通過socket實(shí)現(xiàn)TCP客戶端和服務(wù)端

    python網(wǎng)絡(luò)編程:通過socket實(shí)現(xiàn)TCP客戶端和服務(wù)端

    目錄 寫在開頭 socket服務(wù)端(基礎(chǔ)) socket客戶端(基礎(chǔ)) 服務(wù)端實(shí)現(xiàn)(可連接多個(gè)客戶端)? 客戶端實(shí)現(xiàn) 數(shù)據(jù)收發(fā)效果 ? 近期可能會(huì)用python實(shí)現(xiàn)一些網(wǎng)絡(luò)安全工具,涉及到許多關(guān)于網(wǎng)絡(luò)的知識(shí),逃不過的就是最基本的socket。本文將介紹如何通過python自帶的socket庫(kù)實(shí)現(xiàn)TCP客戶

    2024年03月21日
    瀏覽(27)
  • Socket網(wǎng)絡(luò)編程(TCP/IP)實(shí)現(xiàn)服務(wù)器/客戶端通信。

    Socket網(wǎng)絡(luò)編程(TCP/IP)實(shí)現(xiàn)服務(wù)器/客戶端通信。

    一.前言 回顧之前進(jìn)程間通信(無(wú)名管道,有名管道,消息隊(duì)列,共享內(nèi)存,信號(hào),信號(hào)量),都是在同一主機(jī)由內(nèi)核來(lái)完成的通信。 那不同主機(jī)間該怎么通信呢? 可以使用Socket編程來(lái)實(shí)現(xiàn)。 Socket編程可以通過網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)實(shí)現(xiàn)不同主機(jī)之間的通訊。 二.Socket編程的網(wǎng)絡(luò)模型如

    2024年02月08日
    瀏覽(37)
  • QT網(wǎng)絡(luò)編程之TCP

    QT網(wǎng)絡(luò)編程之TCP

    TCP 編程需要用到倆個(gè)類: QTcpServer 和 QTcpSocket。

    2024年02月13日
    瀏覽(24)
  • [Linux] 網(wǎng)絡(luò)編程 - 初見TCP套接字編程: 實(shí)現(xiàn)簡(jiǎn)單的單進(jìn)程、多進(jìn)程、多線程、線程池tcp服務(wù)器

    [Linux] 網(wǎng)絡(luò)編程 - 初見TCP套接字編程: 實(shí)現(xiàn)簡(jiǎn)單的單進(jìn)程、多進(jìn)程、多線程、線程池tcp服務(wù)器

    網(wǎng)絡(luò)的上一篇文章, 我們介紹了網(wǎng)絡(luò)變成的一些重要的概念, 以及 UDP套接字的編程演示. 還實(shí)現(xiàn)了一個(gè)簡(jiǎn)單更簡(jiǎn)陋的UDP公共聊天室. [Linux] 網(wǎng)絡(luò)編程 - 初見UDP套接字編程: 網(wǎng)絡(luò)編程部分相關(guān)概念、TCP、UDP協(xié)議基本特點(diǎn)、網(wǎng)絡(luò)字節(jié)序、socket接口使用、簡(jiǎn)單的UDP網(wǎng)絡(luò)及聊天室實(shí)現(xiàn)…

    2024年02月16日
    瀏覽(32)
  • 【網(wǎng)絡(luò)編程】——基于TCP協(xié)議實(shí)現(xiàn)回顯服務(wù)器及客戶端

    【網(wǎng)絡(luò)編程】——基于TCP協(xié)議實(shí)現(xiàn)回顯服務(wù)器及客戶端

    個(gè)人主頁(yè):兜里有顆棉花糖 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【網(wǎng)絡(luò)編程】【Java系列】 本專欄旨在分享學(xué)習(xí)網(wǎng)絡(luò)編程的一點(diǎn)學(xué)習(xí)心得,歡迎大家在評(píng)論區(qū)交流討論?? TCP提供的API主要有兩個(gè)類 Socket ( 既會(huì)給服務(wù)器使用也會(huì)給客

    2024年02月03日
    瀏覽(44)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包