( تعداد نمایش : 1788 )

آشنایی با RAS API و WinInet API

مقدمه

ویندوز برای برقراری ارتباط با Internet Service Provide- ISP- شما از طریق مودم و خط تلفن در اتصالات dial-up networking ، از سرویسی خاص به اسم RAS (Remote Access Service) استفاده می کند . این سرویس دارای یک واسط برنامه نویسی است که RAS API نام دارد . این واسط شامل مجموعه ای از توابع است که شما می توانید آنها را در برنامه خود صدا بزنید . RAS API ابزاری بسیار قدرتمند و قابل انعطاف است همچنین بسیار پیچیده می باشد .
خوشبختانه برای استفاده راحتتر ، مایکروسافت تعدادی تابع را در مجموعه ای به اسم WinInet API قرار داده تا بتوان از آنها برای برقراری ارتباط و کنترل اتصال استفاده کرد .

آشنایی با WinInet API :

WinInet API مجموعه ای از توابع است که امکان ایجاد و توسعه برنامه های اینترنتی را بصورتی ساده ، سریع و کارآمد برای برنامه نویسان مهیا می کند . با استفاده از این مجموعه توابع شما می توانید برنامه هایی بنویسید که از منابع اینترنتی با استفاده از پروتکلهایی چون HTTP و FTP استفاده کنند . همچنین WinInet به شما اجازه می دهد تا بتوانید ارتباطی dial-up با یک ISP ایجاد نموده و آنرا کنترل کنید .
مزیـت اصلی توابع WinInet آینست که شما نیازی به دانستن ساختار پروتکلهای ارتباطی و نیز برنامه نویسی Socket نخواهید داشت . بعبارت دیگر WinInet یک واسط سطح بالا را برای کار با منابع اینترنتی ارائه می دهد .

امکانات Dial-Up موجود در WinInet :

تا قبل از ارائه اینترنت اکسپلورر ورژن ۴ ، WinInet تنها دارای دو تابع dial-up بود :

تابع InternetAttemptConnect : برای بررسی اینکه آیا یک ارتباط به اینترنت وجود دارد یا نه استفاده می شد . اگر هیچ اتصالی به اینترنت وجود نداشت این برنامه کادر تبادلی dial-up networking را نمایش می داد و کاربر اجازه داشت تا یک اتصال را برای وصل شدن به اینترنت انتخاب کند .

تابع InternetCheckConnection : تابع با استفاده از انجام یک دستور ping به url ای که به تابع داده شده ، بررسی می کرد که آیا ارتباطی به اینترنت وجود دارد یا نه .

این دو تابع دارای محدودیتهای فراوانی بودند . برای مثال تابع اول نمی تواند بطور  اتوماتیک اتصال به اینترنت را برقرار کند و تابع دوم نیز نمی تواند هیچ اطلاعاتی در مورد نوع ارتباط به ما بدهد .

IE نسخه ۴ ، تعدادی تابع جدید برای WinInet معرفی کرد که برخی از آنها عبارتند از :

تابع InternetGetConnectedState : اطلاعاتی در مورد نوع ارتباط استفاده شده را بیان می کند . برای مثال این تابع اطلاع می دهد که نوع ارتباط به اینترنت از طریق مودم است یا شبکه LAN و یا از طریق پروکسی .

تابع InternetAutodial : این امکان را فراهم می سازد تا یک ارتباط اینترنتی اتوماتیک از طریق مودم  را با استفاده از مدخل اتصال پیش فرض که کاربر آنرا در dial-up networking  مشخص کرده ایجاد کنید .

تابع InternetDial : این تابع کارآمدتر از تابع InternetAutodial است و کادری را نمایش می دهد که کاربر می تواند نوع مدخل مورد نظر خود برای ارتباط تلفنی با اینترنت را انتخاب کند .

تابع InternetAutodialHangup : برای قطع کردن اتصالی مودمی که از طریق تابع  InternetAutodial برقرار شده استفاده می شود .

تابع InternetHangUp : برای قطع کردن اتصالی مودمی که از طریق تابع InternetDialبرقرار شده استفاده می شود .

