计算机网络课程设计之网络聊天程序的设计与实现
前言
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)開始,要求用C/C++,而且有些題目還要有圖形界面,因此決定用Qt寫圖形界面,同時(shí)決定用一個(gè)程序完成所有的實(shí)驗(yàn)設(shè)計(jì)。
白嫖容易,創(chuàng)作不易,本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明!!!
源碼和可運(yùn)行程序:
鏈接:https://pan.baidu.com/s/1A9KctmpP2JJgyW2wLrehIg
提取碼:Lin2
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì):
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)之網(wǎng)絡(luò)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)之Tracert與Ping程序設(shè)計(jì)與實(shí)現(xiàn)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)之基于 IP 多播的網(wǎng)絡(luò)會(huì)議程序
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)之網(wǎng)絡(luò)嗅探器的設(shè)計(jì)與實(shí)現(xiàn)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)之電子郵件客戶端程序設(shè)計(jì)與實(shí)現(xiàn)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)之TELNET 終端設(shè)計(jì)與實(shí)現(xiàn)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)之網(wǎng)絡(luò)代理服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)之簡單 Web Server 程序的設(shè)計(jì)與實(shí)現(xiàn)
Qt入門系列:
Qt學(xué)習(xí)之C++基礎(chǔ)
Qt學(xué)習(xí)之Qt安裝
Qt學(xué)習(xí)之Qt基礎(chǔ)入門(上)
Qt學(xué)習(xí)之Qt基礎(chǔ)入門(中)
Qt學(xué)習(xí)之Qt基礎(chǔ)入門(下)
創(chuàng)作不易,整個(gè)課程設(shè)計(jì)程序3000多行代碼,所有實(shí)驗(yàn)都寫在了一個(gè)程序中,時(shí)間有限,能力不足,轉(zhuǎn)載望注明!!!
本文鏈接
個(gè)人博客:https://ronglin.fun/archives/264
PDF鏈接:見博客網(wǎng)站
CSDN: https://blog.csdn.net/RongLin02/article/details/122509928
實(shí)驗(yàn)題目
網(wǎng)絡(luò)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)
實(shí)驗(yàn)?zāi)康?/h1>
了解 Socket 通信的原理,在此基礎(chǔ)上編寫一個(gè)聊天程序。
總體設(shè)計(jì)
(含背景知識(shí)或基本原理與算法、或模塊介紹、設(shè)計(jì)步驟等)
本次設(shè)計(jì)客戶端用了Qt,Qt的一個(gè)很鮮明的特色就是可以使用槽函數(shù)異步處理數(shù)據(jù)。
服務(wù)器端用了Java,因?yàn)橐玫蕉嗑€程處理每一個(gè)客戶端,同時(shí)用到了很多阻塞式方法,Java的庫中對(duì)于多線程的處理十分方便,因此服務(wù)器用Java書寫。
客戶端
在Qt中創(chuàng)建一個(gè)TCP連接十分簡單
參考博客:QT5實(shí)現(xiàn)簡單的TCP通信
首先使用QT的網(wǎng)絡(luò)套接字需要.pro文件中加入一句:
客戶端的代碼比服務(wù)器稍簡單,總的來說,使用QT中的QTcpSocket類與服務(wù)器進(jìn)行通信只需要以下5步:
關(guān)于close()和disconnectFromHost()的區(qū)別,可以按F1看幫助
服務(wù)器
雖然服務(wù)器端用的是Java寫的,但是還是提一下Qt中如何創(chuàng)建服務(wù)器
Qt TCP服務(wù)器
服務(wù)器除了使用到了QTcpSocket類,還需要用到QTcpSever類。即便如此,也只是比客戶端復(fù)雜一點(diǎn)點(diǎn),用到了6個(gè)步驟:
這里的第一個(gè)參數(shù)是QHostAddress,在Qt的assistant(幫助文檔)有詳細(xì)的說明
Qt異步處理數(shù)據(jù)用起來很方便,因?yàn)閏onnect函數(shù)的存在,程序不用阻塞,可以等待槽函數(shù)的觸發(fā)。
Java TCP服務(wù)器
接下來說明Java如何創(chuàng)建一個(gè)TCP服務(wù)器
參考博客:TCP通信的Java實(shí)現(xiàn)
代碼如下
詳細(xì)設(shè)計(jì)
(含主要的數(shù)據(jù)結(jié)構(gòu)、程序流程圖、關(guān)鍵代碼等)
數(shù)據(jù)格式
首先是數(shù)據(jù)的數(shù)據(jù)格式,這里我設(shè)置了一個(gè)Message類,格式如下:
TYPE: Information FROM: 11809 TO: 11810 TIME: 2022-01-05 17:18:49 CONTENT: test測試一共是5項(xiàng)數(shù)據(jù):
服務(wù)器
如果要實(shí)現(xiàn)聊天室,首先要先設(shè)計(jì)一個(gè)服務(wù)器,服務(wù)器的設(shè)計(jì)主要是Java多線程實(shí)現(xiàn)
下面簡單說明一下設(shè)計(jì)過程
一共有3類線程:
同時(shí)每一個(gè)客戶端的標(biāo)識(shí)是用他們本身的本地Port數(shù)據(jù)來標(biāo)識(shí)。
客戶端
界面如上,當(dāng)點(diǎn)擊登錄的時(shí)候,socket開始連接,ip地址為自行寫死的"127.0.0.1"端口也是寫死的"60001",然后登錄之后收到來自服務(wù)器的UserList類型的數(shù)據(jù)包,然后更新自己的在線用戶欄目,復(fù)位就是清0一個(gè)計(jì)數(shù)變量,清空按鈕是清空上下的textEdit控件,啟動(dòng)新進(jìn)程是為了調(diào)試,主要是用來啟動(dòng)一個(gè)新的子進(jìn)程,發(fā)送按鈕的邏輯是先清空發(fā)送欄,然后調(diào)用write()方法,把數(shù)據(jù)打包成Message格式,然后發(fā)送給服務(wù)器。
需要注意的是,要時(shí)刻注意判定是否在登錄的狀態(tài)下。
實(shí)驗(yàn)結(jié)果與分析
下面展示一下過程
可以看到連接成功,然后進(jìn)行數(shù)據(jù)交換
可以看到數(shù)據(jù)發(fā)送成功,同時(shí)在服務(wù)器端也能獲得數(shù)據(jù)
當(dāng)?shù)诙€(gè)客戶端斷開:
當(dāng)?shù)诙€(gè)斷開的時(shí)候,可以在服務(wù)器端看到14760已經(jīng)斷開,同時(shí)第一個(gè)客戶端可以看到14760已經(jīng)斷開了。
小結(jié)與心得體會(huì)
因?yàn)楸緦?shí)驗(yàn)用的是Qt和Java已經(jīng)封裝好的TCP庫,所以用起來很方便,因?yàn)橐郧耙呀?jīng)有TCP服務(wù)開發(fā)經(jīng)驗(yàn)所以本實(shí)驗(yàn)開發(fā)比較簡單。
個(gè)人覺得本次設(shè)計(jì)亮點(diǎn)在于設(shè)計(jì)Message類型和添加了心跳包。
=w=
總結(jié)
以上是生活随笔為你收集整理的计算机网络课程设计之网络聊天程序的设计与实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 调用jira_java中通过J
- 下一篇: python画正方形的代码_python