文章編號:10941時間:2024-09-29人氣:
WinSock網(wǎng)絡編程實用寶典 一、TCP/IP 體系結構與特點 1、TCP/IP體系結構TCP/IP協(xié)議實際上就是在物理網(wǎng)上的一組完整的網(wǎng)絡協(xié)議。 其中TCP是提供傳輸層服務,而IP則是提供網(wǎng)絡層服務。 TCP/IP包括以下協(xié)議:IP: 網(wǎng)間協(xié)議(Internet Protocol) 負責主機間數(shù)據(jù)的路由和網(wǎng)絡上數(shù)據(jù)的存儲。 同時為ICMP,TCP, UDP提供分組發(fā)送服務。 用戶進程通常不需要涉及這一層。 ARP: 地址解析協(xié)議(Address Resolution Protocol) 此協(xié)議將網(wǎng)絡地址映射到硬件地址。 RARP: 反向地址解析協(xié)議(Reverse Address Resolution Protocol) 此協(xié)議將硬件地址映射到網(wǎng)絡地址ICMP: 網(wǎng)間報文控制協(xié)議(Internet Control Message Protocol) 此協(xié)議處理信關和主機的差錯和傳送控制。 TCP: 傳送控制協(xié)議(Transmission Control Protocol) 這是一種提供給用戶進程的可靠的全雙工字節(jié)流面向連接的協(xié)議。 它要為用戶進程提供虛電路服務,并為數(shù)據(jù)可靠傳輸建立檢查。 (注:大多數(shù)網(wǎng)絡用戶程序使用TCP)UDP: 用戶數(shù)據(jù)報協(xié)議(User;taskHnd = WSAAsyncBetHostByName(hWnd,wMsg,hostname,buf,buflen); 需要注意的是,由于 Windows 的內(nèi)存對像可以設置為可移動和可丟棄,因此在操作內(nèi)存對象是,必須保證 WIindows Sockets DLL 對象是可用的。 3、異步數(shù)據(jù)傳輸使用 send() 或 sendto() 函數(shù)來發(fā)送數(shù)據(jù),使用 recv() 或recvfrom() 來接收數(shù)據(jù)。 Windows Sockets 不鼓勵用戶使用阻塞方式傳輸數(shù)據(jù),因為那樣可能會阻塞整個 Windows 環(huán)境。 4、出錯處理Windows 提供了一個函數(shù)來獲取最近的錯誤碼 WSAGetLastError(),一、服務器端操作 socket(套接字)1)在初始化階段調用WSAStartup()此函數(shù)在應用程序中初始化Windows Sockets DLL ,只有此函數(shù)調用成功后,應用程序才可以再調用其他Windows Sockets DLL中的API函數(shù)。 在程式中調用該函數(shù)的形式如下:WSAStartup((WORD)((1int PASCAL FAR listen( SOCKET s, int backlog );參 數(shù): s:需要建立監(jiān)聽的Socket;backlog:最大連接個數(shù); 服務器端的Socket調用完listen()后,如果此時客戶端調用connect()函數(shù)提出連接申請的話,Server 端必須再調用accept() 函數(shù),這樣服務器端和客戶端才算正式完成通信程序的連接動作。 為了知道什么時候客戶端提出連接要求,從而服務器端的Socket在恰當?shù)臅r候調用accept()函數(shù)完成連接的建立,我們就要使用WSAAsyncSelect()函數(shù),讓系統(tǒng)主動來通知我們有客戶端提出連接請求了。 該函數(shù)調用成功返回0,否則返回SOCKET_ERROR。 int PASCAL FAR WSAAsyncSelect( SOCKET s, HWND hWnd,unsigned int wMsg, long lEvent );參數(shù): s:Socket 對象;hWnd :接收消息的窗口句柄;wMsg:傳給窗口的消息;lEvent:被注冊的網(wǎng)絡事件,也即是應用程序向窗口發(fā)送消息的網(wǎng)路事件,該值為下列值FD_READ、FD_WRITE、FD_OOB、FD_ACCEPT、FD_CONNECT、FD_CLOSE的組合,各個值的具體含意為FD_READ:希望在套接字S收到數(shù)據(jù)時收到消息;FD_WRITE:希望在套接字S上可以發(fā)送數(shù)據(jù)時收到消息;FD_ACCEPT:希望在套接字S上收到連接請求時收到消息;FD_CONNECT:希望在套接字S上連接成功時收到消息;FD_CLOSE:希望在套接字S上連接關閉時收到消息;FD_OOB:希望在套接字S上收到帶外數(shù)據(jù)時收到消息。 5)服務器端接受客戶端的連接請求當Client提出連接請求時,Server 端hwnd視窗會收到Winsock Stack送來我們自定義的一個消息,這時,我們可以分析lParam,然后調用相關的函數(shù)來處理此事件。 為了使服務器端接受客戶端的連接請求,就要使用accept() 函數(shù),該函數(shù)新建一Socket與客戶端的Socket相通,原先監(jiān)聽之Socket繼續(xù)進入監(jiān)聽狀態(tài),等待他人的連接要求。 該函數(shù)調用成功返回一個新產(chǎn)生的Socket對象,否則返回INVALID_SOCKET。 二、客戶端Socket的操作1)建立客戶端的Socket客戶端應用程序首先也是調用WSAStartup() 函數(shù)來與Winsock的動態(tài)連接庫建立關系,然后同樣調用socket() 來建立一個TCP或UDP socket(相同協(xié)定的 sockets 才能相通,TCP 對 TCP,UDP 對 UDP)。 與服務器端的socket 不同的是,客戶端的socket 可以調用 bind() 函數(shù),由自己來指定IP地址及port號碼;但是也可以不調用 bind(),而由 Winsock來自動設定IP地址及port號碼。 2)提出連接申請客戶端的Socket使用connect()函數(shù)來提出與服務器端的Socket建立連接的申請,函數(shù)調用成功返回0,否則返回SOCKET_ERROR。 int PASCAL FAR connect( SOCKET s, const Struct sockaddr FAR *name, int namelen );參 數(shù):s:Socket 的識別碼;name:Socket想要連接的對方地址;namelen:name的長度 三、數(shù)據(jù)的傳送雖然基于TCP/IP連接協(xié)議(流套接字)的服務是設計客戶機/服務器應用程序時的主流標準,但有些服務也是可以通過無連接協(xié)議(數(shù)據(jù)報套接字)提供的。 先介紹一下TCP socket 與UDP socket 在傳送數(shù)據(jù)時的特性:Stream (TCP) Socket 提供雙向、可靠、有次序、不重復的資料傳送。 Datagram (UDP) Socket 雖然提供雙向的通信,但沒有可靠、有次序、不重復的保證,所以UDP傳送數(shù)據(jù)可能會收到無次序、重復的資料,甚至資料在傳輸過程中出現(xiàn)遺漏。 由于UDP Socket 在傳送資料時,并不保證資料能完整地送達對方,所以絕大多數(shù)應用程序都是采用TCP處理Socket,以保證資料的正確性。 一般情況下TCP Socket 的數(shù)據(jù)發(fā)送和接收是調用send() 及recv() 這兩個函數(shù)來達成,而 UDP Socket則是用sendto() 及recvfrom() 這兩個函數(shù),這兩個函數(shù)調用成功發(fā)揮發(fā)送或接收的資料的長度,否則返回SOCKET_ERROR。 int PASCAL FAR send( SOCKET s, const char FAR *buf,int len, int flags );參數(shù):s:Socket 的識別碼buf:存放要傳送的資料的暫存區(qū)len buf:的長度flags:此函數(shù)被調用的方式 對于Datagram Socket而言,若是 datagram 的大小超過限制,則將不會送出任何資料,并會傳回錯誤值。 對Stream Socket 言,Blocking 模式下,若是傳送系統(tǒng)內(nèi)的儲存空間不夠存放這些要傳送的資料,send()將會被block住,直到資料送完為止;如果該Socket被設定為 Non-Blocking 模式,那么將視目前的output buffer空間有多少,就送出多少資料,并不會被 block 住。 flags 的值可設為 0 或 MSG_DONTROUTE及 MSG_OOB 的組合。 int PASCAL FAR recv( SOCKET s, char FAR *buf, int len, int flags );參數(shù):s:Socket 的識別碼buf:存放接收到的資料的暫存區(qū)len buf:的長度flags:此函數(shù)被調用的方式 對Stream Socket 言,我們可以接收到目前input buffer內(nèi)有效的資料,但其數(shù)量不超過len的大小。 TCP/IP Winsock編程要點利用Winsock編程由同步和異步方式,同步方式邏輯清晰,編程專注于應用,在搶先式的多任務操作系統(tǒng)中(WinNt、Win2K)采用多線程方式效率基本達到異步方式的水平,應此以下為同步方式編程要點。 VC++編程實現(xiàn)網(wǎng)絡嗅探器從事網(wǎng)絡安全的技術人員和相當一部分準黑客(指那些使用現(xiàn)成的黑客軟件進行攻擊而不是根據(jù)需要去自己編寫代碼的人)都一定不會對網(wǎng)絡嗅探器(sniffer)感到陌生,網(wǎng)絡嗅探器無論是在網(wǎng)絡安全還是在黑客攻擊方面均扮演了很重要的角色。 通過使用網(wǎng)絡嗅探器可以把網(wǎng)卡設置于混雜模式,并可實現(xiàn)對網(wǎng)絡上傳輸?shù)臄?shù)據(jù)包的捕獲與分析。 此分析結果可供網(wǎng)絡安全分析之用,但如為黑客所利用也可以為其發(fā)動進一步的攻擊提供有價值的信息。 可見,嗅探器實際是一把雙刃劍。 雖然網(wǎng)絡嗅探器技術被黑客利用后會對網(wǎng)絡安全構成一定的威脅,但嗅探器本身的危害并不是很大,主要是用來為其他黑客軟件提供網(wǎng)絡情報,真正的攻擊主要是由其他黑軟來完成的。 而在網(wǎng)絡安全方面,網(wǎng)絡嗅探手段可以有效地探測在網(wǎng)絡上傳輸?shù)臄?shù)據(jù)包信息,通過對這些信息的分析利用是有助于網(wǎng)絡安全維護的。 權衡利弊,有必要對網(wǎng)絡嗅探器的實現(xiàn)原理進行介紹。 嗅探器設計原理 嗅探器作為一種網(wǎng)絡通訊程序,也是通過對網(wǎng)卡的編程來實現(xiàn)網(wǎng)絡通訊的,對網(wǎng)卡的編程也是使用通常的套接字(socket)方式來進行。 但是,通常的套接字程序只能響應與自己硬件地址相匹配的或是以廣播形式發(fā)出的數(shù)據(jù)幀,對于其他形式的數(shù)據(jù)幀比如已到達網(wǎng)絡接口但卻不是發(fā)給此地址的數(shù)據(jù)幀,網(wǎng)絡接口在驗證投遞地址并非自身地址之后將不引起響應,也就是說應用程序無法收取到達的數(shù)據(jù)包。 而網(wǎng)絡嗅探器的目的恰恰在于從網(wǎng)卡接收所有經(jīng)過它的數(shù)據(jù)包,這些數(shù)據(jù)包即可以是發(fā)給它的也可以是發(fā)往別處的。 顯然,要達到此目的就不能再讓網(wǎng)卡按通常的正常模式工作,而必須將其設置為混雜模式。 本文介紹的以原始套接字方式對網(wǎng)絡數(shù)據(jù)進行捕獲的方法實現(xiàn)起來比較簡單,尤其是不需要編寫VxD虛擬設備驅動程序就可以實現(xiàn)抓包,使得其編寫過程變的非常簡便,但由于捕獲到的數(shù)據(jù)包頭不包含有幀信息,因此不能接收到與 IP 同屬網(wǎng)絡層的其它數(shù)據(jù)包, 如 ARP數(shù)據(jù)包、RARP數(shù)據(jù)包等。 在前面給出的示例程序中考慮到安全因素,沒有對數(shù)據(jù)包做進一步的分析,而是僅僅給出了對一般信息的分析方法。 通過本文的介紹,可對原始套接字的使用方法以及TCP/IP協(xié)議結構原理等知識有一個基本的認識。 本文所述代碼在Windows 2000下由Microsoft Visual C++ 6.0編譯調試通過。 希望對你有所幫助
要設置《按鍵精靈》在指定窗口運行,首先需要獲取目標窗口的句柄,然后在按鍵精靈中通過該句柄對窗口進行操作。 具體來說,可以按照以下步驟進行:1. 打開按鍵精靈并啟動抓抓工具:啟動按鍵精靈軟件后,選擇“新建”以創(chuàng)建一個新的腳本。 接著,點擊上方的菜單工具欄,從中選擇“抓抓工具”來啟動句柄捕獲功能。 2. 獲取目標窗口的句柄:在抓抓工具中,可以看到當前運行的所有程序的句柄列表。 此時,打開你想要操作的窗口,并在抓抓工具中刷新句柄列表。 找到目標窗口的句柄后,復制該句柄以便后續(xù)使用。 3. 在按鍵精靈中設置指定窗口操作:返回到按鍵精靈的主界面,在腳本編輯區(qū)域中,使用相應的命令來激活和操作目標窗口。 這通常涉及到使用Windows插件命令中的“激活窗口”功能,并輸入之前復制的目標窗口句柄。 一旦窗口被激活,就可以繼續(xù)添加其他操作命令,如最大化窗口、輸入文本、點擊按鈕等。 4. 測試并保存腳本:在完成腳本編輯后,建議進行測試以確保所有操作都能按預期在指定窗口上執(zhí)行。 如果一切正常,保存腳本以便將來再次使用。 值得注意的是,句柄在每次打開窗口時都可能是不同的,因此如果需要頻繁地在同一類窗口上執(zhí)行操作,可以考慮編寫一個腳本來動態(tài)獲取句柄,而不是硬編碼一個固定的值。 此外,不同的操作系統(tǒng)和應用程序可能對窗口句柄有不同的處理方式,因此在實際操作中可能需要進行一些調整。 如果對Windows API或相關的編程知識不熟悉,可能需要先學習一些基礎知識以便更好地理解和使用這些功能。 總的來說,通過設置按鍵精靈在指定窗口運行,可以實現(xiàn)自動化操作和提高工作效率。 無論是在游戲、辦公還是其他領域,這一功能都能帶來極大的便利。
正常:
按鍵:
鼠標點擊:
已經(jīng)幫你做例子了!例子已經(jīng)上傳到本帖,按鍵 和 鼠標點擊都是后臺執(zhí)行的,全部用的是API做的!自己下載看看吧!
記得采納!
很抱歉,回答者上傳的附件已失效
姹? 命令 ClientToScreen, 整數(shù)型, , ClientToScreen, , 非零表示成功,零表示失敗.參數(shù) 窗口句柄, 整數(shù)型, , hwnd,要取出區(qū)域坐標的窗口句柄.參數(shù) 位置變量, 坐標型, , lpPoint,返回的坐標點返回的是坐標型坐標.x就是窗口的頂點x坐標.y就是窗口的頂點y 例程:.版本 2坐標.x = 0坐標.y = 0ClientToScreen (窗口句柄, 坐標)
hMod = GetClassLong(hWnd,GCL_HMODULE); 函數(shù)功能:該函數(shù)返回與指定窗口相關的WNDCLASSEX結構的指定32位值。 函數(shù)原型:DWORD GetClassLong(HWND hWnd,int nlndex);參數(shù):hWnd:窗口句柄間接給出的窗口所屬的類。 nlndex:指定要恢復的32位值。 從額外的類存儲空間恢復一個32位的值,指定的一個大于等于0的被恢復值的偏移量。 有效值為從0開始到額外類存儲空間字節(jié)數(shù)一4。 例如,若指定了12位或多于12位的額外類存儲空間,則應設為第三個32位整數(shù)的索引位8。 要從WNDCLASSEX結構中恢復任何值,需要指定下面值之一:GCSW原子:獲得一個唯一標識窗口類的原子值,該值與RegisterClassEx函數(shù)的返回值相同。 GCL_CBWNDEXTRA:獲得與類中的每個窗口相關的額外窗口中內(nèi)存空間的字節(jié)大小,進入該存儲空間的方法請參看GetWindwoLong。 GCL_HBRBACKGROUND:獲得與類有關的背景刷子的句柄。 GCL_HCURSOR:獲得與類有關的光標的句柄。 GCL_HICON:獲得與類有關的圖標的句柄。 GCL_HICONSM:獲得與類有關的小圖標的句柄。 GCL_HMOUDLE:獲得注冊該類的模塊的句柄。 GCL_MENUNAME:獲得菜單名字符串的地址,該字符串標識了與類有關的菜單資源。 GCL_STYLE:獲得窗口類的風格位。 GCL_WNDRPOC:獲得與類有關的窗口過程的地址。 返回值:如果函數(shù)成功,返回值是所需的32位值;如果函數(shù)失敗,返回值為0。 若想獲得更多錯誤信息,請調用GetLastError函數(shù)。
內(nèi)容聲明:
1、本站收錄的內(nèi)容來源于大數(shù)據(jù)收集,版權歸原網(wǎng)站所有!
2、本站收錄的內(nèi)容若侵害到您的利益,請聯(lián)系我們進行刪除處理!
3、本站不接受違法信息,如您發(fā)現(xiàn)違法內(nèi)容,請聯(lián)系我們進行舉報處理!
4、本文地址:http://www.hudongshop.com/article/d4eb4b81744c15091557.html,復制請保留版權鏈接!
引言QQ音樂是中國最大的音樂流媒體平臺之一,擁有海量音樂資源,對于音樂愛好者和研究人員來說,從QQ音樂獲取歌曲和數(shù)據(jù)是一項常見的需求,但是,由于QQ音樂采用了版權保護措施,直接從平臺下載歌曲或獲取數(shù)據(jù)并非易事,為了解決這一問題,QQ音樂爬蟲應運而生,QQ音樂爬蟲是一個專門用于從QQ音樂獲取歌曲和數(shù)據(jù)的工具,為用戶提供了繞過版權保護措施...。
互聯(lián)網(wǎng)資訊 2024-09-28 20:27:26
加入百度前端技術學院,開闊您的視野!歡迎來到百度前端社區(qū)!這是一個面向廣大前端工程師、設計師和技術愛好者的開放平臺,在這里,您可以,了解百度前端團隊的最新動態(tài)和技術成果獲取面向不同水平的全面前端知識參與社區(qū)活動和技術交流與百度前端團隊專家直接互動百度前端技術學院百度前端技術學院是百度前端社區(qū)旗下的一個學習平臺,致力于為前端工程師提供系...。
互聯(lián)網(wǎng)資訊 2024-09-26 10:22:31
AFXMessageBox函數(shù)是MFC框架提供的強大工具,用于在您的應用程序中顯示不同的消息框,它提供了一個方便的方法來向用戶傳達信息、收集輸入或獲取確認,消息框類型AFXMessageBox可以顯示各種類型的消息框,包括,OK,顯示一個帶有,確定,按鈕的消息框,OKCancel,顯示一個帶有,確定,和,取消,按鈕的消息框,YesNo...。
本站公告 2024-09-25 06:10:33
簡介AJAX,AsynchronousJavaScriptandXML,是一種用于構建交互式、動態(tài)Web應用的技術,它允許您在不刷新整個頁面的情況下,從服務器獲取數(shù)據(jù)并更新頁面,本教程將帶您了解AJAX的各個方面,從基本概念到高級技術,無論您是初學者還是經(jīng)驗豐富的開發(fā)人員,本教程都能為您提供所需的知識和技能,以構建強大的AJAX應用,...。
本站公告 2024-09-23 16:34:15
在JavaScript中,void0是一種內(nèi)置的特殊值,常用于處理空值和undefined,本文將深入探討void0的功能、用法以及與其他空值之間的區(qū)別,什么是void0,void0是JavaScript中的一個特殊值,它等同于undefined,它表示一個空值,即沒有值或未定義的值,void0的用法void0主要用于以下場景,初始化...。
技術教程 2024-09-16 17:40:41
JavaServerPages,JSP,是一種用于在Java中創(chuàng)建動態(tài)網(wǎng)頁的服務器端技術,與其他Web應用程序框架一樣,JSP應用程序容易受到各種安全威脅,本文介紹了最佳安全實踐,以保護您的JSP應用程序免受這些威脅,1.輸入驗證輸入驗證是JSP安全中最重要的方面之一,它涉及驗證用戶提供的所有數(shù)據(jù),以確保其有效且無害,以下是一些輸入驗...。
本站公告 2024-09-16 10:32:54
一、數(shù)據(jù)庫管理基礎1.數(shù)據(jù)庫概念數(shù)據(jù)庫,一個有組織的、共享的、經(jīng)過授權的集合,其中包含了有關現(xiàn)實世界的相關數(shù)據(jù)數(shù)據(jù)庫管理系統(tǒng),DBMS,用于創(chuàng)建、維護和使用數(shù)據(jù)庫的軟件2.數(shù)據(jù)庫模型層次模型,數(shù)據(jù)組織成樹形結構網(wǎng)狀模型,數(shù)據(jù)組織成網(wǎng)格狀結構關系模型,數(shù)據(jù)組織成表格形式對象模型,數(shù)據(jù)組織成對象形式3.數(shù)據(jù)庫語言數(shù)據(jù)定義語言,DDL,...。
最新資訊 2024-09-13 00:20:30
前言掌握源碼是編程領域的關鍵能力,它可以讓你深入了解程序的底層實現(xiàn),進行更高級的故障排除,并編寫更有效的代碼,本教程將通過一系列實戰(zhàn)案例,帶你深入學習源碼,夯實你的編程基礎,案例解析案例1,理解Java類加載機制案例描述,通過分析`ClassLoader`類的源碼,了解Java中的類加載過程和雙親委派模型,知識重點,類加載器、類加載過...。
技術教程 2024-09-10 05:21:19
文檔插件市場什么是DedeCMS插件,DedeCMS插件是用來擴展DedeCMS功能的模塊,插件可以添加新的功能,例如新的內(nèi)容類型、新的模板、新的管理功能等,如何安裝插件,安裝DedeCMS插件非常簡單,通常只需要將插件文件解壓到DedeCMS安裝目錄下的,plugins,目錄中即可,如何卸載插件,卸載DedeCMS插件也很簡單,只需...。
本站公告 2024-09-09 16:20:28
引言在當今數(shù)據(jù)驅動的世界中,數(shù)據(jù)分析已成為企業(yè)做出明智決策的關鍵,SQL,結構化查詢語言,是一種強大的語言,用于管理和分析關系數(shù)據(jù)庫中的數(shù)據(jù),通過使用T,SQL、PL,SQL或PL,pgSQL等擴展,可以進行高級查詢和報告,以深入了解數(shù)據(jù)并獲得有價值的見解,高級查詢技術T,SQL,Transact,SQL,T,SQL是Microsof...。
技術教程 2024-09-08 20:35:10
Java文件輸入輸出,I,O,從初學者到專家的完整指南,java文件后綴文件路徑和名稱,F(xiàn)ileInputStream類,從文本文件中讀取數(shù)據(jù)的輸入流,F(xiàn)ileOutputStream類,向文本文件中寫入數(shù)據(jù)的輸出流,F(xiàn)ileReader類,從文本文件中讀取數(shù)據(jù)的字符流,F(xiàn)ileWriter類,向文本文件中寫入數(shù)據(jù)的字符流,Scan...。
最新資訊 2024-09-07 18:29:59
簡介在軟件開發(fā)中,斷言,assert,是一種重要的調試和驗證技術,它允許程序員在運行時檢查程序假設是否成立,斷言可以幫助檢測和隔離程序中的錯誤,從而提高程序的健壯性和可追溯性,本文將深入探討Assert函數(shù)的工作原理,重點介紹其在C語言中的用法,還將討論ASCII編碼在斷言中發(fā)揮的重要作用,Assert函數(shù)Assert函數(shù)是一種在C標...。
互聯(lián)網(wǎng)資訊 2024-09-07 11:34:21