مقدمه
ویندوز برای برقراری ارتباط با 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
دیدگاه خود را بیان کنید.
باید وارد سایت شده باشید برای دیدگاه دادن