وبلاگ تخصصي برنامه نويسي با VB

کنترل Internet Transfer - قسمت اول

مقدمه : کنترل Internet Transfer نسبت به کنترل WebBrowser که در روزهاي قبلي معرفي شد در سطح پايينتري قرار دارد . اين کنترل با استفاده از دو پروتکل HTTP و FTP مي تواند داده ها را منتقل کند . اين کنترل زمانيکه از پروتکل HTTP استفاده مي کند با همان روش کنترل WebBrowser به سرويس دهنده صفحات وب متصل مي شود اما بجاي آنکه صفحه وب را نمايش دهد متن Html صفحه را بازيابي مي کند . همچنين زمانيکه اين کنترل از پروتکل FTP استفاده مي کند قادرست فايلها را بين کامپيوترهاي روي شبکه منتقل سازد .
اتصالات HTTP : همانطور که مي دانيد ، پروتکل HTTP استاندارد وب مي باشد . صفحات وب با زبان Html نوشته مي شوند و انتقال آنها از server به client توسط پروتکل HTTP صورت مي گيرد .
متد OpenURL : ساده ترين راه استفاده از کنترل IT متد OpenURL است . شکل کلي اين متد بصورت زير است :

Inet.OpenURL(url,DataType)x

که url آدرس صفحه وب و DataType نوع داده بازيابي شونده است و دو مقدار icString ( داده متني ) يا icByteArray ( داده باينري ) را مي گيرد . مقدار بازگشتي اين متد ، داده هاي منتقل شده است .
اين متد بصورت سنکرون کار مي کند يعني در تمام مدت کار آن برنامه نمي تواند کار ديگري انجام دهد . اگر از icByteArray استفاده کنيد بايد مقدار بازگشتي آنرا در يک ارايه بايت قرار دهيد .
مثال 1 : از بخش Component در منوي Project مورد Microsoft Internet Transfer Control 6.0 را به toolbar خود اضافه کنيد . سپس يک کنترل IT روي فرم قرار دهيد و همچنين يک Rich Textbox و يک دکمه روي فرم قرار دهيد و کد زير را براي event مربوط به کليک دکمه بنويسيد :

TextBox.text=Inet.OpenURL(“www.microsoft.com”,icString)x

مثال 2 : کد زير داده هاي باينري را از اينترنت خوانده و آنها را در يک فايل ذخيره مي کند :