تابع InternetSetDialState : برای تنظیم کردن وضعیت جاری ارتباط اینترنتی استفاده می شود .

در قسمت بعدی این سلسه مباحث جزئیات این توابع را بررسی کرده و نهایتاً برنامه ای کاربردی برای کار با این توابع در ویژوال بیسیک ارائه خواهم داد .

اطلاعات بیشتری در مورد WinInet :

در این بخش ما تنها توابع dial-up موجود در WinInet API را بررسی کردیم اما همانطور که در ابتدا گفته شد WinInet دارای امکانات فراوانی در زمینه کار با اینترنت است . برای آشنایی بیشتر با این امکانات در زیر جداولی ارائه شده که به اختصار امکانات مختلف این مجموعه تابع را نشان می دهد :

توابع Dial-Up :

Name

Description

InternetGetConnectedState

Retrieves the current state of the Internet connection

InternetAutodial

Initiates an unattended dial-up connection

InternetAutodialHangup

Disconnects a modem connection initiated by

InternetDial

Initiates a dial-up connection

InternetHangUp

Disconnects a modem connection initiated by InternetDial

InternetGoOnline

Prompts the user for permission to initiate a dial-up connection to the given URL

InternetSetDialState

Sets the current state of the Internet connection

توابع عمومی اینترنت :

Name

Description

InternetOpen

Initializes the Win32 Internet functions

InternetConnect

Opens an FTP, Gopher, or HTTP session for a given site

InternetCloseHandle

Closes a single Internet handle or a subtree of Internet handles

InternetErrorDlg

Displays a dialog box for the error that is passed to InternetErrorDlg

InternetFindNextFile

Continues a file search started as a result of a previous call to FtpFindFirstFile or GopherFindFirstFile

InternetGetLastResponseInfo

Retrieves the last Win32 Internet function error description or server response on the thread calling this function

InternetLockRequestFile

Allows the user to place a lock on the file being used

InternetQueryDataAvailable

Queries the amount of data available

InternetQueryOption

Queries an Internet option on the specified handle

InternetReadFile

Reads data from a handle opened by the InternetOpenURL, FtpOpenFile, GopherOpenFile, or HttpOpenRequest function

InternetReadFileEx

Reads data from a handle opened by the InternetOpenURL, FtpOpenFile, GopherOpenFile, or HttpOpenRequest function

InternetSetFilePointer

Sets a file position for InternetReadFile

InternetSetOption

Sets an Internet option

InternetSetStatusCallback

Sets up a callback function that Win32 Internet functions can call as progress is made during an operation

InternetStatusCallback

Placeholder for the application-defined status callback function

InternetTimeFromSystemTime

Formats a date and time according to the specified RFC format (as specified in the HTTP version 1.0 specification)

InternetTimeToSystemTime

Takes an HTTP time/date string and converts it to a SYSTEMTIME structure

InternetUnlockRequestFile

Unlocks a file that was locked using InternetLockRequestFile

InternetWriteFile

Writes data to an open Internet file

InternetConfirmZoneCrossing

Checks for changes between secure and nonsecure URLs

توابع URL :

Name

Description

InternetCanonicalizeUrl

Canonicalizes a URL, which includes converting unsafe characters and spaces into escape sequences.

InternetCombineUrl

Combines a base and relative URL into a single URL. The resultant URL will be canonicalized.

InternetCrackUrl

Cracks a URL into its component parts.

InternetCreateUrl

Creates a URL from its component parts.

InternetOpenUrl

Begins reading a complete FTP, Gopher, or HTTP URL.

توابع FTP :

Name

Description

FtpCreateDirectory

Creates a new directory on the FTP server

FtpDeleteFile

Deletes a file stored on the FTP server

FtpFindFirstFile

Searches the specified directory of the given FTP session

FtpGetCurrentDirectory

Retrieves the current directory for the given FTP session

FtpGetFile

Retrieves a file from the FTP server and stores it under the specified file name, creating a new local file in the process

FtpPutFile

Stores a file on the FTP server

FtpRemoveDirectory

Removes the specified directory on the FTP server

FtpRenameFile

Renames a file stored on the FTP server

