資源描述:
《UDP實(shí)驗(yàn)報(bào)告》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、UDP客戶/服務(wù)器應(yīng)用程序設(shè)計(jì)姓名:學(xué)號(hào):班級(jí):一.實(shí)驗(yàn)名稱UDP客戶/服務(wù)器應(yīng)用程序設(shè)計(jì)二.實(shí)驗(yàn)要求編程實(shí)現(xiàn)一個(gè)聊天室系統(tǒng)。該系統(tǒng)包括客戶端和服務(wù)器端兩部分。用戶通過客戶端發(fā)送消息。服務(wù)器端在收到消息后,顯示在主界面上。要求還能實(shí)現(xiàn)廣播功能。實(shí)驗(yàn)報(bào)告要求有實(shí)現(xiàn)過程的流程圖,對(duì)主要的函數(shù)及其參數(shù)給予說(shuō)明,要有實(shí)現(xiàn)過程的主要程序段,并對(duì)各段程序的功能及作用進(jìn)行說(shuō)明。三.程序?qū)崿F(xiàn)流程圖四.編程使用的主要函數(shù)1.intWSAStartup(WORDwVersionRequested,LPWSADATAlpWSAData);初始化套
2、接字庫(kù)函數(shù)。使用Socket之前必須調(diào)用此函數(shù),當(dāng)一個(gè)應(yīng)用程序調(diào)用WSAStartup函數(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ù)了。參數(shù)wVersionRequested表示當(dāng)前套接字庫(kù)的版本號(hào),參數(shù)lpWSAData是指向結(jié)構(gòu)體WSADATA的指針變量,表示獲取套接字庫(kù)的詳細(xì)信息,函數(shù)調(diào)用成功返回0。2.SOCKETsocket(intaf,inttype,intprotocol)創(chuàng)建
3、網(wǎng)絡(luò)通信套接字句柄。參數(shù)af指定套接字所使用的地址格式,對(duì)于TCP/IP協(xié)議族,該參數(shù)置PF_INET;type是表示套接字的類型,采用流套接字類型用SOCK_STREAM,數(shù)據(jù)報(bào)套接字類型使用SOCK_DGRAM;protocol表示應(yīng)用程序使用的通訊協(xié)議,一般寫0表示對(duì)兩種類型的Socket分別采用默認(rèn)的TCP或UDP傳輸協(xié)議,函數(shù)調(diào)用成功返回新建套接字的句柄,否則返回INVALID_SOCKET。3.intbind(SOCKETs,structsockaddr_in*name,intnamelen)綁定地址信息.對(duì)服務(wù)
4、器而言套接字創(chuàng)建成功后,應(yīng)將套接字與地址結(jié)構(gòu)信息進(jìn)行綁定,第一個(gè)參數(shù)s為套接字句柄,第二個(gè)參數(shù)地質(zhì)結(jié)構(gòu)信息,第三個(gè)參數(shù)地質(zhì)結(jié)構(gòu)的大小。調(diào)用成功返回0,失敗返回SOCKET_ERROR。4.intsetsockopt(intsockfd,intlevel,intoptname,constvoid*optval,socklen_toptlen)套接字設(shè)置選項(xiàng),可以設(shè)置廣播發(fā)送方式。第一個(gè)參數(shù)是套接字描述符,第二個(gè)參數(shù)是選項(xiàng)定義的層次,目前僅支持SOL_SOCKET和IPPORT_TCP層次,第三個(gè)參數(shù)設(shè)置為SO_BROADCAS
5、T表示允許套接字傳送廣播信息,第四個(gè)參數(shù)是指針,指向存放選項(xiàng)值的緩沖區(qū),最后一個(gè)參數(shù)表示此緩沖區(qū)的長(zhǎng)度。設(shè)置成功返回0,失敗返回SOCKT_ERROR。5.intsendto(SOCKETs,constcharFAR*buf,intlen,intflags,conststructsockaddrFAR*to,inttolen)實(shí)現(xiàn)服務(wù)器和客戶端的數(shù)據(jù)發(fā)送。參數(shù)s是服務(wù)器或者是客戶端套接字,buf應(yīng)用程序發(fā)送的數(shù)據(jù)緩沖區(qū),len實(shí)際發(fā)送數(shù)據(jù)長(zhǎng)度,flags一般為0,表示表示只描述同步Socket的sendto函數(shù)的執(zhí)行流程。后
6、兩個(gè)參數(shù)表示目標(biāo)地址結(jié)構(gòu)信息和目標(biāo)地址結(jié)構(gòu)大小。6.intrecvfrom(SOCKETs,constcharFAR*buf,intlen,intflags,conststructsockaddrFAR*to,inttolen)實(shí)現(xiàn)服務(wù)器和客戶端的數(shù)據(jù)接收。參數(shù)s是服務(wù)器或者是客戶端套接字,buf應(yīng)用程序接收數(shù)據(jù)的緩沖區(qū),len指定數(shù)據(jù)緩沖區(qū)長(zhǎng)度,flags一般為0,表示表示只描述同步Socket的recvfrom()函數(shù)的執(zhí)行流程。后兩個(gè)參數(shù)表示目標(biāo)地址結(jié)構(gòu)信息和目標(biāo)地址結(jié)構(gòu)大小。7.intclosesocket(SOCK
7、ETs)關(guān)閉套接字函數(shù)。S表示即將關(guān)閉的套接字句柄。一.主要程序段及其功能voidCTCPDlg::OnBind(){CStringstr;GetDlgItem(IDC_PORT)->GetWindowText(str);if(str==""){MessageBox("端口號(hào)不能為空!");}else{//綁定本機(jī)地址信息port=atoi(str.GetBuffer(0));addr.sin_family=AF_INET;addr.sin_addr.S_un.S_addr=INADDR_ANY;addr.sin_port=
8、htons(port);if(bind(s,(sockaddr*)&addr,sizeof(addr))==SOCKET_ERROR){MessageBox("綁定失敗!");return;}//設(shè)置套接字為廣播發(fā)送if(setsockopt(s,SOL_SOCKET,SO_BROADCA