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

کنترل 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 استفاده کنید باید مقدار بازگشتی آنرا در یک ارایه بایت قرار دهید .
مثال ۱ : از بخش Component در منوی Project مورد Microsoft Internet Transfer Control 6.0 را به toolbar خود اضافه کنید . سپس یک کنترل IT روی فرم قرار دهید و همچنین یک Rich Textbox و یک دکمه روی فرم قرار دهید و کد زیر را برای event مربوط به کلیک دکمه بنویسید :

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

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

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

برای بالابردن کارایی ، بهتر است از قطعات کوچک ( بین ۵۱۲ تا ۱۰۲۴ بایتی ) استفاده کنید .
متد 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 را مشخص می کند و ۵ مقدار می تواند بگیرد :
icUnknown : نامعلوم
icDefault : پروتکل پیش فرض
icFTP : پروتکل FTP
icHTTP : پروتکل HTTP
icHTTP : پروتکل حفاظت شده HTTP
- Proxy : نام میزبان پروکسی
- RequestTimeOut : مدت زمانی که کنترل IT صبر می کند تا اطلاعات را دریافت کند . اگر این خاصیت صفر باشد کنترل تا هر زمان که لازم باشد برای دریافت پاسخ صبر می کند . در حالت سنکرون ( متد OpenURL ) بعد از سپری شدن این مدت زمان ، یک خطا تولید می شود و در حالت آسنکرون ( متد Execute ) رویداد StateChanged مقدار خطا را بر می گرداند
- ResponseCode : بعد از بروز حالت icError این خاصیت کد خطا را می دهد .
- ResponseInfo : توضیحی درباره خطا
- StillExecuting : اگر True باشد یعنی کنترل مشغول انجام کار است .
- URL : آدرس مقصد در متدهای OpenURL و یا Execute
- UserName : نام کاربر برای ورود به کامپیوتر میزبان FTP

نکته ۱ : برای دریافت برنامه نمونه برای متد Execute با من تماس بگیرید .
نکته ۲ : موضوع روزهای بعد :
۱ – اتصالات FTP با استفاده از کنترل IT
2 – آشنایی با تکنیک Collision Detection در ساخت بازیهای دوبعدی
۳ – آشنایی با کنترل WinSock
نکته ۳ : شاید این سوال پیش بیاید که چرا همزمان با آموزش Internet Programming ، آموزش Game Programming را نیز شروع کرده ام ؟ علت اش اینست که تصمیم دارم پس از پایان یافتن این دو مبحث ، روش ساخت یک بازی دوبعدی چند نفره تحت شبکه را برایتان آموزش دهم .

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

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