FtpSetCurrentDirectory

Changes to a different working directory on the FTP server

توابع HTTP :

Name

Description

HttpAddRequestHeaders

Adds one or more HTTP request headers to the HTTP request handle

HttpEndRequest

Ends an HTTP request

HttpOpenRequest

Opens an HTTP request handle

HttpQueryInfo

Queries for information about an HTTP request

HttpSendRequest

Sends the specified request to the HTTP server

HttpSendRequestEx

Sends the specified request to the HTTP server

بررسی جزئیات توابع Dial-Up موجود در WinInet :

1 – تابع InternetAutodial : بطور اتوماتیک باعث شماره گیری اتصال پیش فرض اینترنت توسط مودم می شود . اگر اتصال با موفقیت انجام شود تابع مقدار true و در غیر اینصورت false بر می گرداند .
پارامترهای ورودی تابع :
dwFlags : فلگ کنترل کننده عملیات اتصال می باشد و یکی از مقادیر زیر را می تواند داشته باشد :
- INTERNET_AUTODIAL_FORCE_ONLINE
- INTERNET_AUTODIAL_FORCE_UNATTENDED
dwReserved : پارامتری رزرو شده است و بایستی صفر باشد .

چگونگی declare کردن تابع :

Public Declare Function InternetAutodial Lib “wininet.dll” (ByVal dwFlags As Long, ByVal dwReserved As Long) As Long

2 – تابع InternetAutodialHangup : باعث قطع کردن یک اتصال dial-up اتوماتیک می شود . اگر قطع اتصال با موفقیت انجام شود تابع مقدار true و در غیر اینصورت false برمی گرداند . تابع دارای یک پارامتر ورودی به اسم dwReserved است که رزرو شده بود و بایستی صفر باشد .

چگونگی declare کردن تابع :

Public Declare Function InternetAutodialHangup Lib “wininet.dll” (ByVal dwReserved As Long) As Long

3 – تابع InternetDial : یک اتصال به اینترنت را با استفاده از یک ارتباط مودم مقداردهی اولیه می کند . پارامترهای ورودی آن عبارتند از :
hwndParent : هندل مربوط به پنجره parent
lpszConnectoid : نام ارتباط dial-up مورد استفاده
dwFlags : فلگ کنترل اتصال که یکی از مقادیر زیر را می تواند داشته باشد :
- INTERNET_AUTODIAL_FORCE_ONLINE
- INTERNET_AUTODIAL_FORCE_UNATTENDED
- INTERNET_DIAL_UNATTENDED   : اتصال به اینترنت از طریق مودم بدون نمایش واسط کاربر
lpdwConnection : آدرس داده ای که شامل عدد متناظر با اتصال است .
dwReserved : پارامتری رزرو شده است و بایستی صفر باشد .

چگونگی declare کردن تابع :

Public Declare Function InternetDial Lib “wininet.dll” (ByVal hwndParent As Long, ByVal lpszConnectoid As String, ByVal dwFlags As Long, lpdwConnection As Long, ByVal dwReserved As Long) As Long

4 – تابع InternetGetConnectedState : این تابع وضعیت اتصال جاری به اینترنت را بر می گرداند . اگر اتصال برقرار باشد تابع مقدار true و در غیر اینصورت false برمی گرداند .
پارامترهای ورودی تابع عبارتند از :
lpdwFlags : توصیف وضعیت اتصال . این پارامتر یکی از مقادیر زیر را می تواند داشته باشد :
- INTERNET_CONNECTION_MODEM
- INTERNET_CONNECTION_LAN
- INTERNET_CONNECTION_PROXY
- INTERNET_CONNECTION_MODEM_BUSY
dwReserved : پارامتری رزرو شده است و بایستی صفر باشد .

چگونگی declare کردن تابع :

Public Declare Function InternetGetConnectedState Lib “wininet.dll” (ByRef lpdwFlags As Long, ByVal dwReserved As Long) As Long

