




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、中南大學(xué)“通信網(wǎng)原理”實(shí)驗(yàn)報(bào)告第二次實(shí)驗(yàn)實(shí)驗(yàn)名稱: 主機(jī)端口掃描程序設(shè)計(jì) 專業(yè)班級(jí): 電子信息1003班 學(xué)生姓名: 劉素凱 學(xué) 號(hào): 0909102207 指導(dǎo)教師: 陳科文 實(shí)驗(yàn)日期: 2012年11月26日 實(shí)驗(yàn)名稱 主機(jī)端口掃描程序設(shè)計(jì)一實(shí)驗(yàn)?zāi)康暮鸵?1. 實(shí)驗(yàn)?zāi)康?1) 通過(guò)實(shí)驗(yàn),進(jìn)一步加深理解傳輸層服務(wù)的基本概念和 TCP 與 UDP 協(xié)議的工作原理;(2) 掌握網(wǎng)絡(luò)中主機(jī)端口掃描的設(shè)計(jì)思想與編程方法;2. 實(shí)驗(yàn)要求(1) 編寫(xiě)一個(gè)主機(jī)端口掃描程序;(2) 實(shí)現(xiàn)的程序?yàn)閳D形化界面,可以輸入掃描的目的主機(jī)的端口范圍(例如 1128)
2、,輸出所有端口的狀態(tài)(Open 或 Close);(3) 可掃描任意支持TCP/IP 的主機(jī)中的多個(gè)端口。點(diǎn)擊“Tcp Scan”按鈕,掃描 TCP 端口;點(diǎn)擊“Udp Scan”按鈕,掃描 UDP 端口;(4) 按要求撰寫(xiě)實(shí)驗(yàn)報(bào)告(參閱本指導(dǎo)書(shū)的附錄一“實(shí)驗(yàn)報(bào)告內(nèi)容與格式”),并按時(shí)提交報(bào)告。二實(shí)驗(yàn)關(guān)鍵技術(shù)(包括編程環(huán)境和關(guān)鍵 API 函數(shù)簡(jiǎn)介,以及程序設(shè)計(jì)基本思想,比如要解決的關(guān)鍵問(wèn)題、工作流程,或主要數(shù)據(jù)結(jié)構(gòu)的定義、算法的描述) 1.編程環(huán)境:Visual C+6.0 Visua
3、l C+6.0是一款可視化的C、C+編譯環(huán)境,并且它提供的MFC可以幫助我們快速的建立一個(gè)工程項(xiàng)目,在此基礎(chǔ)上進(jìn)行編程,大大的降低了開(kāi)發(fā)難度與周期,是一款效率比較高的編譯軟件。2.編譯關(guān)鍵技術(shù): 基于Socket的網(wǎng)絡(luò)編程Windows Socket規(guī)范定義了一套Microsoft Windows下的網(wǎng)絡(luò)編程接口,它不僅包含了人們所熟悉的Berkeley Socket風(fēng)格的庫(kù)函數(shù);也包含了一組針對(duì)Windows的擴(kuò)展庫(kù)函數(shù),以使程序員能充分地利用Windows消息驅(qū)動(dòng)機(jī)制進(jìn)行編程。在一個(gè)特定版本W(wǎng)indows的基礎(chǔ)上,Windows Sockets也定義了一個(gè)二進(jìn)制接口(ABI),以此來(lái)保證應(yīng)
4、用Windows Sockets API的應(yīng)用程序能夠在任何網(wǎng)絡(luò)軟件供應(yīng)商的符合Windows Sockets協(xié)議的實(shí)現(xiàn)上工作。應(yīng)用程序調(diào)用Windows Sockets的API實(shí)現(xiàn)相互之間的通訊。Windows Sockets又利用下層的網(wǎng)絡(luò)通訊協(xié)議功能和操作系統(tǒng)調(diào)用實(shí)現(xiàn)實(shí)際的通訊工作。 3API關(guān)鍵函數(shù) (1) WSA Startup函數(shù) Int WSA Startup(WORD wVersionRequested,LPWSADATA lpWSAData); 使用Socket的程序在使用Socket之前必須調(diào)用WSA Startup函數(shù)。該函數(shù)的第一個(gè)參數(shù)指明程序請(qǐng)求使用的Socket版本
5、,其中高位字節(jié)指明副版本、低位字節(jié)指明主版本;操作系統(tǒng)利用第二個(gè)參數(shù)返回請(qǐng)求的Socket的版本信息。當(dāng)一個(gè)應(yīng)用程序調(diào)用WSA 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ù)了。該函數(shù)執(zhí)行成功后返回0。 (2) WSA Cleanup函數(shù) Int WSA Cleanup(void); 應(yīng)用程序在完成對(duì)請(qǐng)求的Socket庫(kù)的使用后,要調(diào)用WSA Cleanup函數(shù)來(lái)解除與Socket庫(kù)的綁定并且釋放Socket庫(kù)所占用的系統(tǒng)資源。 (3) sock
6、et函數(shù) SOCKET socket(int af,int type,int protocol); 應(yīng)用程序調(diào)用socket函數(shù)來(lái)創(chuàng)建一個(gè)能夠進(jìn)行網(wǎng)絡(luò)通信的套接字。第一個(gè)參數(shù)指定應(yīng)用程序使用的通信協(xié)議的協(xié)議族,對(duì)于TCP/IP協(xié)議族,該參數(shù)置PF_INET;第二個(gè)參數(shù)指定要?jiǎng)?chuàng)建的套接字類型,流套接字類型為SOCK_STREAM、數(shù)據(jù)報(bào)套接字類型為SOCK_DGRAM;第三個(gè)參數(shù)指定應(yīng)用程序所使用的通信協(xié)議。該函數(shù)如果調(diào)用成功就返回新創(chuàng)建的套接字的描述符,如果失敗就返回INVALID_SOCKET。套接字描述符是一個(gè)整數(shù)類型的值。每個(gè)進(jìn)程的進(jìn)程空間里都有一個(gè)套接字描述符表,該表中存放著套接字描述
7、符和套接字?jǐn)?shù)據(jù)結(jié)構(gòu)的對(duì)應(yīng)關(guān)系。該表中有一個(gè)字段存放新創(chuàng)建的套接字的描述符,另一個(gè)字段存放套接字?jǐn)?shù)據(jù)結(jié)構(gòu)的地址,因此根據(jù)套接字描述符就可以找到其對(duì)應(yīng)的套接字?jǐn)?shù)據(jù)結(jié)構(gòu)。每個(gè)進(jìn)程在自己的進(jìn)程空間里都有一個(gè)套接字描述符表但是套接字?jǐn)?shù)據(jù)結(jié)構(gòu)都是在操作系統(tǒng)的內(nèi)核緩沖里。 (4) close socket函數(shù) Int close socket(SOCKETs); Close socket函數(shù)用來(lái)關(guān)閉一個(gè)描述符為s套接字。由于每個(gè)進(jìn)程中都有一個(gè)套接字描述符表,表中的每個(gè)套接字描述符都對(duì)應(yīng)了一個(gè)位于操作系統(tǒng)緩沖區(qū)中的套接字?jǐn)?shù)據(jù)結(jié)構(gòu),因此有可能有幾個(gè)套接字描述符指向同一個(gè)套接字?jǐn)?shù)據(jù)結(jié)構(gòu)。套接字?jǐn)?shù)據(jù)結(jié)構(gòu)中專門(mén)有一個(gè)
8、字段存放該結(jié)構(gòu)的被引用次數(shù),即有多少個(gè)套接字描述符指向該結(jié)構(gòu)。當(dāng)調(diào)用close socket函數(shù)時(shí),操作系統(tǒng)先檢查套接字?jǐn)?shù)據(jù)結(jié)構(gòu)中的該字段的值,如果為1,就表明只有一個(gè)套接字描述符指向它,因此操作系統(tǒng)就先把s在套接字描述符表中對(duì)應(yīng)的那條表項(xiàng)清除,并且釋放s對(duì)應(yīng)的套接字?jǐn)?shù)據(jù)結(jié)構(gòu);如果該字段大于1,那么操作系統(tǒng)僅僅清除s在套接字描述符表中的對(duì)應(yīng)表項(xiàng),并且把s對(duì)應(yīng)的套接字?jǐn)?shù)據(jù)結(jié)構(gòu)的引用次數(shù)減1。Close socket函數(shù)如果執(zhí)行成功就返回0,否則返回SOCKET_ERROR。 (5) send函數(shù) Int send(SOCKETs,const char FAR * buf,int len,int
9、flags); 不論是客戶還是服務(wù)器應(yīng)用程序都用send函數(shù)來(lái)向TCP連接的另一端發(fā)送數(shù)據(jù)。客戶程序一般用send函數(shù)向服務(wù)器發(fā)送請(qǐng)求,而服務(wù)器則通常用send函數(shù)來(lái)向客戶程序發(fā)送應(yīng)答。該函數(shù)的第一個(gè)參數(shù)指定發(fā)送端套接字描述符;第二個(gè)參數(shù)指明一個(gè)存放應(yīng)用程序要發(fā)送數(shù)據(jù)的緩沖區(qū);第三個(gè)參數(shù)指明實(shí)際要發(fā)送的數(shù)據(jù)的字節(jié)數(shù);第四個(gè)參數(shù)一般置0。 (6) recv函數(shù) Int recv(SOCKETs,char FAR * buf,int len,int flags); 不論是客戶還是服務(wù)器應(yīng)用程序都用recv函數(shù)從TCP連接的另一端接收數(shù)據(jù)。該函數(shù)的第一個(gè)參數(shù)指定接收端套接字描述符;第二個(gè)參數(shù)指明一個(gè)
10、緩沖區(qū),該緩沖區(qū)用來(lái)存放recv函數(shù)接收到的數(shù)據(jù);第三個(gè)參數(shù)指明buf的長(zhǎng)度;第四個(gè)參數(shù)一般置0。 (7) bind函數(shù) Int bind(SOCKETs,const struct sockaddr FAR * name,int namelen); 當(dāng)創(chuàng)建了一個(gè)Socket以后,套接字?jǐn)?shù)據(jù)結(jié)構(gòu)中有一個(gè)默認(rèn)的IP地址和默認(rèn)的端口號(hào)。一個(gè)服務(wù)程序必須調(diào)用bind函數(shù)來(lái)給其綁定一個(gè)IP地址和一個(gè)特定的端口號(hào)。 (8) listen函數(shù) Int listen(SOCKETs,int backlog); 服務(wù)程序可以調(diào)用listen函數(shù)使其流套接字s處于監(jiān)聽(tīng)狀態(tài)。處于監(jiān)聽(tīng)狀態(tài)的流套接字s將維護(hù)一個(gè)客戶連
11、接請(qǐng)求隊(duì)列,該隊(duì)列最多容納backlog個(gè)客戶連接請(qǐng)求。假如該函數(shù)執(zhí)行成功,則返回0;如果執(zhí)行失敗,則返回SOCKET_ERROR。 (9) accept函數(shù) SOCKET accept(SOCKETs,struct sockaddr FAR * addr,int FAR * addrlen); 服務(wù)程序調(diào)用accept函數(shù)從處于監(jiān)聽(tīng)狀態(tài)的流套接字s的客戶連接請(qǐng)求隊(duì)列中取出排在最前的一個(gè)客戶請(qǐng)求,并且創(chuàng)建一個(gè)新的套接字來(lái)與客戶套接字創(chuàng)建連接通道,如果連接成功,就返回新創(chuàng)建的套接字的描述符,以后與客戶套接字交換數(shù)據(jù)的是新創(chuàng)建的套接字;如果失敗就返回INVALID_SOCKET。該函數(shù)的第一個(gè)參數(shù)
12、指定處于監(jiān)聽(tīng)狀態(tài)的流套接字;操作系統(tǒng)利用第二個(gè)參數(shù)來(lái)返回新創(chuàng)建的套接字的地址結(jié)構(gòu);操作系統(tǒng)利用第三個(gè)參數(shù)來(lái)返回新創(chuàng)建的套接字的地址結(jié)構(gòu)的長(zhǎng)度。 (10) connect函數(shù) Int connect(SOCKETs,const struct sockaddr FAR * name,int namelen); 客戶程序調(diào)用connect函數(shù)來(lái)使客戶Sockets與監(jiān)聽(tīng)于name所指定的計(jì)算機(jī)的特定端口上的服務(wù)Socket進(jìn)行連接。如果連接成功,connect返回0;如果失敗則返回SOCKET_ERROR。4.程序設(shè)計(jì)基本思想 (1)端口掃描的原理 TCP端口掃描可以分為3種類型: Connect掃
13、描:這是原理最簡(jiǎn)單的TCP掃描方式。端口掃描程序調(diào)用Connect系統(tǒng)調(diào)用,嘗試連接目的主機(jī)的指定端口。如果成功建立TCP連接,說(shuō)明兩臺(tái)主機(jī)完成一次完整的三次握手過(guò)程,該端口處于開(kāi)啟狀態(tài);否則,說(shuō)明該端口處于關(guān)閉狀態(tài)。這種方式的優(yōu)點(diǎn)是不需要手工構(gòu)造TCP包。由于TCP協(xié)議是保證可靠運(yùn)行的協(xié)議,Connect不會(huì)在嘗試第一次連接未得到響應(yīng)就放棄,而是會(huì)經(jīng)過(guò)多次嘗試后才徹底放棄,因此他的缺點(diǎn)是工作效率比較低。 SYN掃描:這是當(dāng)前使用最廣泛的TCP掃描方式。端口掃描程序向目的主機(jī)的指定端口發(fā)送SYN=1的TCP包。如果接收到SYN=1,ACK=1的T P包,說(shuō)明該端口處于開(kāi)啟狀態(tài);如果接收到RST
14、=1的TCP包,說(shuō)明該端口處于關(guān)閉狀態(tài);如果沒(méi)有接收到任何數(shù)據(jù)包,并且確定目的主機(jī)開(kāi)啟,說(shuō)明該端口被防火墻等安全設(shè)備過(guò)濾。由于SYN掃描不完成TCP連接的三次握手過(guò)程,因此這種方式稱為半開(kāi)放掃描。這種方式的最大優(yōu)點(diǎn)是工作效率高,缺點(diǎn)是容易被入侵檢測(cè)系統(tǒng)發(fā)現(xiàn)。 FIN掃描:這是一種比較隱蔽的TCP掃描方式。端口掃描程序向目的主機(jī)的指定端口發(fā)送FIN=0的TCP包。如果沒(méi)有接收到任何數(shù)據(jù)包,并且確定目的主機(jī)開(kāi)啟,說(shuō)明該端口處于開(kāi)啟狀態(tài);如果接受到RST=1的TCP包,說(shuō)明該端口處于關(guān)閉狀態(tài)。FIN掃描的應(yīng)用有很大的局限性。如果不同系統(tǒng)實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議棧的細(xì)節(jié)不同,F(xiàn)IN掃描只能用于Linux或UNIX
15、系統(tǒng)。如果目的主機(jī)使用的是Windows系統(tǒng),無(wú)論端口是否開(kāi)啟都會(huì)直接返回RST=1的TCP包。 UDP端口針對(duì)基于UDP服務(wù)的網(wǎng)絡(luò)應(yīng)用。在大多數(shù)情況下,如果向未開(kāi)啟的UDP端口發(fā)送數(shù)據(jù),目的主機(jī)都會(huì)返回一個(gè)端口不可達(dá)1CMP包。端口掃描程序向目的主機(jī)的指定端口發(fā)送零字節(jié)的UDP包。如果沒(méi)有接收到任何數(shù)據(jù)包,并且確定目的主機(jī)開(kāi)啟,說(shuō)明該端口處于開(kāi)啟狀態(tài);如果接收到端口不可達(dá)的ICMP包,說(shuō)明該端口處于關(guān)閉狀態(tài)。由于UDP和ICMP協(xié)議都是不可靠的協(xié)議,沒(méi)有接收到響應(yīng)可能由于數(shù)據(jù)包沒(méi)有到達(dá),因此需要對(duì)端口進(jìn)行多次掃描才能確定狀態(tài)。 (2)TCP端口掃描 TCP端口掃描采用的是Connect掃描,
16、通過(guò)Connect系統(tǒng)調(diào)用嘗試連接目的主機(jī)的端口。如果這次TCP連接成功,說(shuō)明該端口處于開(kāi)啟狀態(tài);否則,說(shuō)明該端口處于關(guān)閉狀態(tài)。Connect掃描的最大優(yōu)點(diǎn)是原理簡(jiǎn)單,不需要具有管理員或超級(jí)用戶權(quán)限。首先,端口掃描程序調(diào)用socket()函數(shù)建立套接字,SOCK_STREAM表示流式套接字;其次,調(diào)用connect()函數(shù)請(qǐng)求與目的主機(jī)的指定端口建立連接;最后,根據(jù)TCP連接是否成功建立,判斷目的主機(jī)中的端口狀態(tài)。 (3)UDP端口掃描 UDP端口掃描依據(jù)的是返回的ICMP包類型。如果沒(méi)有收到任何數(shù)據(jù)包,并且確定目的主機(jī)開(kāi)啟,說(shuō)明該端口處于開(kāi)啟狀態(tài);如果接收到端口不可達(dá)的ICMP包,說(shuō)明該端口
17、處于關(guān)閉狀態(tài)。首先,端口掃描程序調(diào)用socket()函數(shù)建立套接字,SOCK_DGRAM表示數(shù)據(jù)報(bào)套接字;其次,調(diào)用ioctlsoket()函數(shù)將套接字設(shè)置為非阻塞模式,F(xiàn)IONBIO根據(jù)Flag的值決定設(shè)置為哪種模式,F(xiàn)lag為1表示非阻塞模式,F(xiàn)lag為0表示阻塞模式;最后,調(diào)用sendto()函數(shù)發(fā)送UDP數(shù)據(jù)包,調(diào)用recvfrom()函數(shù)接受返回的錯(cuò)誤碼,根據(jù)錯(cuò)誤碼判斷目的主機(jī)中的端口狀態(tài)。 (4)執(zhí)行順序 第一步,客戶機(jī)程序會(huì)初始化用戶界面; 第二步,客戶機(jī)建立Windows庫(kù)綁定關(guān)系,并且創(chuàng)建流式或數(shù)據(jù)包套接字; 第三步,如果是TCP端口掃描,客戶機(jī)請(qǐng)求與目的主機(jī)的端口創(chuàng)建連接,
18、如果是UDP端口掃描,客戶機(jī)向目的主機(jī)的端口發(fā)送UDP包; 第四步,如果是TCP端口掃描,客戶機(jī)根據(jù)連接建立情況判斷端口的狀態(tài),如果是UDP端口掃描,客戶機(jī)根據(jù)接收的錯(cuò)誤碼判斷端口狀態(tài); 第五步,如果是TCP端口掃描,客戶機(jī)可能需要斷開(kāi)已經(jīng)建立的連接; 第六步,F(xiàn)TP客戶機(jī)釋放流式套接字,并且解除Winsock庫(kù)綁定關(guān)系。三實(shí)驗(yàn)操作過(guò)程(包括:每一步實(shí)驗(yàn)內(nèi)容、實(shí)驗(yàn)方法和中間結(jié)果,實(shí)驗(yàn)過(guò)程中遇到的問(wèn)題及解決方法。) 1.實(shí)驗(yàn)準(zhǔn)備階段: 第一步,在實(shí)驗(yàn)之前,我先閱讀了實(shí)驗(yàn)要求,復(fù)習(xí)傳輸層的基本概念,主要的傳輸層協(xié)議,端口號(hào)的分配辦法,端口掃描的工作原理。傳輸層協(xié)議可以分為兩種類型:TCP和UDP。
19、其中,TCP是一種可靠的、面向連接的傳輸層協(xié)議,它允許將源主機(jī)的數(shù)據(jù)無(wú)差錯(cuò)的傳輸?shù)侥康闹鳈C(jī)。UDP是一種不可靠的、無(wú)連接的傳輸層協(xié)議。 第二步,繼續(xù)熟悉Microsoft Visual C+6.0編譯環(huán)境,以及利用它提供的MFC建立工程項(xiàng)目,熟悉基于Socket套接字的網(wǎng)絡(luò)編程技術(shù)。 第三步,我開(kāi)始閱讀別人已經(jīng)做過(guò)的實(shí)例作為參考,這樣能夠更加快速的學(xué)會(huì)如何去編寫(xiě)程序。 2.實(shí)驗(yàn)進(jìn)行階段:第一步,先利用Visual C+提供的MFC建立一個(gè)工程項(xiàng)目。 如下圖: 選擇MFC AppWizard(exe),并進(jìn)行相應(yīng)的設(shè)置,生成一個(gè)工程項(xiàng)目,如下圖: 第二步,GUI界面的設(shè)計(jì),設(shè)計(jì)一個(gè)美觀人性化的人
20、機(jī)交互界面。 結(jié)果如下圖: 第三步,編寫(xiě)代碼。第四步,程序調(diào)試。 3.實(shí)驗(yàn)進(jìn)行后 根據(jù)得到的實(shí)驗(yàn)結(jié)果,進(jìn)一步理解了主要的傳輸層協(xié)議:TCP和UDP。以及他們的工作特點(diǎn)和工作方式,熟悉了端口號(hào)的分配方法,端口掃描的工作原理。 最后一項(xiàng)工作,實(shí)驗(yàn)總結(jié),撰寫(xiě)實(shí)驗(yàn)報(bào)告書(shū)。 4遇到的問(wèn)題及解決辦法 C+接觸的時(shí)間不久,用起來(lái)還不是那么的得心應(yīng)手,加上對(duì)開(kāi)發(fā)環(huán)境的不熟悉,給編寫(xiě)程序帶來(lái)了不小的困難。我參考了指導(dǎo)書(shū)上的參考代碼,弄明白了它的編程思想,然后借鑒到我的程序上來(lái)。 之后的難題便是基于Socket的網(wǎng)絡(luò)編程技術(shù),以前沒(méi)有涉及過(guò)這個(gè)概念,我按照老師的建議,參考了實(shí)驗(yàn)指導(dǎo)書(shū)上的代碼,在編譯調(diào)試過(guò)程中,實(shí)
21、在調(diào)試不過(guò)的地方,去詢問(wèn)同學(xué)。通過(guò)編程的過(guò)程,對(duì)傳輸層的各個(gè)概念有了更加深刻的理解。四程序源代碼(要求有良好的編程規(guī)范和必要的注釋信息,完整源代碼可打印并粘貼)/頭文件代碼Class CFindPortDlg: public CDialog public: enumIDD=IDD_FINDPORT_DIALOG; CString m_Address; CString m_Status; CString m_Port; Private: SOCKET Sockete;/代碼文件#include”stdafx.h”#include”FindPort.h”#include”FindPortDlg.h
22、”#include”winsock.h”Void CFindPortDlg:OnFcpscan() UpdateData(ture); m_status+=”TCP Port”; WSADATA WSAdata; If(WSAStartup(MAKEWORD(2,2),&WSAData)!=0) MessageBox(“初始化Winsocket失敗!”);Return;Socket=socket(AF_INET,SOCK_STREAM,0);If(Socket=INVALID_SOCKET) MessageBox(“創(chuàng)建Socket失敗!”); WSACleanup(); Return
23、;Int IpAddress;IpAddress=inet_addr(m_Address);If(IpAddress=INADDR_NONE) Hostent * pHostent=gethostbyname(m_Address);If(pHostent) Ipaddress=(*(in_addr*)pHostent->h_addr).s_addr;Sockaddr_in DestHost;memset(&Desthost,0,sizeof(DestHost);DestHost.sin_family=AF_INET;DestHost.sin_port=htons(atoi(m_p
24、ort);DestHost.sin_addr.s_addr=IpAddress;Int nConnect;nConnect = connect(Socket,(sockaddr*)&DestHost,sizeof(DestHost);if(nConnect=SOCKET_ERROR) m_Status+=m_Port; m_Status+=”:Closern”;Else m_status+=m_Port; m_Status+=”:Openrn”;UpdateData(false);Closesocket(Socket);WSACleanup();Void CFindPortDlg:On
25、Udpscan() UpdateData(ture); m_status+=”UDP Port”; WSADATA WSAData; If(WSAStartup(MAKEWORD(2,2),&WSAData)!=0) MessageBox(“初始化Winsocket失??!”);Return;Socket=socket(AF_INET,SOCK_STREAM,0);If(Socket=INVALID_SOCKET) MessageBox(“創(chuàng)建Socket失敗!”); WSACleanup(); Return; Int nIotrl;unsigned long Flag=1; nIotr
26、l=ioctlsocket(Socket,FIONBIO,&Flag); if(nIotrl=SOCKET_ERROR) MessageBox(“設(shè)置Socket模式失??!”); closesocket(Socket); WSACleanup(); Return;Int IpAddress;IpAddress=inet_addr(m_Address);If(IpAddress=INADDR_NONE) Hostent * pHostent=gethostentbyname(m_Address); If(pHostent) IpAddress=(*(in_addr*)pHostent-&
27、gt;h_addr).s_addr;Sockaddr_in DestHost;memset(&Desthost,0,sizeof(DestHost);DestHost.sin_family=AF_INET;DestHost.sin_port=htons(atoi(m_port);DestHost.sin_addr.s_addr=IpAddress; char * SendBuf; sendBuf=new char2; memset(SendBuf,0,2); int nSend; nSend=sendto(Socket,SendBuf,1,0,(struct sockaddr*)&DestHost,sizeof(DestHost); if(nSend=SOCKET_ERROR) MessageBox(“UDP包發(fā)送失敗!”);closesocket(Socket);WSACleanup();return;Sleep(500);Sockaddr_in SourceHost;Int SourceSize;SourceSize=sizeof(SourceSize);char * RecvBuf;RecvBuf=ne
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年解除終止勞動(dòng)合同證明書(shū)模板8號(hào)
- 三年級(jí)上冊(cè)數(shù)學(xué)教案-第七單元第1課時(shí) 認(rèn)識(shí)周長(zhǎng)-西師大版
- 五年級(jí)上冊(cè)數(shù)學(xué)教案 - 平行四邊形的面積 北師大版
- 譯林版(三起)三年級(jí)上冊(cè)期中檢測(cè)英語(yǔ)試卷(含解析)
- 第一單元第2課《小小工程師》教學(xué)設(shè)計(jì)-2024-2025學(xué)年科學(xué)新蘇教版一年級(jí)上冊(cè)
- 蘇教版數(shù)學(xué)三年級(jí)上冊(cè)單元測(cè)試卷-第二單元-千克和克(含答案)-
- 人教版三年級(jí)上冊(cè)期末模擬考試數(shù)學(xué)試卷(二)
- 《行軍九日思長(zhǎng)安故園》歷年中考古詩(shī)欣賞試題匯編(截至2024年)
- 第8單元 26 我的“長(zhǎng)生果”名師版2024-2025學(xué)年五年級(jí)語(yǔ)文上冊(cè)同步教學(xué)設(shè)計(jì)(統(tǒng)編版)
- 2024年陶瓷制零件相關(guān)陶瓷制品項(xiàng)目資金籌措計(jì)劃書(shū)
- 社會(huì)企業(yè)參與養(yǎng)老服務(wù)的模式與效果
- 2025年執(zhí)業(yè)醫(yī)師定期考核題庫(kù)及參考答案
- 2025年北京交通職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年常考版參考題庫(kù)含答案解析
- 心理健康七個(gè)一主題活動(dòng)方案
- 多元化票務(wù)系統(tǒng)設(shè)計(jì)-深度研究
- 2024年菏澤職業(yè)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- GB/T 22180-2024速凍裹衣魚(yú)
- 《公路施工組織設(shè)計(jì)》課件
- 人教版地理七年級(jí)下冊(cè)7.1.1 亞洲的自然環(huán)境(課件33張)
- 中醫(yī)藥防疫課件
- 統(tǒng)編版(2024新版)七年級(jí)下冊(cè)歷史教材習(xí)題答案
評(píng)論
0/150
提交評(píng)論