資源描述:
《基于tcp的網(wǎng)絡(luò)聊天室的設(shè)計》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、基于TCP的網(wǎng)絡(luò)聊天室的設(shè)計【基于TCP的網(wǎng)絡(luò)聊天室的設(shè)計】-實驗指導(dǎo)·一、實驗?zāi)康?.掌握通信規(guī)范的制定及實現(xiàn)。2.練習(xí)較復(fù)雜的網(wǎng)絡(luò)編程,能夠把協(xié)議設(shè)計思想應(yīng)用到現(xiàn)實應(yīng)用中。1.二、實驗內(nèi)容和要求?1.進(jìn)一步熟悉VC++6編程環(huán)境;2.利用VC++6進(jìn)行較復(fù)雜的網(wǎng)絡(luò)編程,完成網(wǎng)絡(luò)聊天室的設(shè)計及編寫;?三、實驗(設(shè)計)儀器設(shè)備和材料1.計算機(jī)及操作系統(tǒng):PC機(jī),Windows;2.網(wǎng)絡(luò)環(huán)境:可以訪問互聯(lián)網(wǎng);·四、TCP/IP程序設(shè)計基礎(chǔ)基于TCP/IP的通信基本上都是利用SOCKET套接字進(jìn)行數(shù)據(jù)通訊,
2、程序一般分為服務(wù)器端和用戶端兩部分。設(shè)計思路(VC6.0下):第一部分 服務(wù)器端一、創(chuàng)建服務(wù)器套接字(create)。二、服務(wù)器套接字進(jìn)行信息綁定(bind),并開始監(jiān)聽連接(listen)。三、接受來自用戶端的連接請求(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)閉套接字(
3、closesocket)。CSocket的編程步驟:(注意我們一定要在創(chuàng)建MFC程序第二步的時候選上WindowsSocket選項,其中ServerSocket是服務(wù)器端用到的,ClientSocket是客戶端用的。)???(1)構(gòu)造CSocket對象,如下例:CSocketServerSocket;CSocketClientSocket;(2)CSocket對象的Create函數(shù)用來創(chuàng)建WindowsSocket,Create()函數(shù)會自行調(diào)用Bind()函數(shù)將此Socket綁定到指定的地址上面。如下
4、例:ServerSocket.Create(823);//服務(wù)器端需要指定一個端口號,我們用823。ClientSocket.Create();//客戶端不用指定端口號。(3)現(xiàn)在已經(jīng)創(chuàng)建完基本的Socket對象了,現(xiàn)在我們來啟動它,對于服務(wù)器端,我們需要這個Socket不停的監(jiān)聽是否有來自于網(wǎng)絡(luò)上的連接請求,如下例:ServerSocket.Listen(5);//參數(shù)5是表示我們的待處理Socket隊列中最多能有幾個Socket。(4)對于客戶端我們就要實行連接了,具體實現(xiàn)如下例:ClientSoc
5、ket.Connect(CStringSerAddress,UnsingedintSerPort);//其中SerAddress是服務(wù)器的IP地址,SerPort是端口號。(5)服務(wù)器是怎么來接受這份連接的呢?它會進(jìn)一步調(diào)用Accept(ReceiveSocket)來接收它,而此時服務(wù)器端還須建立一個新的CSocket對象,用它來和客戶端進(jìn)行交流。如下例:CSocketReceiveSocket;ServerSocket.Accept(ReceiveSocket);(6)如果想在兩個程序之間接收或發(fā)送信
6、息,MFC也提供了相應(yīng)的函數(shù)。如下例:ServerSocket.Receive(String,Buffer);//String是你要發(fā)送的字符串,Buffer是發(fā)送字符串的緩沖區(qū)大小。ServerSocket.Send(String,Butter);//String是你要接收的字符串,Buffer是接收字符串的緩沖區(qū)大小。框架實現(xiàn):客戶端在MFC中創(chuàng)建對話框:voidCClientDlg::OnButtonReceive(){?CStringstrAddr="202.112.73.150";?unsig
7、nedintnPort=5050;?if(!ChatReceive.Create())?{???MessageBox("createfailed","Receive",MB_ICONSTOP);???return;?}?else?{???ChatReceive.Connect(strAddr,nPort);?}charsReceive[1024];?strAddr.Format(sReceive);?ChatReceive.Receive(sReceive,1024,0);?m_strEdit=sRec
8、eive;?UpdateData(FALSE);?ChatReceive.Close();}???服務(wù)器端創(chuàng)建對話框:voidCServerDlg::OnButtonSend(){?//TODO:Addyourcontrolnotificationhandlercodehere?CStringstrSendText;?unsignedintnPort=5050;?GetDlgItemText(IDC_EDIT,strSendText);?i