5 – تابع InternetGoOnline : پیغامی به کاربر برای دادن مجوز برای مقداردهی اولیه اتصال به یک URL را می دهد . اگر اینکار موفقیت آمیز باشد مقدار true و در غیر اینصورت false برمی گرداند . پارامترهای ورودی تابع عبارتند از :
lpszURL : URL وب سایت مورد نظر برای اتصال
hwndParent : هندل پنجره parent
dwReserved : پارامتری رزرو شده است و بایستی صفر باشد .

چگونگی declare کردن تابع :

Public Declare Function InternetGoOnline Lib “wininet.dll” (ByVal lpszURL As String, ByVal hwndParent As Long, ByVal dwReserved As Long) As Long

6 – تابع InyernetHangUp : به مودم می گوید که اتصال به اینترنت را قطع کند . پارامترهای این تابع عبارتند از :
dwConnection : شماره مربوط به اتصالی که می خواهیم آنرا قطع کنیم .
dwReserved : پارامتری رزرو شده است و بایستی صفر باشد .

چگونگی declare کردن تابع :

Public Declare Function InternetHangUp Lib “wininet.dll” (ByVal dwConnection As Long, ByVal dwReserved As Long) As Long

7 – تابع InternetSetDialState : تنظیم نمودن وضعیت شماره گیری مودم . اگر تنظیم با موفقیت انجام شود تابع true و در غیراینصورت false برمی گرداند . پارامترهای ورودی تابع عبارتند از :

lpszConnectoid : نام اتصال dial-up
dwState : وضعیت مربوط به اتصال dial-up . در حال حاضر این پارامتر تنها مقدار INTERNET_DIALSTATE_DISCONNECTED را می تواند داشته باشد .

dwReserved : پارامتری رزرو شده است و بایستی صفر باشد .

چگونگی declare کردن تابع :

Public Declare Function InternetSetDialState Lib “wininet.dll” (ByVal lpszConnectoid As String, ByVal dwState As Long, ByVal dwReserved As Long) As Long

بررسی فلگهای مورد استفاده در توابع dial-up :

1 – فلگهای تابع InternetDial :

Public Const INTERNET_DIAL_UNATTENDED = &H8000&  ’۰×۸۰۰۰
Public Const INTERENT_GOONLINE_REFRESH = &H1    ’۰×۰۰۰۰۰۰۰۱
Public Const INTERENT_GOONLINE_MASK = &H1       ’۰×۰۰۰۰۰۰۰۱

۲ – فلگهای تابع InternetAutoDial :

Public Const INTERNET_AUTODIAL_FORCE_ONLINE = 1
Public Const INTERNET_AUTODIAL_FORCE_UNATTENDED = 2
Public Const INTERNET_AUTODIAL_FAILIFSECURITYCHECK = 4

3 – فلگهای تابع InternetGetConnectedState :

Public Const INTERNET_CONNECTION_MODEM = 1
Public Const INTERNET_CONNECTION_LAN = 2
Public Const INTERNET_CONNECTION_PROXY = 4
Public Const INTERNET_CONNECTION_MODEM_BUSY = 8

4 – فلگهای مربوط به dial handler اختصاصی :

Public Const INTERNET_CUSTOMDIAL_CONNECT = 0
Public Const INTERNET_CUSTOMDIAL_UNATTENDED = 1
Public Const INTERNET_CUSTOMDIAL_DISCONNECT = 2

5 – فلگهای عملیاتی پشتیبانی شده برای dial handler اختصاصی :
Public Const INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED = 1
Public Const INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE = 2
Public Const INTERNET_CUSTOMDIAL_CAN_HANGUP = 4

6 – وضعیتهای مربوط به InternetSetDialState :

Public Const INTERNET_DIALSTATE_DISCONNECTED = 1


در این بخش که آخرین بخش از مباحث WinInet API است برنامه ای نمونه برای کار با توابع مودمی این کتابخانه ارائه خواهیم داد :

برای نوشتن برنامه ای که بتوان از طریق آن با استفاده از مودم به اینترنت متصل شد بصورت زیر عمل می کنیم :
در ابتدا بایستی تابع InternetDial را Declare کنیم :

