




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì) 基于c/s結(jié)構(gòu)的套接字程序設(shè)計(jì)(tcp) 學(xué)院:信息技術(shù)工程學(xué)院 班級(jí):計(jì)科1011班 姓名:周玲玲 學(xué)號(hào): 02210101140 指導(dǎo)老師: 黃彥目錄 1、引言-1 課題目的及要求-2 研究設(shè)想-2 相關(guān)理論-2 預(yù)期結(jié)果-2 2、關(guān)鍵詞-2 3、正文-3 理論基礎(chǔ)-3 設(shè)計(jì)方法及思路-3 編程方法-4 主要內(nèi)容及其分析-6 實(shí)驗(yàn)結(jié)果及對(duì)其討論-9 4、結(jié)論-10 核心-10 難點(diǎn)-10 問(wèn)題-10不足及對(duì)其改進(jìn)-105、致謝-11 6、參考文獻(xiàn)-11 引言基于c/s結(jié)構(gòu)的套接字程序設(shè)計(jì)(tcp)1、目的及要求(1)目的和意義通過(guò)編程了解c/s結(jié)構(gòu)的網(wǎng)絡(luò)通信模型;掌握基
2、于c/s結(jié)構(gòu)的windows socket tcp的程序設(shè)計(jì)方法。(2)基本要求按照c/s模型編寫(xiě)兩個(gè)程序。一個(gè)為客戶端程序,另一是服務(wù)器端程序;對(duì)于c/s兩端都應(yīng)輸出必要的日志、出錯(cuò)或診斷信息。(3)小組人數(shù):22、研究設(shè)想 能夠?qū)崿F(xiàn)當(dāng)客戶端向服務(wù)器端發(fā)送請(qǐng)求時(shí),服務(wù)器端能夠向客戶端傳送數(shù)據(jù)。3、相關(guān)理論 tcp是一種面向鏈接的,可靠的傳輸協(xié)議。tcp協(xié)議在網(wǎng)絡(luò)層ip協(xié)議的基礎(chǔ)上,向應(yīng)用層用戶進(jìn)程提供可靠地全雙工的數(shù)據(jù)流傳輸。并且通過(guò)創(chuàng)建的流式套接字實(shí)現(xiàn)服務(wù)器端與客戶端的數(shù)據(jù)傳送。4、預(yù)期結(jié)果 實(shí)現(xiàn)服務(wù)器端與客戶端的數(shù)據(jù)傳送。關(guān)鍵詞流式套接字;tcp/ip;服務(wù)器/客戶端; 正文1、理論基礎(chǔ)
3、應(yīng)用層通過(guò)傳輸層進(jìn)行數(shù)據(jù)通信時(shí),tcp會(huì)遇到同時(shí)為多個(gè)應(yīng)用程序進(jìn)程提供并發(fā)服務(wù)的問(wèn)題。多個(gè)tcp連接或多個(gè)應(yīng)用程序進(jìn)程可能需要通過(guò)同一個(gè)tcp協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接,許多計(jì)算機(jī)操作系統(tǒng)為應(yīng)用程序與tcpip協(xié)議交互提供了稱(chēng)為套接字(socket)的接口,區(qū)分不同應(yīng)用程序進(jìn)程間的網(wǎng)絡(luò)通信和連接。網(wǎng)絡(luò)化的應(yīng)用程序在開(kāi)始任何通訊之前都必需要?jiǎng)?chuàng)建套接字。socket可以看成在兩個(gè)程序進(jìn)行通訊連接中的一個(gè)端點(diǎn),一個(gè)程序?qū)⒁欢涡畔?xiě)入socket中,該socket將這段信息發(fā)送給另外一個(gè)socket中,使這段信息能傳送到其他程序中。套接字,是支持tcp/ip的網(wǎng)絡(luò)通信的基本操作
4、單元,可以看做是不同主機(jī)之間的進(jìn)程進(jìn)行雙向通信的端點(diǎn),簡(jiǎn)單的說(shuō)就是通信的兩方的一種約定,用套接字中的相關(guān)函數(shù)來(lái)完成通信過(guò)程。流套接字用于提供面向連接、可靠的數(shù)據(jù)傳輸服務(wù)。該服務(wù)將保證數(shù)據(jù)能夠?qū)崿F(xiàn)無(wú)差錯(cuò)、無(wú)重復(fù)發(fā)送,并按順序接收。流套接字之所以能夠?qū)崿F(xiàn)可靠的數(shù)據(jù)服務(wù),原因在于其使用了傳輸控制協(xié)議,即tcp(the transmission control protocol)協(xié)議。2、設(shè)計(jì)方法及思路客戶機(jī)與服務(wù)器建立連接,連接是通過(guò)申請(qǐng)的套接字實(shí)現(xiàn)的客戶打開(kāi)一個(gè)套接字并把它約束在一個(gè)端口上如果成功就相當(dāng)于建立一個(gè)虛擬文件以后就可以在虛擬文件上寫(xiě)數(shù)據(jù)并通過(guò)網(wǎng)絡(luò)向外傳送,完成連接后就可以通信了??蛻魴C(jī)
5、向服務(wù)器發(fā)送請(qǐng)求,打開(kāi)一個(gè)連接后,客戶機(jī)把請(qǐng)求消息送到服務(wù)器的停留端口上,完成提出請(qǐng)操作。服務(wù)器在處理完客戶的請(qǐng)求之后,要向客戶機(jī)發(fā)送響應(yīng)消息。客戶和服務(wù)器雙方都可以通過(guò)關(guān)閉套接字來(lái)結(jié)束tcp/ip對(duì)話。當(dāng)使用tcp/ip協(xié)議一發(fā)客戶服務(wù)器服務(wù)程序時(shí),服務(wù)器需要等待任意數(shù)量客戶端的連接,以便以他們提供服務(wù)??蛻舳诉B接服務(wù)器時(shí),必須先知道服務(wù)器的名稱(chēng)。在tcp/ip中,就是服務(wù)器的ip地址和端口號(hào)。bind()函數(shù)實(shí)現(xiàn)將服務(wù)器綁定到一個(gè)已知的名字上的功能。接下來(lái)要將服務(wù)器套接字設(shè)置為監(jiān)聽(tīng)狀態(tài),這是通過(guò)listen()函數(shù)完成的。在監(jiān)聽(tīng)狀態(tài)下,如果客戶端向服務(wù)器發(fā)起連接請(qǐng)求,服務(wù)器通過(guò)調(diào)用acce
6、pt()函數(shù)來(lái)接受該接連請(qǐng)求。服務(wù)器與客戶端完成連接后,就可以進(jìn)行數(shù)據(jù)通信了。對(duì)客戶端來(lái)說(shuō),首先調(diào)用connect()函數(shù)向服務(wù)器發(fā)出連接請(qǐng)求。如果服務(wù)器接受了該請(qǐng)求,接下來(lái)就可以與服務(wù)器通信了。開(kāi)發(fā)套接字應(yīng)用程序時(shí),首先應(yīng)進(jìn)行windows sockets的初始化,加載windows sockets的實(shí)現(xiàn),然后創(chuàng)建套接字,對(duì)tcp套接字來(lái)說(shuō),需要在socket()函數(shù)或都wsasocket()函數(shù)中指明sock_stream套接字類(lèi)型。當(dāng)服務(wù)器和客戶端通信結(jié)束時(shí),關(guān)閉套接字,釋放windows sockets的實(shí)現(xiàn)。流程如下:服務(wù)器:創(chuàng)建套接字綁定監(jiān)聽(tīng)接受連接收發(fā)數(shù)據(jù)關(guān)閉客戶端:創(chuàng)建套接字連
7、接收發(fā)數(shù)據(jù)關(guān)閉3、編程方法tcp/tp流式套接字的編程步驟 (客戶端程序 ) 1)加載套接字庫(kù)2)創(chuàng)建套接字(socket)。3)向服務(wù)器發(fā)出連接請(qǐng)求(connect)。4)和服務(wù)器端進(jìn)行通信(send/recv)。5)關(guān)閉套接字。socket-connect-send/recv 我的客戶端所要用到的主要函數(shù)是recv()函數(shù)recv()函數(shù)和wsarevc()函數(shù)用于接受數(shù)據(jù)。recv()函數(shù)聲明如下:int recv(socket s,char far* buf,int len,int flags);send()函數(shù)send()和wsasend()函數(shù)用于發(fā)送數(shù)據(jù)。send()函數(shù)聲明如下
8、:int send(socket s,const char far* buf,int len,int flags);connect()函數(shù)connect()函數(shù)實(shí)現(xiàn)連接服務(wù)器功能。該函數(shù)聲明如下:int connect(socket s,const struct sockaddr far* name,int namelen);closesocket()函數(shù)closesocket()函數(shù)關(guān)閉套接字,釋放后占資源。該函數(shù)聲明如下:int closesocket(socket s);4、主要內(nèi)容及對(duì)其分析客戶端源程序#include #include#include #include #includ
9、e #pragma comment(lib,ws2_32.lib)int main()wsadata wsadata;socket clientsocket;sockaddr_in serveraddr;int serverport=4000;char serveripaddr50=127.0.0.1;char*senddata=i am a client.n please send me a string of data!;char receivebuffer1024;int sendlength=-1;int result=-1;if(result=wsastartup(makeword(
10、2,2),&wsadata)!=0)printf(wsastartup failed with error%dn,result);return 0;/1.socket建立客戶端流式套接字,返回套接字號(hào)clientsocket=socket(af_inet,sock_stream,ipproto_tcp);/創(chuàng)建客戶端套接字if(clientsocket0)printf(socket failed with error%dn,wsagetlasterror();return 0;memset(&serveraddr,0,sizeof(serveraddr);serveraddr.sin_fami
11、ly=af_inet; /地址簇serveraddr.sin_port=htons(serverport);/同服務(wù)器端端口地址serveraddr.sin_addr.s_addr=inet_addr(serveripaddr);/服務(wù)器端ip地址/2.將套接字與服務(wù)器建立連接result=connect(clientsocket,(sockaddr*)&serveraddr,sizeof(serveraddr);/將套接字與服務(wù)器建立連接if(result0)printf(connect failed with error%dn,wsagetlasterror();return 0;/3.發(fā)
12、送請(qǐng)求給服務(wù)器sendlength=send(clientsocket,senddata,strlen(senddata),0);/在套接字上發(fā)送信息if(sendlength0)printf(send failed with error%dn,wsagetlasterror();return 0;else printf(發(fā)送的信息:%sn,senddata);int receivelen;/4.接收服務(wù)器發(fā)來(lái)的數(shù)據(jù)domemset(receivebuffer,0,sizeof(receivebuffer);receivelen=recv(clientsocket,receivebuffer,
13、sizeof(receivebuffer),0);if(receivelen0)/在套接字上接受信息printf(receive failed with error %dn,wsagetlasterror();return 0;elseprintf(接收的信息:%sn,receivebuffer);while(receivelen!=0);if(closesocket(clientsocket)=socket_error)/關(guān)閉客戶端套接字printf(closesocket failed with error%dn,wsagetlasterror();if(wsacleanup()=sock
14、et_error)/注銷(xiāo),并釋放資源printf(wsacleanup failed with error%dn,wsagetlasterror(); system(pause); return exit_success;當(dāng)客戶端已經(jīng)與服務(wù)器建立連接后,那么我的客戶端程序就可以向服務(wù)器端發(fā)送數(shù)據(jù)請(qǐng)求,等待服務(wù)器響應(yīng),之后將接受客戶端發(fā)送過(guò)來(lái)的數(shù)據(jù),當(dāng)完成數(shù)據(jù)接受后,可以關(guān)閉連接。5、實(shí)驗(yàn)結(jié)果及對(duì)其討論服務(wù)器端發(fā)送數(shù)據(jù),客戶端能夠成功地接受數(shù)據(jù)結(jié)論我們組這次做的課題的核心就是通過(guò)套接字在客戶端和服務(wù)器之間建立連接,在建立連接之后實(shí)現(xiàn)客戶端與服務(wù)器之間的通信,難點(diǎn)是在設(shè)計(jì)程序方面,既因?yàn)樯婕跋嚓P(guān)函
15、數(shù)的調(diào)用,又因?yàn)槲议_(kāi)始對(duì)套接字的應(yīng)用不熟悉。這里面涉及些問(wèn)題什么是套接字,什么是流式套接字,為什么用流式套接字。套接字,是支持tcp/ip的網(wǎng)絡(luò)通信的基本操作單元,可以看做是不同主機(jī)之間的進(jìn)程進(jìn)行雙向通信的端點(diǎn),簡(jiǎn)單的說(shuō)就是通信的兩方的一種約定,用套接字中的相關(guān)函數(shù)來(lái)完成通信過(guò)程,它的存在是為了區(qū)別不同應(yīng)用程序進(jìn)程間的網(wǎng)絡(luò)通信和連接。流套接字用于提供面向連接、可靠的數(shù)據(jù)傳輸服務(wù),又因?yàn)樵摲?wù)將保證數(shù)據(jù)能夠?qū)崿F(xiàn)無(wú)差錯(cuò)、無(wú)重復(fù)發(fā)送,并按順序接收,所以用了流式套接字。我們做的課題不足之處是不能實(shí)現(xiàn)雙向傳送數(shù)據(jù),還需要設(shè)計(jì)客戶端向服務(wù)器端的數(shù)據(jù)傳送,那么就需要在客戶端程序中設(shè)計(jì)監(jiān)聽(tīng),接受服務(wù)器端的請(qǐng)求信息,以及向服務(wù)端發(fā)送數(shù)據(jù)這幾部分。致謝真誠(chéng)感謝黃彥老師您在我們課程設(shè)計(jì)階段給予我們的指導(dǎo)和幫助,您的指導(dǎo)使我對(duì)網(wǎng)絡(luò)專(zhuān)業(yè)知識(shí)方面有了更深的認(rèn)識(shí),并且您嚴(yán)肅的科學(xué)態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神,精益求精的工作作風(fēng),深
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)殖肉牛項(xiàng)目可行性報(bào)告
- 互聯(lián)網(wǎng)立項(xiàng)報(bào)告
- 母嬰護(hù)理中級(jí)復(fù)習(xí)試題含答案
- 護(hù)理-婦產(chǎn)科護(hù)理學(xué)練習(xí)卷含答案
- 醫(yī)療機(jī)構(gòu)信息管理系統(tǒng)應(yīng)急預(yù)案
- 建筑結(jié)構(gòu)穩(wěn)定性分析報(bào)告書(shū)
- 主管護(hù)師內(nèi)科護(hù)理復(fù)習(xí)試題及答案
- 鄉(xiāng)村衛(wèi)生保健推廣方案
- 針對(duì)網(wǎng)絡(luò)安全問(wèn)題的解決方案與實(shí)施計(jì)劃
- 用戶體驗(yàn)優(yōu)化針對(duì)不同地區(qū)
- 產(chǎn)時(shí)會(huì)陰消毒課件
- 第一單元 我們的守護(hù)者 (同步練習(xí))部編版道德與法治六年級(jí)上冊(cè)
- 河南省商丘市部分校2024~2025學(xué)年度高二上學(xué)期期末聯(lián)考語(yǔ)文試題含答案
- 2025年高考時(shí)事政治考點(diǎn)總結(jié)
- 2025年山西省運(yùn)城市平陸縣部分學(xué)校中考一模道德與法治試題(原卷版+解析版)
- 第十單元課題2 常見(jiàn)的酸和堿第1課時(shí)-2024-2025學(xué)年九年級(jí)化學(xué)人教版下冊(cè)
- 小學(xué)生數(shù)據(jù)分析課件
- 2025年皖北衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)附答案
- 2025年山東國(guó)電投萊陽(yáng)核能有限公司校園招聘筆試參考題庫(kù)附帶答案詳解
- 中小學(xué)生開(kāi)學(xué)第一課主題班會(huì)-以哪吒之魔童降世為榜樣
- 2024年中國(guó)疾控中心信息中心招聘考試真題
評(píng)論
0/150
提交評(píng)論