




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
簡單的客戶/服務(wù)器程序設(shè)計(jì)與實(shí)現(xiàn)實(shí)驗(yàn)?zāi)康募耙螅?、熟悉MicrosoftVisualStudio2008編程環(huán)境。2、了解TCP與UDP協(xié)議,以及它們之間的區(qū)別。3、了解客戶/服務(wù)器模型原理。4、熟悉Socket編程原理,掌握簡單的套接字編程。實(shí)驗(yàn)設(shè)備:硬件:PC機(jī)(兩臺(tái)以上)、網(wǎng)卡、已經(jīng)設(shè)定好的以太網(wǎng)環(huán)境軟件:MicrosoftVisualStudio2008實(shí)驗(yàn)內(nèi)容及步驟:1、編寫用TCP協(xié)議實(shí)現(xiàn)的Client端和Server端程序并調(diào)試通過。程序分兩部分:客戶程序和服務(wù)器程序。工作過程是:服務(wù)器首先啟動(dòng),它創(chuàng)建套接字之后等待客戶的連接;客戶啟動(dòng)后創(chuàng)建套接字,然后和服務(wù)器建立連接;建立連接后,客戶接收鍵盤輸入,然后將數(shù)據(jù)發(fā)送到服務(wù)器,服務(wù)器收到到數(shù)據(jù)后,將接收到的字符在屏幕上顯示出來?;蛘叻?wù)器接收鍵盤輸入,然后將數(shù)據(jù)發(fā)送到客戶機(jī),客戶機(jī)收到數(shù)據(jù)后,將接收到的字符在屏幕上顯示出來。服務(wù)器方程序流程如下:服務(wù)器方Socket()Socket()建立流式套接字,返回套接字號(hào)??蛻舴娇蛻舴絙ind()bind(),套接字s與本地地址相連。Socket(),Socket(),建立流失套接字,返回套接字號(hào)listen(),通知listen(),通知TCP,服務(wù)器準(zhǔn)備好接收連接。accept(),accept(),接受連接,等待客戶端的連接...connect(),connect(),將套接字s與遠(yuǎn)地主機(jī)連接連接建立,accept()連接建立,accept()返回,得到新的套接字,scsend()/recv()send()/recv(),在套接字上讀/寫數(shù)據(jù),直到數(shù)據(jù)交換完recvt()/send(),recvt()/send(),在套接字sc上讀/寫數(shù)據(jù),直到數(shù)據(jù)交換完畢closesocket(),closesocket(),關(guān)閉套接字結(jié)束TCP對(duì)話closesocket(),關(guān)閉最初套接字s,服務(wù)結(jié)束closesocket(),關(guān)閉套接字sc2、編寫用UDP協(xié)議實(shí)現(xiàn)的Client端和Server端程序并調(diào)試通過(做完第一個(gè)實(shí)驗(yàn)的基礎(chǔ)上做該實(shí)驗(yàn))。服務(wù)器方客戶方服務(wù)器方客戶方Socket()建立流式套接字,返回套接字號(hào)。Socket()建立流式套接字,返回套接字號(hào)。Socket(),建立流失套接字,返回套接字號(hào)bind(),套接字bind(),套接字s與本地地址相連。將套接字與遠(yuǎn)地主機(jī)連接將套接字與遠(yuǎn)地主機(jī)連接send()send()/recv(),在套接字上讀/寫數(shù)據(jù),直到數(shù)據(jù)交換完recvt()/send(),在套接字上讀/寫數(shù)據(jù),直到數(shù)據(jù)交換完畢clclosesocket(),關(guān)閉套接字結(jié)束UDP對(duì)話closesocket(),closesocket(),關(guān)閉套接字3、編寫用TCP協(xié)議實(shí)現(xiàn)Client端與Server端的一段對(duì)話程序。Server端根據(jù)用戶的輸入來提示Client端下一步將要進(jìn)行操作。所用函數(shù)及結(jié)構(gòu)體參考:1、創(chuàng)建套接字——socket()功能:使用前創(chuàng)建一個(gè)新的套接字格式:SOCKETPASCALFARsocket(intaf,inttype,intprocotol);參數(shù):af:代表網(wǎng)絡(luò)地址族,目前只有一種取值是有效的,即AF_INET,代表internet地址族;Type:代表網(wǎng)絡(luò)協(xié)議類型,SOCK_DGRAM代表UDP協(xié)議,SOCK_STREAM代表TCP協(xié)議;Protocol:指定網(wǎng)絡(luò)地址族的特殊協(xié)議,目前無用,賦值0即可。返回值為SOCKET,若返回INVALID_SOCKET則失敗。2、指定本地地址——bind()功能:將套接字地址與所創(chuàng)建的套接字號(hào)聯(lián)系起來。格式:intPASCALFARbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);參數(shù):s:是由socket()調(diào)用返回的并且未作連接的套接字描述符(套接字號(hào))。其它:沒有錯(cuò)誤,bind()返回0,否則SOCKET_ERROR地址結(jié)構(gòu)說明:structsockaddr_in{shortsin_family;Pleaseconnect...\n\n\n"); sin_size=sizeof(structsockaddr_in); if((sock2=accept(sock1,(structsockaddr*)&their_addr,&sin_size))==-1) { perror("Acceptingstreamsocket"); exit(1); }printf("Acceptinganewconnet:%s",inet_ntoa);}."); sin_size=sizeof(structsockaddr_in); if(sock2=(::connect(sock1,(LPSOCKADDR)&my_addr,sin_size))==-1) { perror("Acceptingstreamsocket"); exit(1); }}//選擇菜單intmenu(){ char*s=(char*)malloc(2*sizeof(char)); intc; printf("\n\n\nClient:Menu\n\n\n"); printf("*********************************\n\n"); printf("*Message*\n"); printf("*Message*\n"); printf("**\n\n"); printf("*********************************\n"); do { printf("\nEnteryourchoice:"); gets(s); if(s[0]=='\0'){ gets(s); } c=atoi(s); }while(c<0||c>3); free(s); returnc;}//消息發(fā)送函數(shù)voidSend(){ charMsg[10240]; printf("\nPleaseInputthemessage:"); gets(Msg);Msg[10239]='\0';::send(sock1,Msg,strlen(Msg),0);}//消息接收函數(shù)voidReceive(){ intlen; charbuf[10240]; for(inti=0;i<10240;i++){ buf[i]='\0'; }if((len=::recv(sock1,buf,10240,0))==-1) { perror("Recevingdataerror"); exit(1); } printf("TheReceivedMessage:%s\n",buf);}//主函數(shù)voidmain(){ Init(); for(;;) { switch(menu()) { case1: Send(); break; case2: Receive(); break; case3: exit(0); } } ::closesocket(sock2); ::closesocket(sock1); ::WSACleanup();}Client端界面:實(shí)驗(yàn)結(jié)果及心得:實(shí)驗(yàn)結(jié)果截圖:客戶端向服務(wù)端發(fā)送信息:客戶端接收服務(wù)端消息:服務(wù)端接收消息:實(shí)驗(yàn)心得:通過本次實(shí)驗(yàn)及課上老師講解,了解了TCP與UDP協(xié)議和它們之間的區(qū)別,以及客戶/服務(wù)器模型的原理。通過C/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 批發(fā)業(yè)務(wù)中的版權(quán)合作與版權(quán)輸出考核試卷
- 其他調(diào)味品發(fā)酵制品制造考核試卷
- 智能照明在博物館展品照明中的應(yīng)用考核試卷
- 企業(yè)知識(shí)管理與知識(shí)分享考核試卷
- 年金保險(xiǎn)投資渠道選擇考核試卷
- 有機(jī)肥料在育苗中的應(yīng)用考核試卷
- 冰球場冰面修整與保養(yǎng)考核試卷
- 智能無人機(jī)飛行控制系統(tǒng)考核試卷
- 小學(xué)生簡單律動(dòng)課件圖片
- 廣州鋪位租賃合同范本
- 部編版四年級(jí)《道德與法治》下冊《說話要算數(shù)》教學(xué)設(shè)計(jì)
- 錦州港方塊碼頭畢業(yè)設(shè)計(jì)說明書
- GB/T 17689-2008土工合成材料塑料土工格柵
- 適航法規(guī)基礎(chǔ)培訓(xùn)
- 2023版初中化學(xué)跨學(xué)科實(shí)踐活動(dòng)(化學(xué))
- 植物保護(hù)學(xué)通論-植物病害分析課件
- 藥品經(jīng)營質(zhì)量管理規(guī)范(GSP)實(shí)用教程教學(xué)課件
- 外研社一起英語四年級(jí)下冊課文
- DB32-T 2705-2014公路工程地質(zhì)勘察監(jiān)理規(guī)程-(高清現(xiàn)行)
- After-Effects影視特效設(shè)計(jì)教程完整版全套ppt課件
- 醫(yī)療設(shè)備清單
評(píng)論
0/150
提交評(píng)論