PDA

مشاهده نسخه کامل : درخواست توضیح دو مورد



life24
24-04-13, 13:53
در برنامه نویسی سوکت 2 مورد رو من متوجه نمیشم.
برای ارسال اطلاعات از شی و کلاس زیر چرا باید استفاده بشه؟
System.Text.ASCIIEncoding ASCII = new System.Text.ASCIIEncoding();

و چرا اطلاعات برای ارسال باید از نوع Byte باشند؟ مثل
Byte[] byte=new Byte[128]
من وقتی متنی درون این byte می ریزم یک مشت عدد داخلش میزاره.
ظاهرا آرایه ای 128 خانه ای است.

ravegoat
25-04-13, 09:14
با سلام!

بذارید اول یه پیش زمینه ای عرض کنم:
تمام اطلاعات مثل یک متن یا یک ویدئو در سیستم عامل رایانه به صورت بایت نوشته و خونده میشن. پس اگه ما یه فایل متنی و یا یه فیلم داشته باشیم هر دو از چندین بایت تشکیل شدن. اون چیزی که سبب تمایز یه متن از از یه عکس میشه پسوند فایل هاشون است. وقتی پسوند فایل txt باشه برنامه ی خاصی برای تفسیر بایت های اون فایل اجرا میشه و تک تک بایت ها رو به یه کارکتر در البفا تبدیل می کنه. به همین شکل وقتی پسوند فایل avi باشه برنامه دیگه ای میاد و بایت ها رو تبدیل به تصویر می کنه. حالا اگه ما پسوند اون ویدئو رو به txt تغییر بدیم می بینیم یه سری کارکتر نامفهوم در برنامه ی مفسر متن ظاهر میشه چون بایت های این ویدئو با نرم افزار درست خودشون تفسیر نشدن و درنتیجه نمی تونن منظور اصلی خودشون که محتوی یک فیلم هستش رو بیان کنن.

در Socket Programming تحت .NET ما برای تبادل داده با یک Network Stream سروکار داریم که می تونه به تعداد دلخواه بایت رو درون خودش جا بده و تبادل کنه. پس به طور پیش فرض برای انتقال هر نوع داده ای تحت شبکه باید بایت های اون رو بخونیم و داخل NetworkStram بریزم تا منتقل بشه. ولی مشکل اینه که در اینجا ما دیگه پسوند فایل نداریم. وقتی ما بایت های یک متن رو روی شبکه می فرستیم گیرنده از کجا باید بدونه این بایت ها مربوط به یه متنه و یا مربوط به یک عکسه؟!
در این حالت ما بایت های مربوط به داده ی خودمون رو به اون شکلی که باید تفسیر بشن استخراج کنیم. مثلا" اگه این داده متنی ساده است می تونیم با دستور ASCIIEncoding.ASCII.GetBytes بایت ها اون متن رو استخراج کنیم. در سمت گیرنده هم وقتی این بایت ها دریافت شد حتما باید با دستور ASCIIEncoding.ASCII.GetString تفسیر بشن تا متن مورد نظر به درستی نمایش داده بشه. وقتی شما با متن ساده سروکار دارید می تونید از اسکی (ASCII) استفاده کنید که دقیقا" هر کارکتر رو به یک بایت (عددی بین 0 تا 255) نگاشت می کنه؛ مثلا" کد اسکی حرف A مقدارش 65 و هر جا مقدار بایت 65 باشه اون بایت معادل A خواهد بود.

موفق باشید
آرمین