Private Declare Function InternetDial Lib “wininet.dll” Alias “InternetDialA” (ByVal hwndParent As Long, ByVal lpszConnectoid As String, ByVal dwFlags As Long, lpdwConnection As Long, ByVal dwReserved As Long) As Long

سپس وضعیت شماره گیری را در متغیری به اسم lOption قرار می دهیم . این متغیر می تواند مقادیر زیر را داشته باشد :
- DF_FORCE_ONLINE
- DF_FORCE_UNATTENDED
- DF_DIAL_FORCE_PROMPT
- DF_DIAL_UNATTENDED
حال نام اتصالی را که می خواهیم از آن استفاده شود در متغیری به اسم ConnectionName قرار می دهیم .
همچنین دو متغیر به اسم ConnectionID و RetVal را از نوع long تعریف می کنیم .

حال تابع InternetDial را بصورت زیر صدا می کنیم :

RetVal = InternetDial(Me.hwnd, ConnectionName, lOption, ConnectionID, 0)

اگر RetVal مخالف صفر باشد عمل Dial بدرستی انجام شده است .

برای قطع اتصال فوق بایستی از تابع InternetHangUp استفاده کنیم . برای اینکار ابتدا تابع فوق را Declare می کنیم :

Private Declare Function InternetHangUp Lib “wininet.dll” (ByVal dwConnection As Long, ByVal dwReserved As Long) As Long

سپس این تابع را بصورت زیر فراخوانی می کنیم :

RetVal = InternetHangUp(ConnectionID, 0)

برای اینکه مودم را مجبور کنیم تا بطور اتوماتیک از اتصال پیش فرض سیستم برای شماره گیری استفاده کند از تابع InternetAutodial  استفاده می کنیم .
برای اینکار ابتدا تابع را Declare می کنیم :

Private Declare Function InternetAutodial Lib “wininet.dll” (ByVal dwFlags As Long, ByVal hwndParent As Long) As Long

سپس تابع را بصورت زیر فراخوانی می کنیم :

RetVal = InternetAutodial(ADF_FORCE_UNATTENDED, Me.hwnd)

اگر RetVal مخالف صفر باشد عمل AutoDial بدرستی انجام شده است .

برای قطع اتصالی که توسط AutoDial ایجاد شده از تابع InternetAutodialHangup استفاده می کنیم . ابتدا این تابع را Declare می کنیم :

Private Declare Function InternetAutodialHangup Lib “wininet.dll” (ByVal dwReserved As Long) As Long

فراخوانی این تابع بصورت زیر است :

Call InternetAutodialHangup(0)

برای اینکه بفهیم آیا اتصال به اینترنت وجود دارد یا نه از تابع InternetGetConnectedStateEx استفاده می کنیم . برای اینکار ابتدا تابع را Declare می کنیم :

Private Declare Function InternetGetConnectedStateEx Lib “wininet.dll” Alias “InternetGetConnectedStateExA” (lpdwFlags As Long, lpszConnectionName As Long, dwNameLen As Long, ByVal dwReserved As Long) As Long

سپس تابع را بصورت زیر فراخوانی می کنیم :

strConnectionName = Space(256)
lNameLen = 256
lPtr = StrPtr(strConnectionName)
lNameLenPtr = VarPtr(lNameLen)
RetVal = InternetGetConnectedStateEx(lConnectionFlags, ByVal lPtr, ByVal lNameLen, 0)

که strConnectionName از نوع String و بقیه متغیرها از نوع Long هستند .

اگر RetVal مخالف صفر باشد اتصال برقرار است .

ثابتهایی که در کدهای فوق استفاده شده عبارتند از :

Private Const INTERNET_AUTODIAL_FORCE_ONLINE = 1&
Private Const INTERNET_AUTODIAL_FORCE_UNATTENDED = 2&
Private Const INTERNET_AUTODIAL_FAILIFSECURITYCHECK = 4&

Private Const INTERNET_DIAL_FORCE_PROMPT = &H2000
Private Const INTERNET_DIAL_SHOW_OFFLINE = &H4000
Private Const INTERNET_DIAL_UNATTENDED = &H8000

دیدگاه خود را بیان کنید.

باید وارد سایت شده باشید برای دیدگاه دادن