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