Dim b() as byte
B()=Inet.OpenURL(ftp://ftp.microsoft.com/test.zip,icByteArray)x
Open App.path & “\test.zip” For Access Write As #1
Put #1,b()x
Close #1


رويداد StateChanged : کنترل IT فقط يک event دارد که StateChanged مي باشد . اين event زماني روي مي دهد که State کنترل تغيير کند . State هر اتفاقي است که برنامه بايد از آن مطلع شود . تعريف کلي اين event بصورت زير است :

Inet_StateChanged(ByVal NewState As Integer)x

که NewState مقداري است که حالت جديد را بيان مي کند . مقادير ممکن اين پارامتر عبارتند از :
icNone : حالت تغيير نکرده است .
icResolvingHost : در حال جستجوي آدرس IP کامپيوتر موردنظر .
icHostResolved : آدرس IP کامپيوتر موردنظر يافت شد .
icConnecting : در حال اتصال به کامپيوتر مقصد
icConnected : اتصال به کامپيوتر مقصد برقرار شد .
icRequesting : در حال ارسال درخواست به کامپيوتر مقصد
icRequestSent : درخواست به کامپيوتر مقصد ارسال شد .
icReceivingResponse : در حال دريافت پاسخ از کامپوتر مقصد .
icResponseReceived : پاسخ کامپيوتر مقصد دريافت شد .
icDisconnecting : در حال قطع اتصال با کامپيوتر مقصد .
icDisconnected : اتصال مقصد با موفقيت قطع شد .
icError : در ارتباط با کامپيوتر مقصد خطايي رخ داده است .
icResponseCompleted : تکميل پاسخ – تمام داده ها دريافت شد .
تشخيص خطا در عمليات انتقال داده اهميت بالايي دارد و StateChanged در صورت بروز هر خطايي مقدار icError را برمي گرداند و اطلاعات خطا را در دو خاصيت ResponseCode و ResponseInfo برمي گرداند .
انتقال داده بصورت آسنکرون : کنترل IT متدهاي انعطاف پذير ديگري هم دارد که آسنکرون هستند و اجازه مي دهند تا همزمان با عمليات انتقال داده ، برنامه به وظايف ديگري هم بپردازد . اين متدها با استفاده از Event Driven Model کار مي کنند . بدين معني که وقتي برنامه درخواست انتقال داده اي را مي دهد کنترل IT درخواست را در زمينه برنامه انجام مي دهد و برنامه ازاد است تا به کارهاي ديگرش بپردازد . زمانيکه داده ها بازيابي شود ، داده ها را از بافر داخلي کنترل IT مي خواند .
متد GetChunk : در عمليات انتقال آسنکرون ، بايستي داده را توسط اين متد از بافر داخلي کنترل IT بگيريم :

Inet.GetChunk(datasize[,datatype])x

که پارامتر datasize از نوع long بوده و تعيين مي کند چند بايت از بافر خوانده شود و پارامتر اختياري datatype نوع داده را مشخص مي کند و مي تواند مقادير icString و icByteArray را بگيرد .
زمانيکه StateChanged وارد حالتهاي icResponseReceived و يا icResponseCompleted شد بايد از GetChunk استفاده کنيد . بدين صورت که از يک حلقه استفاده مي کنيم تا کل بافر را بخوانيم :

Private Sub Inet_StateChanged(Byval State as Integer)x
Dim temp1,temp2
Select Case State
Case icResponseCompleted
temp1=””x
temp2=””x
Do
temp1=Inet.GetChunk(512,icString)x
temp2=temp2 & temp1
Loop Until temp1=””x
End Select
End Sub

براي بالابردن کارايي ، بهتر است از قطعات کوچک ( بين 512 تا 1024 بايتي ) استفاده کنيد .
متد Execute : و اما انعطاف پذيرترين متد کنترل IT ، متد Execute است . فرمت کلي اين متد بصورت زير است :

Inet.Execute(url,Command,Data,RequestHeaders)x

که url آدرس مقصد ، Command فرماني است که به کامپيوتر مقصد داده مي شود و Data و RequestHeaders اطلاعات اضافي لازم براي اجراي فرمان داده شده است . فرمانهاي Command همان فرمانهاي HTTP هستند که عبارتند از :
- GET : دريافت داده ها از کامپيوتر مقصد
- HEAD : دريافت اطلاعات header از کامپيوتر مقصد
- POST : ارسال اطلاعات لازم براي تکميل درخواست
- PUT : ارسال فايل براي کامپيوتر ميزبان ( upload )
فرمان GET پرکاربردترين فرمان متد Execute است و داده هاي خوانده شده را در بافر داخلي بافر کنترل IT قرار مي دهد تا بتوان با متد GetChunk آنها را بازيابي نمود .
مثال :

Inet.Execute http://www.microsoft.com,”GET”x

ساير خواص کنترلIT :
- AccessType : نوع دسترسي کنترل IT به اينترنت را مشخص مي کند و سه مقدار مي تواند بگيرد :
icUseDefault : استفاده از تنظيمات رجيستري براي دسترسي به اينترنت
icDirect : اتصال مستقيم کنترل IT به اينترنت
icNamedProxy : اتصال به اينترنت توسط پروکسي
- Document : نام صفحه پيش فرض که در متد Execute از آن استفاده مي شود . اگر به متد Execute پارامتر url را ندهيد از اين صفحه پيش فرض استفاده مي کند .
- Password : کلمه رمز عبور کامپيوتر ميزبان FTP
- Procotol : نوع پروتکل مورد استفاده در متد Execute را مشخص مي کند و 5 مقدار مي تواند بگيرد :
icUnknown : نامعلوم
icDefault : پروتکل پيش فرض
icFTP : پروتکل FTP
icHTTP : پروتکل HTTP
icHTTP : پروتکل حفاظت شده HTTP
- Proxy : نام ميزبان پروکسي
- RequestTimeOut : مدت زماني که کنترل IT صبر مي کند تا اطلاعات را دريافت کند . اگر اين خاصيت صفر باشد کنترل تا هر زمان که لازم باشد براي دريافت پاسخ صبر مي کند . در حالت سنکرون ( متد OpenURL ) بعد از سپري شدن اين مدت زمان ، يک خطا توليد مي شود و در حالت آسنکرون ( متد Execute ) رويداد StateChanged مقدار خطا را بر مي گرداند
- ResponseCode : بعد از بروز حالت icError اين خاصيت کد خطا را مي دهد .
- ResponseInfo : توضيحي درباره خطا
- StillExecuting : اگر True باشد يعني کنترل مشغول انجام کار است .
- URL : آدرس مقصد در متدهاي OpenURL و يا Execute
- UserName : نام کاربر براي ورود به کامپيوتر ميزبان FTP

نکته 1 : براي دريافت برنامه نمونه براي متد Execute با من تماس بگيريد .
نکته 2 : موضوع روزهاي بعد :
1 - اتصالات FTP با استفاده از کنترل IT
2 – آشنايي با تکنيک Collision Detection در ساخت بازيهاي دوبعدي
3 – آشنايي با کنترل WinSock
نکته 3 : شايد اين سوال پيش بيايد که چرا همزمان با آموزش Internet Programming ، آموزش Game Programming را نيز شروع کرده ام ؟ علت اش اينست که تصميم دارم پس از پايان يافتن اين دو مبحث ، روش ساخت يک بازي دوبعدي چند نفره تحت شبکه را برايتان آموزش دهم . نظري نداريد ؟
+ حامد شیدائیان ; ٧:٥٩ ‎ب.ظ ; پنجشنبه ٢۸ شهریور ،۱۳۸۱
comment نظرات ()