版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)三、WINSOCK套接字編程實(shí)驗(yàn)報(bào)告一、實(shí)驗(yàn)?zāi)康模河肅或JAVA語(yǔ)言編寫(xiě)客戶(hù)端、服務(wù)器程序,實(shí)現(xiàn)基于TCP或UDP的網(wǎng)絡(luò)通信數(shù)據(jù)傳輸服務(wù),熟悉基于TCP或UDP的Socket編程原理。二、實(shí)驗(yàn)環(huán)境:建立在TCP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)之上計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)環(huán)境。各計(jì)算機(jī)除了安裝TCP/IP軟件外,還安裝了TCP/IP開(kāi)發(fā)系統(tǒng)。計(jì)算機(jī)具備Windows環(huán)境中套接字socket的編程接口功能,可為用戶(hù)提供全網(wǎng)范圍的進(jìn)程通信功能。三、實(shí)驗(yàn)步驟(1)運(yùn)行指導(dǎo)書(shū)中給出的參考程序,分析實(shí)驗(yàn)結(jié)果,并回答問(wèn)題(1)-(3)(2)根據(jù)給定參考程序修改代碼,完善修改服務(wù)器和客戶(hù)端的功能。并回答問(wèn)題(4)-(5)四、實(shí)驗(yàn)結(jié)果分析(1)為什么在服務(wù)器和客戶(hù)端要包含winsock2.h文件?答:因?yàn)闊o(wú)論服務(wù)器端程序還是客戶(hù)端程序都要建立socket,如果不包含winsock2.h文件就無(wú)法創(chuàng)建socket,沒(méi)有socket服務(wù)器與客戶(hù)端就無(wú)法通信。(2)為什么在服務(wù)器和客戶(hù)端程序中要加入#pragmacomment(lib,"ws2_32.lib")語(yǔ)句,如果不加會(huì)出現(xiàn)什么問(wèn)題?答:因?yàn)橐嬖V鏈接器生成exe時(shí)鏈接這個(gè)庫(kù)中的函數(shù)。當(dāng)然也可以通過(guò)別的方法告訴鏈接器。就是讓程序在鏈接的時(shí)候?qū)s2_32.lib這個(gè)文件鏈接進(jìn)來(lái),如果沒(méi)有這句話(huà),你也沒(méi)有在工程的ClassWizerd選項(xiàng)卡的Link選項(xiàng)卡中加入這個(gè)文件的時(shí)候,鏈接就會(huì)提醒某些函數(shù)沒(méi)有被鏈接到!有了這個(gè)文件,一般就是提供某一些函數(shù)的實(shí)現(xiàn)代碼,只不過(guò)不是以字符形式存儲(chǔ)的?。?)為什么在服務(wù)器和客戶(hù)端程序中要使用WSAStartup函數(shù),如果不用,程序會(huì)有什么問(wèn)題?答:WSADATAwsaData;wVersionRequested=MAKEWORD(2,2);err=WSAStartup(wVersionRequested,&wsaData);第一個(gè)參數(shù)是版本號(hào)即2.2版本,第二個(gè)參數(shù)返回socket的版本信息操作系統(tǒng)利用第二個(gè)參數(shù)返回請(qǐng)求的Socket的版本信息。當(dāng)一個(gè)應(yīng)用程序調(diào)用Startup函數(shù)時(shí),操作系統(tǒng)根據(jù)請(qǐng)求的Socket版本來(lái)搜索相應(yīng)的Socket庫(kù),然后綁定找到的Socket庫(kù)到該應(yīng)用程序中。以后應(yīng)用程序就可以調(diào)用所請(qǐng)求的Socket庫(kù)中的其它Socket函數(shù)了。為了在應(yīng)用程序當(dāng)中調(diào)用任何一個(gè)WinsockAPI函數(shù),首先第一件事情就是必須通過(guò)WSAStartup函數(shù)完成對(duì)Winsock服務(wù)的初始化,因此需要調(diào)用WSAStartup函數(shù)。使用Socket的程序在使用Socket之前必須調(diào)用WSAStartup函數(shù),如果不調(diào)用后面socket無(wú)法執(zhí)行。服務(wù)端:實(shí)現(xiàn)接受信息的時(shí)間控制,能顯示出接受信息的具體時(shí)間,源代碼如下:#include"stdafx.h"#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<winsock2.h>#include<time.h>#include<process.h>#pragmacomment(lib,"ws2_32.lib")#defineMYPORT3490/*定義用戶(hù)連接端口*/#defineBACKLOG10/*多少等待連接控制*/#defineSERVER_IP_ADDR"127.0.0.1"/*服務(wù)器的IP地址*/SOCKETsock,msgsock;intlength=0;structsockaddr_inserver;structsockaddrtcpaddr;charbuf[1024]="",bufrec[1024]="";intrval=0,len=0,err=0;WORDwVersionRequested;WSADATAwsaData;time_ttimep;structtm*p;/*計(jì)時(shí)操作*/voiduserInput(void*){ do { memset(bufrec,0,sizeof(bufrec)); if((rval=recv(msgsock,bufrec,sizeof(buf),0)<0)) { printf("無(wú)法連接"); for(;;); } if(rval==0) {time(&timep);p=localtime(&timep); printf("\n%d:%d:%d\n%s\n",p->tm_hour,p->tm_min,p->tm_sec,bufrec); } }while(1);}int_tmain(intargc,_TCHAR*argv[]){ /*指定socket版本,否則創(chuàng)建socket失敗,即使創(chuàng)建socket返回值不為-1,但是bind時(shí)會(huì)失敗*/wVersionRequested=MAKEWORD(2,2);err=WSAStartup(wVersionRequested,&wsaData);if(err!=0)return-1;/*建立套接字*/sock=socket(AF_INET,SOCK_STREAM,0);if(sock<0){perror("openingstreamsocket");exit(1);}/*使用任意端口命名套接字*/server.sin_family=AF_INET;server.sin_port=htons(MYPORT);server.sin_addr.s_addr=inet_addr(SERVER_IP_ADDR);memset(server.sin_zero,0,sizeof(server.sin_zero));//將服務(wù)器地址與socket綁定在一起rval=bind(sock,(structsockaddr*)&server,sizeof(server));if(rval<0){perror("bindingstreamsocket");exit(1);}//找出指定的端口號(hào)并打印出來(lái)length=sizeof(server);if(getsockname(sock,(structsockaddr*)&server,&length)<0){perror("gettingsocketname");exit(1);}printf("套接口號(hào)為:%d\n",ntohs(server.sin_port));//開(kāi)始接收連接,最大請(qǐng)求數(shù)為listen(sock,5);len=sizeof(structsockaddr);do{msgsock=accept(sock,(structsockaddr*)&tcpaddr,(int*)&len);if(msgsock==-1)perror("accept");else{memset(buf,0,sizeof(buf));if((rval=recv(msgsock,buf,sizeof(buf),0)<0))perror("readingstreammessage"); if(rval==0) { time(&timep);p=localtime(&timep); printf("\n%d:%d:%d\n%s\n",p->tm_hour,p->tm_min,p->tm_sec,bufrec); printf("-->%s\n",buf); }}closesocket(msgsock);}while(TRUE);/*因?yàn)檫@個(gè)程序已經(jīng)有了一個(gè)無(wú)限循環(huán),所以套接字"sock"從來(lái)不顯式關(guān)閉。然而,當(dāng)進(jìn)程被殺死或正常終止時(shí),所有套接字都將自動(dòng)地被關(guān)閉。*/closesocket(msgsock); return0;}請(qǐng)?jiān)敿?xì)說(shuō)明此實(shí)驗(yàn)在設(shè)計(jì)及運(yùn)行時(shí)遇到的問(wèn)題和解決辦法,及實(shí)驗(yàn)體會(huì)及建議。在實(shí)驗(yàn)設(shè)計(jì)的過(guò)程中會(huì)遇到很多的問(wèn)題,如實(shí)現(xiàn)各
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 誠(chéng)實(shí)守信的演講稿集合8篇
- 2024-2025學(xué)年小學(xué)數(shù)學(xué)二年級(jí)下冊(cè)浙教版教學(xué)設(shè)計(jì)合集
- 2024-2025學(xué)年高中生物學(xué)選修1《生物技術(shù)實(shí)踐》人教版教學(xué)設(shè)計(jì)合集
- 2023年捆鈔機(jī)資金籌措計(jì)劃書(shū)
- 教科版(2017秋)六年級(jí)上冊(cè)科學(xué)3.6推動(dòng)社會(huì)發(fā)展的印刷術(shù)(教案)
- 2023年紅外線(xiàn)汽車(chē)尾氣分析儀資金籌措計(jì)劃書(shū)
- 北師大版初中物理八上4.4聲現(xiàn)象在科技中的應(yīng)用 教案
- 第3章信息系統(tǒng)的基礎(chǔ)設(shè)施3.1信息系統(tǒng)中的計(jì)算機(jī)與移動(dòng)終端 -高中教學(xué)同步《信息技術(shù)-信息系統(tǒng)與社會(huì)》教案(人民教育出版社)
- 3.2海水的性質(zhì)(第1課時(shí))(課件)高一地理同步高效課堂(人教版2019必修一)
- 《溫室氣體排放核算指南 滾珠絲杠》征求意見(jiàn)稿
- (精選)廉政風(fēng)險(xiǎn)防控臺(tái)賬
- SL559-2011農(nóng)村飲水安全工程實(shí)施方案編制規(guī)程-2019年精選文檔
- 空軍青少年航空學(xué)校招生報(bào)名表(正面)
- 常用木材材積表(打印版本)(共4頁(yè))
- 書(shū)法表格-13種(全)-硬筆書(shū)法紙模板(可打?。?/a>
- abaqus壓桿屈曲分析教學(xué)內(nèi)容
- (完整word版)(2017版)江西省房屋建筑與裝飾工程消耗量定額及統(tǒng)一基價(jià)表
- 各種紙類(lèi)中英對(duì)照
- 施工辦公區(qū)及生活區(qū)標(biāo)準(zhǔn)化方案
- K9860型凱氏定氮儀操作說(shuō)明 2
- 中醫(yī)師承和確有專(zhuān)長(zhǎng)考核考試報(bào)考用全套表格(吐血推薦)
評(píng)論
0/150
提交評(píng)論