基于TCP的網(wǎng)絡(luò)聊天室的設(shè)計(jì)(共5頁)_第1頁
基于TCP的網(wǎng)絡(luò)聊天室的設(shè)計(jì)(共5頁)_第2頁
基于TCP的網(wǎng)絡(luò)聊天室的設(shè)計(jì)(共5頁)_第3頁
基于TCP的網(wǎng)絡(luò)聊天室的設(shè)計(jì)(共5頁)_第4頁
基于TCP的網(wǎng)絡(luò)聊天室的設(shè)計(jì)(共5頁)_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論