




版權(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)環(huán)節(jié)(1)運(yùn)營(yíng)指導(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文獻(xiàn)?答:由于無(wú)論服務(wù)器端程序還是客戶(hù)端程序都要建立socket,假如不包含winsock2.h文獻(xiàn)就無(wú)法創(chuàng)建socket,沒(méi)有socket服務(wù)器與客戶(hù)端就無(wú)法通信。(2)為什么在服務(wù)器和客戶(hù)端程序中要加入#pragmacomment(1ib,"ws2_32.lib〃)語(yǔ)句,假如不加會(huì)出現(xiàn)什么問(wèn)題?if(rvai==0)°°[ime(&timeD):D-localtime_(&tjmeD);一min上.fC\n%d;%d;%d\n%s\n「一hound->tmm-in.p—2[現(xiàn)S£Cbuf「ec);。printf(n-->%s\nn,buf);closesocket(msgsock);}while(TRUE);/*由于這個(gè)程序已有了一個(gè)無(wú)限循環(huán),所以套接字“sock”歷來(lái)不顯式關(guān)閉。然而,當(dāng)進(jìn)程被殺死或正常終止時(shí),所有套接字都將自動(dòng)地被關(guān)閉。*/closesocket(msgsock);return0;1套接口號(hào)為:349020:22:7-->abcde^=gHIJKLMN20:22:—>oPqrSt20:22:52—>UvWxVz20:24:11-->hclloWORLD⑸請(qǐng)具體說(shuō)明此實(shí)驗(yàn)在設(shè)計(jì)及運(yùn)營(yíng)時(shí)碰到的問(wèn)題和解決辦法,及實(shí)驗(yàn)體會(huì)及建議。在實(shí)驗(yàn)設(shè)計(jì)的過(guò)程中會(huì)碰到很多的問(wèn)題,如實(shí)現(xiàn)各種功能時(shí),實(shí)現(xiàn)順序的問(wèn)題,以及時(shí)間計(jì)算過(guò)程中的各種指針存在的存儲(chǔ)空間的沖突問(wèn)題。在調(diào)用各種函數(shù)的過(guò)程中會(huì)碰到不能使用的狀況,是由于源程序中沒(méi)有包含使用該函數(shù)的頭文獻(xiàn)。實(shí)驗(yàn)過(guò)程中不能對(duì)的的結(jié)識(shí)各個(gè)函數(shù)的功能,以及靈活地使用結(jié)構(gòu)體,對(duì)建立連接的過(guò)程沒(méi)有一個(gè)很清楚地把握,通過(guò)查詢(xún)各種資料和同學(xué)之間互相交流,解決了一些難以下手的問(wèn)題,通過(guò)本次實(shí)驗(yàn),socket編程有了一個(gè)深刻的了解,對(duì)其過(guò)程的建立也有了一個(gè)大體的了解。答:由于要告訴鏈接器生成exe時(shí)鏈接這個(gè)庫(kù)中的函數(shù)。當(dāng)然也可以通過(guò)別的方法告訴鏈接器。就是讓程序在鏈接的時(shí)候?qū)s2_32.1ib這個(gè)文獻(xiàn)鏈接進(jìn)來(lái),假如沒(méi)有這句話(huà),你也沒(méi)有在工程的ClassWizerd選項(xiàng)卡的Link選項(xiàng)卡中加入這個(gè)文獻(xiàn)的時(shí)候,鏈接就會(huì)提醒某些函數(shù)沒(méi)有被鏈接到!有了這個(gè)文獻(xiàn)一般就是提供某一些函數(shù)的實(shí)現(xiàn)代碼,只但是不是以字符形式存儲(chǔ)的!(3)為什么在服務(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)運(yùn)用第二個(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í)行。(4)修改后的程序完畢實(shí)現(xiàn)了什么功能,附上修改后的源代碼。(修改或填加的代碼用波浪線(xiàn)標(biāo)注,并填加注釋),并附上實(shí)驗(yàn)截圖客戶(hù)端:實(shí)現(xiàn)本地IP自動(dòng)檢測(cè),并且由用戶(hù)鍵入想要通信的服務(wù)器地址,實(shí)現(xiàn)大小寫(xiě)互相轉(zhuǎn)換后送達(dá)服務(wù)端。源代碼如下:inc1udenstdafx.h"報(bào)&&L旦&£&注incJude<ctYDeh)include<stdio.h>include<stdlib.h>include<errno.h>#inelude<winsock2.h>#pragmacomment(1ib,"ws2_32.1ibn)#definePORT3490/*客戶(hù)機(jī)連接遠(yuǎn)程主機(jī)的端口*/#defineMAXDATASIZE100/*每次可以接受的最大字節(jié)*/一在defneTRUE1_TCHAR*argv[])_TCHAR*argv[])_TCHAR*argv[])WORDwVersionRequested;int_tmain(intargc,_TCHAR*argv[])WORDwVersionRequested;wsaData;WSADATAwsaData;fd;fd;structsockaddr_inservaddr;structhostent*hp;“nt1en,i;ocharbuf[1024]="”;chaJ25-./*進(jìn)行本地IP檢測(cè)*/PHOSIENThostinMcwVeIsionReau?t£&亍MAKEW0RD(2,?2);發(fā)m二亶SASL@r匚旦p…(…wV_e_isi_Q_nRequestem.告更工且口趾且.)工二一if(_WSAStaituD(MAKEWQRD(20),&wsaData)0)1jf((hostinf。U筆fJhQStbyna?e(name))!三NULL)L…ip三—Lnetntoa…(大(stmL.一inadd」*)*h。slin_fo-Lh且《4匚」[?£)二0001。「WSAaeanup():d區(qū)儂血:左機(jī)出地址為胸箍△服務(wù)器住地址\am;一gClS(lQjp);/*循環(huán)保證多次向服務(wù)器端發(fā)送信息*/旦91if(err!=0)return-1;if((fdif((fdif((fdsocket(AF_INET,SOCK_STREAM,0))<0)printf(“無(wú)法倉(cāng)ij建套接口!)if((fdexit(2);}servaddr.sin_family=AF」NET;servaddr.sin_port=htons(PORT);servaddr.sin_addr.S_un.S_addr=inet_addr(n127.0.0.1");memset(servaddr.sin_zero,0,sizeof(servaddr,sin_zero));//和服務(wù)器創(chuàng)建連接rva1=connect(fd,(sockaddr*)&servaddr,sizeof(servaddr));if(rva1<0){〃創(chuàng)建連接失敗printf("無(wú)法連接!”);exit(3);)else{memset(buf,0,1024);printf(”請(qǐng)輸入scanf(”%s”,&buf);〃實(shí)現(xiàn)大小寫(xiě)字母的互相轉(zhuǎn)換/£Qwj.sKn;一L±Lbuf「il八二32:
//向服務(wù)器發(fā)送信息。rva1=send(fd,buf,strlen(buf)+L0);if(rval<0)printf("警告!!!輸入錯(cuò)誤!)}closesocket(fd);]while(TRUE)一二exit(5);return0;本機(jī)IP地址為192.168.200.24,輸入服務(wù)器IP地址請(qǐng)輸入:ABCDEFGhijklmn請(qǐng)輸入:OpQRsT請(qǐng)輸入:WwXyZ請(qǐng)輸入:HELLOworld服務(wù)端:實(shí)現(xiàn)接受信息的時(shí)間控制,能顯示出接受信息的具體時(shí)間,源代碼如下:include"stdafx.h'1include<stdio.h>#include<stdlib.h>include<errno.h>include<winsock2.h>在influaw.W.t」rp辱incLegpiQcessh〉:.#pragmacomment(lib,”ws2—32.1ibn)#defineMYPORT3490/*定義用戶(hù)連接端口*/#defineBACKLOG10/*多少等待連接控制*/#defineSERVER」P_ADDRH127.0.0.1”/*服務(wù)器的IP地址*/SOCKETsock,msgsock;intSOCKETsock,msgsock;intint1ength=0;intstructsockaddr_inserver;structsockaddrtcpaddr;charbuff1Q24]="二bufrec「10241三,intrval=0,len=0,err=0;WORDwVersionRequested;WSADATAwsaData;ll臭mi儂呢structtm*p;1d£L.2國(guó)邑皎生上或工室馬邑Q.L(Duf喀)".??if?((「vaJL_己1%丫(卬§猿鳥(niǎo)9£?工f£££,「工iZ「eQf(buQQLfofQI(:;).;ifrylL.壬?0)±口曰9奧」「工」一口&一(期1mep);..2空二;%a;~「%d\n疑s\_n」lD二Ntni—b一。一旦.一旦上;&二之一tn)—min—…P一二2t二以上一&£zJbufi£c);si“-whi」CL);1int_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」NET,SOCK.STREAM,0);if(sock<0)(perror(nopeningstreamsocket1');exit(1);)/*使用任意端口命名套接字*/server.sin_fami1y=AF」NET;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
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 拓展“10+1”框架下的東盟基礎(chǔ)設(shè)施建設(shè)市場(chǎng)
- 公司正版軟件管理制度
- 公司法里基本管理制度
- 中越北部灣海洋生物多樣性保護(hù)合作法律機(jī)制研究
- 2025企業(yè)合同管理規(guī)范模板:合同管理制度實(shí)施條例
- 2025醫(yī)療設(shè)備購(gòu)銷(xiāo)合同模板
- 050310JAVA程序設(shè)計(jì)課程-單選題專(zhuān)項(xiàng)
- 河北省石家莊市2023?2024學(xué)年高二下冊(cè)數(shù)學(xué)期末考試數(shù)學(xué)試卷附解析
- 2025年中考語(yǔ)文(長(zhǎng)沙用)課件:復(fù)習(xí)任務(wù)群5 語(yǔ)言的連貫、得體
- 2024~2025學(xué)年 浙江省高一語(yǔ)文上冊(cè)期中試卷附答案
- 2025年遼寧黑龍江吉林內(nèi)蒙古高考物理試卷真題(含答案詳解)
- 2025高考全國(guó)二卷語(yǔ)文真題
- 2025年甘肅亞盛實(shí)業(yè)(集團(tuán))股份有限公司招聘筆試參考題庫(kù)含答案解析
- 19S406建筑排水管道安裝-塑料管道
- CB/T 3766-1996排氣管鋼法蘭及墊片
- 2022版《語(yǔ)文課程標(biāo)準(zhǔn)》
- 山東工商學(xué)院會(huì)計(jì)學(xué)基礎(chǔ)期末復(fù)習(xí)題及參考答案
- 第7章食品原料的采購(gòu)與貯存管理ppt課件
- 國(guó)家開(kāi)放大學(xué)《環(huán)境資源法》形考作業(yè)參考答案
- 《政治學(xué)原理(二)》課程教學(xué)大綱
- 飛錘支架夾具設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論