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