資源描述:
《基于socket接口的linux與windows網(wǎng)絡(luò)聊天室設(shè)計(jì)與實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、基于Socket接口的Linux與Windows網(wǎng)絡(luò)聊天室設(shè)計(jì)與實(shí)現(xiàn)摘要:為了實(shí)現(xiàn)Linux與Windows跨平臺(tái)通信,及時(shí)共享信息,構(gòu)建了一個(gè)適用于跨平臺(tái)的網(wǎng)絡(luò)聊天室通信程序。先搭建跨平臺(tái)通信環(huán)境,然后使用Socket套接字網(wǎng)絡(luò)編程接口實(shí)現(xiàn)通信。整個(gè)系統(tǒng)采用客戶機(jī)/服務(wù)器(C/S)模型,Windows客戶端采用MFC框架編寫,Linux服務(wù)器和客戶端均采用C語言實(shí)現(xiàn)。通過測(cè)試,Linux和Windows的客戶端可以成功連接到服務(wù)器,從而實(shí)現(xiàn)跨平臺(tái)網(wǎng)絡(luò)聊天功能。關(guān)鍵詞:Linux;Windows;套接字;客戶機(jī)/服務(wù)器DOIDOI:10.11907/rjdk.151230中圖分類號(hào):TP
2、319文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):16727800(2015)006009403作者簡(jiǎn)介作者簡(jiǎn)介:陳潔(1990-),女,山東菏澤人,山東科技大學(xué)信息科學(xué)與工程學(xué)院碩士研究生,研究方向?yàn)橛?jì)算機(jī)網(wǎng)絡(luò)應(yīng)用技術(shù);孟曉景(1962-),男,浙江紹興人,山東科技大學(xué)信息科學(xué)與工程學(xué)院教授,研究方向?yàn)橛?jì)算機(jī)網(wǎng)絡(luò)。0引言7Linux是一個(gè)基于POSIX和UNIX的多任務(wù)、多用戶、支持多線程的操作系統(tǒng)。Linux在眾多方面表現(xiàn)出強(qiáng)大的優(yōu)勢(shì),通常用在控制領(lǐng)域以提高系統(tǒng)性能。然而,目前使用最多的Windows操作系統(tǒng)圖形界面友好,擁有良好的集成開發(fā)環(huán)境,操作簡(jiǎn)單,深受廣大用戶的喜愛。兩種操作系統(tǒng)各有千秋,越來越
3、多場(chǎng)合同時(shí)使用,這就出現(xiàn)了跨平臺(tái)的通信問題。對(duì)此,本文通過Socket套接口來實(shí)現(xiàn)不同操作系統(tǒng)之間的實(shí)時(shí)聊天,運(yùn)用C/S模式設(shè)計(jì)出Windows與Linux操作系統(tǒng)間可以互相通信的網(wǎng)絡(luò)聊天室,本客戶端可以顯示其它客戶端的消息,實(shí)現(xiàn)了信息的及時(shí)共享。1Socket編程原理與過程1.1Socket編程原理Socket[1]作為BSDUNIX的進(jìn)程通信機(jī)制,通常也稱作“套接字”,用于描述IP地址和端口,是網(wǎng)絡(luò)通信的基本單元?;赥CP/IP協(xié)議的Socket編程是一種典型的會(huì)話編程方式,它既適用于客戶/服務(wù)器通信方式,又適用于點(diǎn)對(duì)點(diǎn)通信方式。套接字通過調(diào)用系統(tǒng)提供的庫(kù)函數(shù)實(shí)現(xiàn)數(shù)據(jù)傳輸,不需要過
4、多了解底層的一些細(xì)節(jié)。本文采用C/S[2]通信方式編程。通信服務(wù)方式分為面向連接和無連接,這里使用的是面向連接的流套接字。1.2Socket編程過程Socket編程過程分為客戶端和服務(wù)器端編程,大致通信過程如圖1所示。7Socket編程過程首先需要?jiǎng)?chuàng)建套接字socket(),然后服務(wù)器端綁定套接字bind(),即將本地主機(jī)IP地址、端口號(hào)與創(chuàng)建的套接字綁定。綁定完成后進(jìn)入監(jiān)聽狀態(tài)listen(),等待客戶端連接??蛻舳巳绻l(fā)起連接connect(),服務(wù)器和客戶端的底層就進(jìn)行三次握手接受連接accept()。連接成功后,雙方就可以收發(fā)數(shù)據(jù)了。在此連接上使用send()函數(shù)發(fā)送數(shù)據(jù),在連接
5、的另一端使用rev()函數(shù)接收數(shù)據(jù),這樣,Socket就連接了兩端的應(yīng)用程序。套接字機(jī)制提供了一系列的系統(tǒng)調(diào)用函數(shù),通過這些函數(shù)調(diào)用,應(yīng)用程序就可以在掩蓋通信協(xié)議細(xì)節(jié)的情況下實(shí)現(xiàn)網(wǎng)絡(luò)傳輸。2通信環(huán)境搭建本系統(tǒng)是跨平臺(tái)網(wǎng)絡(luò)聊天室,Linux為服務(wù)器端,用于接收客戶端請(qǐng)求,而客戶端可以是Windows操作系統(tǒng),也可以是Linux操作系統(tǒng)。為避免使用多個(gè)計(jì)算機(jī)的麻煩,本系統(tǒng)在一臺(tái)計(jì)算機(jī)上安裝虛擬機(jī),虛擬機(jī)為L(zhǎng)inux操作系統(tǒng),另外一個(gè)是Win7操作系統(tǒng),在進(jìn)行編程之前,要先檢驗(yàn)Win7操作系統(tǒng)與Linux操作系統(tǒng)是否可以正常進(jìn)行網(wǎng)絡(luò)通信。把虛擬機(jī)端設(shè)置成橋接連接方式[3],這樣虛擬機(jī)就可以當(dāng)成
6、獨(dú)立機(jī)。主機(jī)IP地址為192.168.131.153,虛擬機(jī)地址為192.168.131.152,通過ping命令檢驗(yàn)互通性。3跨平臺(tái)通信設(shè)計(jì)3.1Linux平臺(tái)服務(wù)器設(shè)計(jì)7通過此函數(shù)把消息發(fā)送給每個(gè)連接的客戶端;服務(wù)端程序父子進(jìn)程分別負(fù)責(zé)發(fā)送和接收數(shù)據(jù),以避免數(shù)據(jù)沖撞;本程序服務(wù)端端口號(hào)設(shè)定為:3490,端口綁定函數(shù)intbindPort(unsignedshortintport),此函數(shù)用來創(chuàng)建socket(AF_INET,SOCK_STREAM,0)流套接字,并綁定到指定的端口,在Linux操作系統(tǒng)下不需要初始化。當(dāng)有客戶端請(qǐng)求連接時(shí),accept(sockfd,(structso
7、ckaddr*)&their_addr,&sin_size)用來接受客戶端連接。連接成功后,服務(wù)器創(chuàng)建子進(jìn)程,子進(jìn)程ppid=fork()。父進(jìn)程負(fù)責(zé)接收數(shù)據(jù),子進(jìn)程負(fù)責(zé)發(fā)送數(shù)據(jù),把接收到的數(shù)據(jù)轉(zhuǎn)發(fā)給已連接的客戶端。3.2客戶端設(shè)計(jì)因?yàn)榇顺绦驗(yàn)榱奶焓?,所以客戶端設(shè)計(jì)分為Windows平臺(tái)和Linux平臺(tái)。3.2.1Windows平臺(tái)客戶端設(shè)計(jì)Windows客戶端采用MFC框架來編寫socket程序[4]。打開VisualC++6.0