多線程通訊-TCP聊天程序-VC++

多線程通訊-TCP聊天程序-VC++

ID:42601414

大?。?0.50 KB

頁數(shù):14頁

時(shí)間:2019-09-18

多線程通訊-TCP聊天程序-VC++_第1頁
多線程通訊-TCP聊天程序-VC++_第2頁
多線程通訊-TCP聊天程序-VC++_第3頁
多線程通訊-TCP聊天程序-VC++_第4頁
多線程通訊-TCP聊天程序-VC++_第5頁
資源描述:

《多線程通訊-TCP聊天程序-VC++》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、操作系統(tǒng)課程設(shè)計(jì)——多線程通訊-TCP聊天程序-VC++操作系統(tǒng)課程設(shè)計(jì)任務(wù)書一、設(shè)計(jì)題目:多機(jī)進(jìn)程通信應(yīng)用Socket進(jìn)程通信技術(shù)編寫聊天室程序,實(shí)現(xiàn)基于服務(wù)器的并發(fā)多機(jī)信息轉(zhuǎn)發(fā)。如果各客戶端在線則可以實(shí)時(shí)聊天、發(fā)送接收文件,如果某客戶端離線,則發(fā)送給他的消息可由服務(wù)器端進(jìn)行內(nèi)容緩存,待重新連線后可以自動(dòng)接收通過服務(wù)器轉(zhuǎn)發(fā)的信息或文件。緩存與轉(zhuǎn)發(fā)的控制算法可參考操作系統(tǒng)課程中生產(chǎn)者消費(fèi)者進(jìn)程同步方法、緩沖池技術(shù)等相關(guān)理論。二、設(shè)計(jì)思路和功能的詳細(xì)描述采用TCP協(xié)議,所以屬于客戶機(jī)/服務(wù)器模式,因此需要聊天服務(wù)器端和

2、聊天客戶端兩個(gè)程序,實(shí)現(xiàn)的功能是:任意一臺(tái)裝有客戶端程序的計(jì)算機(jī)都可以通過服務(wù)器端的IP地址與服務(wù)器相連,然后進(jìn)入聊天室與連接到服務(wù)器的其他客戶進(jìn)行聊天。當(dāng)客戶聊天結(jié)束時(shí),可以點(diǎn)斷開與服務(wù)器斷開連接,以釋放進(jìn)程讓其他等待的客戶進(jìn)入聊天室,本聊天室最大同時(shí)支持50個(gè)客戶端的連接,如果服務(wù)器配置較高可以修改程序來增加同時(shí)連接數(shù)。三、采用的方法、技術(shù)、運(yùn)行環(huán)境及其配置本聊天程序采用TCP協(xié)議,用VC++編寫,屬于客戶機(jī)/服務(wù)器模式。采用了多線程的機(jī)制。其中使用windowsSockets實(shí)現(xiàn)多臺(tái)計(jì)算機(jī)(多個(gè)進(jìn)程)間的通信,

3、SOCKET實(shí)際在計(jì)算機(jī)中提供了一個(gè)通信端口,可以通過這個(gè)端口與任何一個(gè)具有SOCKET接口的計(jì)算機(jī)通信。應(yīng)用程序在網(wǎng)絡(luò)上傳輸,接收的信息都通過這個(gè)SOCKET接口來實(shí)現(xiàn)。在客戶機(jī)/服務(wù)器模式中客戶應(yīng)用程序向服務(wù)器程序請(qǐng)求服務(wù)。一個(gè)服務(wù)程序通常在一個(gè)眾所周知的地址監(jiān)聽對(duì)服務(wù)的請(qǐng)求,也就是說,服務(wù)進(jìn)程一直處于休眠狀態(tài),直到一個(gè)客戶對(duì)這個(gè)服務(wù)的地址提出了連接請(qǐng)求。在這個(gè)時(shí)刻,服務(wù)程序被“驚醒”并且為客戶提供服務(wù)即對(duì)客戶的請(qǐng)求作出適當(dāng)?shù)姆磻?yīng)。本聊天程序就是基于這中思想實(shí)現(xiàn)的,程序分為兩大部分:TCP聊天服務(wù)器端和TCP聊天

4、客戶端。兩者都擁有各自的SOCKET接口,其中服務(wù)器端SOCKET接口需要綁定到固定地址上(實(shí)現(xiàn)語句:ock=Socket(AF_INET,SOCK_STREAM,0);),等待客戶端的連接(實(shí)現(xiàn)語句:listen(sock,5);)。等待客戶端的連接的過程就是通過多進(jìn)程機(jī)制來實(shí)現(xiàn)的。聊天程序是在VISUALC++6.0上編譯實(shí)現(xiàn)的,在WINDOWS2000,XP上測(cè)試運(yùn)行成功。對(duì)客戶計(jì)算機(jī)配置無特殊要求,由于所設(shè)置的最大連接進(jìn)程為50,所以對(duì)服務(wù)器要求也不高。四、關(guān)鍵源程序及其詳細(xì)的注釋<一>、服務(wù)器端:1、Soc

5、ket初始化//初始化對(duì)話框BOOLCCSocketDlg::OnInitDialog(){count=0;m_list.InsertColumn(0,"消息");m_list.SetColumnWidth(0,435);m_edit.SetLimitText(99);for(inti=0;i<50;i++)//初始化SOCKET數(shù)組msgsock=NULL;serv.sin_addr.s_addr=htonl(INADDR_ANY);//設(shè)定地址serv.sin_family=AF_INET;serv.sin_po

6、rt=5000;//htons(5000);addlen=sizeof(serv);m_button.EnableWindow(FALSE);sock=socket(AF_INET,SOCK_STREAM,0);//創(chuàng)建socketif(bind(sock,(sockaddr*)&serv,addlen))//綁定{m_edit.SetWindowText("綁定錯(cuò)誤");}else{m_edit.SetWindowText("服務(wù)器創(chuàng)建成功");//顯示提示信息,表示服務(wù)器創(chuàng)建成功listen(sock,5);//

7、開始偵聽AfxBeginThread(&thread,0);//調(diào)用線程}returnTRUE;}2、接收線程//服務(wù)器線程UINTthread(LPVOIDp){charbuff[100];//定義緩沖區(qū)CSizesize;size.cx=0;size.cy=30;ints=1,msgcount,loop=1,flag=0;CCSocketDlg*dlg=(CCSocketDlg*)AfxGetApp()->GetMainWnd();//獲得當(dāng)前運(yùn)行對(duì)話框句柄msgcount=dlg->getcount();//獲

8、取還沒有被占用的數(shù)組序號(hào)if(msgcount==-1)//如果不等于-1,則表示,還有空缺SOCKETloop=0;if(loop){s=1;dlg->msgsock[msgcount]=accept(dlg->sock,(sockaddr*)&(dlg->serv),&(dlg->addlen));//用空缺的SOCKET等待客戶連接if(

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。