版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱-SOCKET編程、實(shí)驗(yàn)?zāi)康募由顚?duì)TCP和UDP的理解;實(shí)現(xiàn)兩臺(tái)計(jì)算機(jī)之間TCP/UDP通信。二、實(shí)驗(yàn)過(guò)程原理:socket是在應(yīng)用層和傳輸層之間的一個(gè)抽象層,它把TCP/IP層復(fù)雜的操作抽象為幾個(gè)簡(jiǎn)單的接口供應(yīng)用層調(diào)用以實(shí)現(xiàn)進(jìn)程在網(wǎng)絡(luò)中通信。如下圖所示:應(yīng)用層剛絡(luò)層鏈路層serverclient創(chuàng)socket連接指定計(jì)算機(jī)的端口向socket中寫入信息關(guān)31socketTCP通信原理如圖:創(chuàng)建socket綁定socket端口號(hào)監(jiān)聽該端口號(hào)接收未自客戶端的連接請(qǐng)求socket中讀取字符關(guān)fflsocket代碼:服務(wù)器端:#pragmacomment(lib,WS2_32.lib
2、)#includevWinsock2.h#include#includeusingnamespacestd;intmain()inti=0;WSADATAwsaData;SOCKEToldSocket,newSocket;/客戶地址長(zhǎng)度intiLen=0;/發(fā)送的數(shù)據(jù)長(zhǎng)度intiSend=0;/接收的數(shù)據(jù)長(zhǎng)度intircv=0;/處世要發(fā)送給客戶的信息charbuf20=lamaserver;/接收來(lái)自用戶的信息charfromcli512;/客戶和服務(wù)器的SOCKET地址結(jié)構(gòu)structsockaddr_inser,cli;if(WSAStartup(MAKEWORD(2,2),&wsaDa
3、ta)!=0)coutfailedtoloadwinsockendl;return0;coutserverwaitingendl;coutendl;/創(chuàng)建服務(wù)器端幀聽SOCKEToldSocket=socket(AF_INET,SOCK_STREAM,0);if(oldSocket=INVALID_SOCKET)coutsocket()failed:vvWSAGetLastError()vvendl;return0;/以下是建立服務(wù)器端的SOCKET地址結(jié)構(gòu)ser.sin_family=AF_INET;ser.sin_port=htons(5050);/使用系統(tǒng)指定的ip地址INADDR_AN
4、Y/ser.sin_addr.s_addr=htonl(INADDR_ANY);ser.sin_addr.s_addr=inet_addr(8);if(bind(oldSocket,(LPSOCKADDR)&ser,sizeof(ser)=SOCKET_ERROR)coutbind()failed:vWSAGetLastError()vvendl;return0;/進(jìn)入偵聽狀態(tài)if(listen(oldSocket,5)=SOCKET_ERROR)coutlisten()failed:vvWSAGetLastError()vvendl;return0;/接收客戶端的連接iLen=sizeof(
5、cli);newSocket=accept(oldSocket,(structsockaddr*)&cli,&iLen);新的SOCKETif(newSocket=INVALID_SOCKET)coutvaccept()failed:vvWSAGetLastError()vvendl;/return0;/進(jìn)入一個(gè)無(wú)限循環(huán),等待客戶發(fā)送數(shù)據(jù)whilei+;/服務(wù)器初始化接收緩沖區(qū)memset(fromcli,0,512);ircv=recv(newSocket,fromcli,sizeof(fromcli),O);if(ircv=SOCKET_ERROR)coutvrcv()failed:vWS
6、AGetLastError()v#include#includeusingnamespacestd;#defineDATA_BUFFER512intmain()WSADATAwsaData;SOCKETsClient;charch;inti=0;char*Serip=8;隨著程序所在主機(jī)的地址改變而改變intSeriPort=5050;/從服務(wù)器接收的數(shù)據(jù)的長(zhǎng)度intiLen;/發(fā)送的數(shù)據(jù)長(zhǎng)度intisnd;/接收緩沖區(qū)charbufDATA_BUFFER;/發(fā)送緩沖區(qū)charsndbufDATA_BUFFER;/服務(wù)器端SOCKET地址結(jié)構(gòu)structsockaddr_inser;/接收/發(fā)
7、送緩沖區(qū)的初始化memset(buf,0,sizeof(buf);memset(sndbuf,O,DATA_BUFFER);if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)coutfailedtoloadwinsockendl;return0;/填寫要連接的服務(wù)器地址信息ser.sin_family=AF_INET;ser.sin_port=htons(SeriPort);ser.sin_addr.s_addr=inet_addr(Serip);/建立客戶端字節(jié)流式套接字sClient=socket(AF_INET,SOCK_STREAM,0);if(sCli
8、ent=INVALID_SOCKET)coutsocket()failed:wWSAGetLastErrorOwendl;return0;/請(qǐng)求與服務(wù)器建立連接sockaddrsockaddr/coutsetlink;if(connect(sClient,(struct*)&ser,sizeof(ser)=INVALID_SOCKET)coutconnect()failed:WSAGetLastError()endl;return0;else/向服務(wù)器端發(fā)送數(shù)據(jù)while(1)coutvvendl;i+;coutvv第vvivv發(fā)送isagirleruepwaitinST壬弄器服務(wù)器:報(bào)務(wù)器服
9、務(wù)器輻務(wù)器第灣戶端發(fā)送內(nèi)容為一十劭發(fā)送wertyuiopf客戶端發(fā)送內(nèi)容為展)yuiop蓉戶端發(fā)逵內(nèi)容為is弟4發(fā)逵L客戶端發(fā)送內(nèi)容為一一J口儀筋發(fā)送she爲(wèi)agiiJ:客戶端發(fā)送內(nèi)容為shJ4r-UJJ-,/TT為為為為為In在兩臺(tái)服務(wù)器上分別運(yùn)行服務(wù)器端和客戶端,結(jié)果如圖:上、C;DOCIJIE1ADlIirilLOCALS,lTeBpRar(HKlE8094務(wù)器話實(shí)崟.-!he11d,Iamaclient.Seruerreceiued.fromClientip:127.0.0-1,port:2BB4J12SeruerreceiuedFromClientip:J.poit:26043Ser
10、uerreceivedFvanClientip:LpaiLt:26843一StFMtrreceivedFromClientip:12?,0k011Fport:(260UDP通信原理如圖:UDP服務(wù)器端bmd()socketQ阻塞宜到接收:到客戶數(shù)據(jù)I處理客:戶數(shù)據(jù)seT敎據(jù)請(qǐng)求rsendtof)數(shù)據(jù)應(yīng)答ndt#inelude#inelude#definebuffer_length512#pragmacomment(lib,WS2_32.lib)voidmain()WSADATAwsadata;SOCKETsSocket;intilen;intirecv;charrecv_bufbuffer_l
11、ength;charsend_bufbuffer_length;/服務(wù)器和客戶SOCKET地址結(jié)構(gòu)structsockaddr_inseradd,cliadd;if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0)printf(failedtoloadwinsocketn);return;sSocket=socket(AF_INET,SOCK_DGRAM,0);if(sSocket=INVALID_SOCKET)printf(socket()failed:%dn,WSAGetLastError();return;/初始化服務(wù)器SOCKET地址結(jié)構(gòu)seradd.sin
12、_family=AF_INET;seradd.sin_port=htons(6666);seradd.sin_addr.s_addr=htonl(INADDR_ANY);seradd.sin_addr.s_addr=inet_addr();if(bind(sSocket,(LPSOCKADDR)&seradd,sizeof(seradd)=SOCKET_RROR)printf(地址綁定時(shí)出錯(cuò):%dn,WSAGetLastError();intrua;scanf(%d,&rua);return;ilen=sizeof(cliadd);/初始化接收緩沖區(qū)memset(recv_buf,0,size
13、of(recv_buf);irecv=recvfrom(sSocket,recv_buf,buffer_length,O,(structsockaddr*)&cliadd,&ilen);if(irecv=SOCKET_ERROR)printf(接收出錯(cuò)%dn,WSAGetLastError();intrua;scanf(%d,&rua);return;elseif(irecv=0)return;elseClientprintf(n%s-,recv_buf);printf(Serverreceivedfromip:%s,port:%dn,inet_ntoa(cliadd.sin_addr),nt
14、ohs(cliadd.sin_port);while(1)/在此函數(shù)中cli為傳出參數(shù)irecv=recvfrom(sSocket,recv_buf,buffer_length,O,(structsockaddr*)&cliadd,&ilen);if(irecv=SOCKET_ERROR)printf(接收出錯(cuò)%dn,WSAGetLastError();intrua;scanf(%d,&rua);return;elseif(irecv=0)break;elseClientprintf(n%s-,recv_buf);printf(Serverreceivedfromip:%s,port:%dn,
15、inet_ntoa(cliadd.sin_addr),ntohs(cliadd.sin_port);scanf(%s,send_buf);sendto(sSocket,send_buf,sizeof(send_buf),O,(structsockaddr*)&cliadd,sizeof(cliadd);closesocket(sSocket);WSACleanup();客戶端:#includestdafx.h#includevwinsock2.h#include#definedata_buffer1024voidmain()WSADATAwsadata;SOCKETsclient;/服務(wù)器地址
16、、端口號(hào)char*serip=8;intSeriport=6666;charch=qita;/服務(wù)器SOCKET地址結(jié)構(gòu)長(zhǎng)度intilen;/發(fā)送/接收數(shù)據(jù)大小intisend;intirecv;/要發(fā)送給服務(wù)器的數(shù)據(jù)charsend_buf=hello,lamaclient.;charrecv_bufdata_buffer;/服務(wù)器端的SOCKET地址結(jié)構(gòu)structsockaddr_inseradd,cliadd;/初始化接收緩沖區(qū)memset(recv_buf,0,sizeof(recv_buf);/字符數(shù)組初始化memset(ch,0,sizeof(ch);if(WSAStartup(
17、MAKEWORD(2,2),&wsadata)!=0)printf(failedtoloadwinsockn);return;/服務(wù)器SOCKET地址結(jié)構(gòu)初始化seradd.sin_family=AF_INET;seradd.sin_port=htons(Seriport);seradd.sin_addr.s_addr=inet_addr(serip);cliadd.sin_family=AF_INET;cliadd.sin_port=htons(7777);cliadd.sin_addr.s_addr=inet_addr();sclient=socket(AF_INET,SOCK_DGRAM
18、,0);if(sclient=INVALID_SOCKET)printf(buildsocketfailed!n);return;if(bind(sclient,(LPSOCKADDR)&cliadd,sizeof(cliadd)=SOCKET_ERROR)printf(地址綁定時(shí)出錯(cuò):dn,WSAGetLastError();return;/無(wú)連接不需要進(jìn)行地址與套接字的綁定,直接發(fā)送數(shù)據(jù)即可ilen=sizeof(seradd);isend=sendto(sclient,send_buf,sizeof(send_buf),O,(structsockaddr*)&seradd,ilen);i
19、f(isend!=0&isend!=SOCKET_ERROR)/printf(datahasbeensentsuccessfully!n);printf(客戶所發(fā)的數(shù)據(jù)為:%s,字節(jié)數(shù)為:%dn,send_buf,isend);elsereturn;while(1)scanf(%s,ch);sendto(sclient,ch,sizeof(ch),0,(structsockaddr*)&seradd,sizeof(seradd);irecv=recvfrom(sclient,recv_buf,data_buffer,O,(structsockaddr*)&seradd,&ilen);if(irecv=SOCKET_ERROR)printf(接收出錯(cuò)%dn,WSAGetLastError();intrua;scanf(%d,&rua);return;elseif(irecv=0)break;elseClientClientprintf(n%s-,recv_buf);printf(Serverreceivedfromip:%s,port:%dn,inet_ntoa(seradd.sin_addr),ntohs(seradd.sin_port);closesocket(sclient);WSACleanup();本機(jī)上客戶端與服務(wù)器端通信結(jié)果
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 股權(quán)轉(zhuǎn)讓協(xié)議及居間合同
- 網(wǎng)絡(luò)科技行業(yè)軟件使用許可合同
- 社交媒體推廣服務(wù)合同
- 工業(yè)園區(qū)基礎(chǔ)設(shè)施建設(shè)合同
- 網(wǎng)絡(luò)教育平臺(tái)開發(fā)與運(yùn)營(yíng)合同
- 非營(yíng)利組織合同糾紛處理控制流程研究
- 二零二五年度茶葉加盟店加盟商信息保密及隱私保護(hù)合同
- 二零二五年度裝修合同欺詐證據(jù)收集與法律訴訟流程
- 2025年度電視劇導(dǎo)演聘用合同書(現(xiàn)實(shí)主義)
- 2025年度私人車輛抵押借款合同(含車輛價(jià)值增值服務(wù))
- 2024版《建設(shè)工程開工、停工、復(fù)工安全管理臺(tái)賬表格(流程圖、申請(qǐng)表、報(bào)審表、考核表、通知單等)》模版
- 2024年廣州市高三一模普通高中畢業(yè)班高三綜合測(cè)試一 物理試卷(含答案)
- 部編版《道德與法治》六年級(jí)下冊(cè)教材分析萬(wàn)永霞
- 粘液腺肺癌病理報(bào)告
- 酒店人防管理制度
- 油田酸化工藝技術(shù)
- 上海高考英語(yǔ)詞匯手冊(cè)列表
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(yíng)(吳洪貴)任務(wù)五 其他內(nèi)容類型的生產(chǎn)
- 上海石油化工股份有限公司6181乙二醇裝置爆炸事故調(diào)查報(bào)告
- 例說(shuō)相機(jī)誘導(dǎo)在語(yǔ)文教學(xué)中的運(yùn)用 相機(jī)誘導(dǎo)
- 浙江省紹興市2023年中考科學(xué)試題(word版-含答案)
評(píng)論
0/150
提交評(píng)論