下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上基于TCP的網(wǎng)絡(luò)聊天室的設(shè)計(jì)【基于TCP的網(wǎng)絡(luò)聊天室的設(shè)計(jì)】-實(shí)驗(yàn)指導(dǎo)· 一、實(shí)驗(yàn)?zāi)康?1掌握通信規(guī)范的制定及實(shí)現(xiàn)。 2練習(xí)較復(fù)雜的網(wǎng)絡(luò)編程,能夠把協(xié)議設(shè)計(jì)思想應(yīng)用到現(xiàn)實(shí)應(yīng)用中。 1. 二、實(shí)驗(yàn)內(nèi)容和要求 1進(jìn)一步熟悉VC+6編程環(huán)境; 2利用VC+6進(jìn)行較復(fù)雜的網(wǎng)絡(luò)編程,完成網(wǎng)絡(luò)聊天室的設(shè)計(jì)及編寫; 三、實(shí)驗(yàn)(設(shè)計(jì))儀器設(shè)備和材料 1計(jì)算機(jī)及操作系統(tǒng):PC機(jī),Windows; 2網(wǎng)絡(luò)環(huán)境:可以訪問互聯(lián)網(wǎng); · 四、 TCP/IP程序設(shè)計(jì)基礎(chǔ) 基于TCP/IP的通信基本上都是利用SOCKET套接字進(jìn)行數(shù)據(jù)通訊,程序一般分為服
2、務(wù)器端和用戶端兩部分。設(shè)計(jì)思路(VC6.0下): 第一部分服務(wù)器端 一、創(chuàng)建服務(wù)器套接字(create)。 二、服務(wù)器套接字進(jìn)行信息綁定(bind),并開始監(jiān)聽連接(listen)。 三、接受來自用戶端的連接請(qǐng)求(accept)。 四、開始數(shù)據(jù)傳輸(send/receive)。 五、關(guān)閉套接字(closesocket)。 第二部分客戶端 一、創(chuàng)建客戶套接字(create)。 二、與遠(yuǎn)程服務(wù)器進(jìn)行連接(connect),如被接受則創(chuàng)建接收進(jìn)程。 三、開始數(shù)據(jù)傳輸(send/receive)。 四、關(guān)閉套接字(closesocket)。 CSocket的編程步驟:(注意我們一定要在創(chuàng)建MFC程序第
3、二步的時(shí)候選上Windows Socket選項(xiàng),其中ServerSocket是服務(wù)器端用到的,ClientSocket是客戶端用的。)? ()構(gòu)造CSocket對(duì)象,如下例: CSocket ServerSocket;CSocket ClientSocket;()CSocket對(duì)象的Create函數(shù)用來創(chuàng)建Windows Socket,Create()函數(shù)會(huì)自行調(diào)用Bind()函數(shù)將此Socket綁定到指定的地址上面。如下例: ServerSocket.Create(823); /服務(wù)器端需要指定一個(gè)端口號(hào),我們用823。 ClientSocket.Create(); /客戶端不用指定端口號(hào)。
4、 ()現(xiàn)在已經(jīng)創(chuàng)建完基本的Socket對(duì)象了,現(xiàn)在我們來啟動(dòng)它,對(duì)于服務(wù)器端,我們需要這個(gè)Socket不停的監(jiān)聽是否有來自于網(wǎng)絡(luò)上的連接請(qǐng)求,如下例: ServerSocket.Listen(5);/參數(shù)5是表示我們的待處理Socket隊(duì)列中最多能有幾個(gè)Socket。 ()對(duì)于客戶端我們就要實(shí)行連接了,具體實(shí)現(xiàn)如下例: ClientSocket.Connect(CString SerAddress,Unsinged int SerPort);/其中SerAddress是服務(wù)器的IP地址,SerPort是端口號(hào)。 ()服務(wù)器是怎么來接受這份連接的呢?它會(huì)進(jìn)一步調(diào)用Accept(ReceiveSo
5、cket)來接收它,而此時(shí)服務(wù)器端還須建立一個(gè)新的CSocket對(duì)象,用它來和客戶端進(jìn)行交流。如下例: CSocket ReceiveSocket;ServerSocket.Accept(ReceiveSocket);()如果想在兩個(gè)程序之間接收或發(fā)送信息,MFC也提供了相應(yīng)的函數(shù)。如下例: ServerSocket.Receive(String,Buffer); /String是你要發(fā)送的字符串,Buffer是發(fā)送字符串的緩沖區(qū)大小。ServerSocket.Send(String,Butter);/String是你要接收的字符串,Buffer是接收字符串的緩沖區(qū)大小。 框架實(shí)現(xiàn): 客戶端在
6、MFC中創(chuàng)建對(duì)話框: void CClientDlg:OnButtonReceive() CString strAddr="202.112.73.150" unsigned int nPort=5050; if(!ChatReceive.Create() MessageBox("create failed","Receive",MB_ICONSTOP); return; else
7、0; ChatReceive.Connect(strAddr,nPort); char sReceive1024; strAddr.Format(sReceive); ChatReceive.Receive(sReceive,1024,0); m_strEdit=sReceive; UpdateData(FALSE); ChatReceive.Close();? 服務(wù)器端創(chuàng)建對(duì)話框: void CServerDlg:OnButtonSend() / TODO: Add y
8、our control notification handler code here CString strSendText; unsigned int nPort=5050; GetDlgItemText(IDC_EDIT,strSendText); if(!ChatSend.Create(nPort) MessageBox("create failed"); else ChatSend.Listen();
9、; ChatSend.Accept(server); server.Send(strSendText,1000,0); server.Close(); ChatSend.Close();? 五、 基于TCP的網(wǎng)絡(luò)聊天室的設(shè)計(jì)要求:? (1)制定通信規(guī)范。 (2)設(shè)計(jì)界面如下: 1 服務(wù)器端 2 客戶端 (3)設(shè)計(jì)思路: TCP/IP數(shù)據(jù)通信 - “聊天”消息傳輸格式 客戶機(jī) -à 服務(wù)器 ()傳輸“用戶名” STX+1+用戶名+ETX() 悄悄話 STX+2+用戶名+”,”+內(nèi)容+ETX() 對(duì)所有人說 STX+
10、3+內(nèi)容+ETX? ?服務(wù)器-à 客戶機(jī) ()首次傳輸在線用戶名 STX+1+用戶名+ETX()傳輸新到用戶名 STX+2+用戶名+ETX()傳輸離線用戶名 STX+3+用戶名+ETX()傳輸聊天數(shù)據(jù) STX+4+內(nèi)容+ETX(注:STX為CHR(2),ETX 為CHR(3) 服務(wù)器端 () 定義一個(gè)動(dòng)態(tài)數(shù)組存儲(chǔ)連接用戶。定義一個(gè)全局變量存儲(chǔ)連接用戶的元素個(gè)數(shù)。 () 用一個(gè)使用UDP協(xié)議的SOCKET套接字完成發(fā)送服務(wù)器IP地址。 在該控件的數(shù)據(jù)接收事件中發(fā)送服務(wù)器IP地址 () 用一個(gè)使用TCP協(xié)議的SOCKET套接字?jǐn)?shù)組完成TCP連接及數(shù)據(jù)發(fā)送和接收,處理它的連接請(qǐng)求事件。 (
11、)SOCKET套接字的數(shù)據(jù)到達(dá)事件中首先接收數(shù)據(jù)到一個(gè)變量中,然后從這個(gè)變量中逐個(gè)提取消息,并對(duì)每個(gè)消息判斷消息類型及做相應(yīng)處理: case? 類型1? 傳輸“用戶名” 修改用來存儲(chǔ)連接用戶的元素個(gè)數(shù)的數(shù)組 向所有在線用戶發(fā)送該用戶名消息 向該用戶發(fā)送所有在線用戶名的消息 case 類型2? 悄悄話 向源和目標(biāo)用戶發(fā)送消息 case 類型3? 對(duì)所有人說 向所有在線用戶發(fā)送消息 () 服務(wù)器端的斷開連接事件中 修改存儲(chǔ)連接用戶的元素個(gè)數(shù)的數(shù)組,卸載此控件,向所有在線用戶發(fā)送消息離線。 客戶端 () 添加一個(gè)SOCKET套接字,窗體加載時(shí)使用UDP協(xié)議,發(fā)廣播數(shù)據(jù)報(bào);等待接收到服務(wù)器主機(jī)地址后使
12、用TCP協(xié)議完成連接及數(shù)據(jù)傳送。 () 在客戶端的數(shù)據(jù)到達(dá)事件中接受數(shù)據(jù),如果客戶端協(xié)議使用的是UDP協(xié)議,關(guān)閉客戶端連接,重新設(shè)置客戶端的協(xié)議、遠(yuǎn)程端口號(hào)、本地端口等參數(shù),再調(diào)用連接方法請(qǐng)求連接,輸入用戶名,連接成功時(shí)發(fā)送用戶名消息。否則,從接受的數(shù)據(jù)字符串中逐個(gè)提取消息,并對(duì)每個(gè)消息判斷消息類型及做相應(yīng)處理: case 類型1? 首次傳輸在線用戶名 將用戶名加入到用戶列表中; case 類型2? 首次傳輸在線用戶名 將用戶名加入到用戶列表中; 在聊天內(nèi)容中添加該用戶名加盟; case類型3? 傳輸離線用戶名 從用戶列表中刪除該用戶名 在聊天內(nèi)容中添加該用戶名退出; case類型4? 傳輸聊天數(shù)據(jù) 在聊天內(nèi)容中添加聊天數(shù)據(jù); () 在命令按紐觸發(fā)事件中發(fā)送聊天內(nèi)容 根據(jù)用戶列表中的當(dāng)前用戶決定消息類
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版科技創(chuàng)新合伙人股權(quán)期權(quán)激勵(lì)與業(yè)績(jī)考核協(xié)議3篇
- 承德應(yīng)用技術(shù)職業(yè)學(xué)院《中外電視史》2023-2024學(xué)年第一學(xué)期期末試卷
- 成都銀杏酒店管理學(xué)院《有限元及ANSYS》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年物流行業(yè)節(jié)能減排合作協(xié)議2篇
- 2025版水力發(fā)電機(jī)組深度維護(hù)保養(yǎng)服務(wù)合同
- 二零二五年型汽車吊機(jī)租賃及安全防護(hù)設(shè)施合同3篇
- 2024年版通風(fēng)與空調(diào)安裝合同
- 萬兆小區(qū)項(xiàng)目方案及實(shí)施路徑分析
- 二零二五年度2025版高科技企業(yè)員工股權(quán)離婚處理協(xié)議樣本3篇
- 2025版家庭裝修售后維修服務(wù)承攬合同
- GB∕T 25684.5-2021 土方機(jī)械 安全 第5部分:液壓挖掘機(jī)的要求
- 特種涂料類型——耐核輻射涂料的研究
- 二氧化碳可降解塑料生產(chǎn)項(xiàng)目建議書
- 化工裝置常用英語詞匯對(duì)照
- 幼兒園幼兒教育數(shù)學(xué)領(lǐng)域核心經(jīng)驗(yàn)
- 病例討論麻醉科PPT課件
- EBZ220A掘進(jìn)機(jī)幻燈片
- 集體跳繩賽規(guī)則
- 煤礦調(diào)度工作培訓(xùn)內(nèi)容
- 機(jī)械原理課程設(shè)計(jì)-旋轉(zhuǎn)型灌裝機(jī)運(yùn)動(dòng)方案設(shè)計(jì)
- 標(biāo)準(zhǔn)《大跨徑混凝土橋梁的試驗(yàn)方法》
評(píng)論
0/150
提交評(píng)論