درخواست های ارتباط
جستجو
    لیست دوستان من
    صندوق پیام
    همه را دیدم
    • در حال دریافت لیست پیام ها
    صندوق پیام
    رویدادها
    همه را دیدم
    • در حال دریافت لیست رویدادها
    همه رویدادهای من
    اطلاعات دوره آموزشی
    اطلاعات مطلب
      مدرس/نویسنده
      حسین احمدی
      امتیاز: 464785
      رتبه:3
      340
      253
      402
      2670
      حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ... پروفایل کاربر
      دوره های مرتبط
      دوره های توسینسو دوره آموزشی مقدماتی برنامه نویسی جاوا به زبان ساده
      دوره آموزشی مقدماتی برنامه نویسی جاوا به زبان ساده
      مدرس: مهدی عادلی فر
      این دوره را در 17 قسط خریداری کنید
      با خرید این دوره مبلغ 5,445 تومان هدیه بگیرید
      دوره آموزشی اسکریپت نویسی Batch یا Batch Scripting در ویندوز به زبان ساده
      دوره آموزشی اسکریپت نویسی Batch یا Batch Scripting در ویندوز به زبان ساده
      مدرس: حسین احمدی
      این دوره را در 11 قسط خریداری کنید
      دوره آموزشی مقدماتی برنامه نویسی به زبان سی شارپ
      دوره آموزشی مقدماتی برنامه نویسی به زبان سی شارپ
      مدرس: حسین احمدی
      این دوره را در 17 قسط خریداری کنید
      با خرید این دوره مبلغ 8,470 تومان هدیه بگیرید
      دوره آموزشی برنامه نویسی به زبان پرل بصورت پروژه محور
      دوره آموزشی برنامه نویسی به زبان پرل بصورت پروژه محور
      مدرس: ایمان جوادی
      این دوره را در 13 قسط خریداری کنید
      ساخت و مدیریت ربات تلگرام از صفر با زبان سی شارپ
      ساخت و مدیریت ربات تلگرام از صفر با زبان سی شارپ
      مدرس: مهدی عادلی فر
      این دوره را در 2 قسط خریداری کنید
      دوره آموزشی برنامه نویسی WPF در ویژوال استودیو
      دوره آموزشی برنامه نویسی WPF در ویژوال استودیو
      مدرس: امیر حسین فضلیخانی
      این دوره را در 12 قسط خریداری کنید
      دوره آموزشی برنامه نویسی اندروید با زبان جاوا به زبان ساده
      دوره آموزشی برنامه نویسی اندروید با زبان جاوا به زبان ساده
      مدرس: مهدی عادلی فر
      این دوره را در 27 قسط خریداری کنید
      با خرید این دوره مبلغ 8,110 تومان هدیه بگیرید
      دوره آموزشی برنامه نویسی حرفه ای پایتون به زبان ساده
      دوره آموزشی برنامه نویسی حرفه ای پایتون به زبان ساده
      مدرس: حسین احمدی
      این دوره را در 23 قسط خریداری کنید
      با خرید این دوره مبلغ 7,425 تومان هدیه بگیرید
      دوره آموزشی برنامه نویسی پیشرفته زبان سی شارپ
      دوره آموزشی برنامه نویسی پیشرفته زبان سی شارپ
      مدرس: حسین احمدی
      این دوره را در 78 قسط خریداری کنید
      با خرید این دوره مبلغ 82,245 تومان هدیه بگیرید
      دوره آموزشی پردازش متن با زبان برنامه نویسی پایتون
      دوره آموزشی پردازش متن با زبان برنامه نویسی پایتون
      مدرس: کاظم تقندیکی
      این دوره را در 20 قسط خریداری کنید
      با خرید این دوره مبلغ 7,040 تومان هدیه بگیرید
      دوره آموزشی ساخت ربات تلگرام
      دوره آموزشی ساخت ربات تلگرام
      مدرس: کاظم تقندیکی
      این دوره را در 8 قسط خریداری کنید
      دوره آموزشی طراحی رابط کاربری با JavaFX
      دوره آموزشی طراحی رابط کاربری با JavaFX
      مدرس: حسام رسولیان
      این دوره را در 13 قسط خریداری کنید
      دوره آموزشی Exploit نویسی به زبان Perl
      دوره آموزشی Exploit نویسی به زبان Perl
      مدرس: ایمان جوادی
      این دوره را در 7 قسط خریداری کنید
      دوره تخصصی آموزش متن کاوی با ابزار NLTK
      دوره تخصصی آموزش متن کاوی با ابزار NLTK
      مدرس: کاظم تقندیکی
      این دوره را در 11 قسط خریداری کنید

      برنامه نویسی شبکه (Network Programming) در سی شارپ :: کلاس های TcpClient و TcpListener

      تاریخ 11 ماه قبل
      نظرات 0
      بازدیدها 270
      در مطالب قبلی که Network Programming را در زبان سی شارپ بررسی کردیم با برخی کلاس های اولیه آشنا شدیم. همانطور که گفتیم کلاس های فضای نام System.Net به دو دسته تقسیم می شوند. کلاس های High Level که برخی از آن ها را بررسی کردیم و کلاس های Low Level که به صورت مستقیم این اجازه را به ما می دهند تا با Protocol هایی مانند Tcp یا Udp و Stream ها کار کنیم. در این مطلب با دو کلاس TcpClient و TcpListener آشنا خواهیم شد که بوسیله آن ها می توان مبتنی بر TCP پیام ها را بر بستر شبکه منتقل کرد. TCP که مخفف Transmission Control Protocol است روش هایی را در اختیار ما قرار می دهد تا بتوانیم به سادگی بین دو نقطه (که به آن End-Point گفته می شود) در محیط شبکه پیام های مورد نظر را منتقل کنیم. End-Point ها معمولاً بوسیله یک آدرس IP و یک Port مشخص می شوند. برخی Port ها هستند که به صورت پیش فرض استفاده می شوند مانند 80 که توسط HTTP استفاده می شود یا 25 که توسط SMTP برای ارسال ایمیل استفاده می شود.

      قبل از اینکه شروع به ذکر مثال ها کنیم، بهتر است که بررسی کوتاهی بر روی دو کلاس TcpClient و TcpListener داشته باشیم. زمانی که قصد داریم در محیط شبکه پیامی را ارسال کنیم، یک سیستم نقش ارسال کننده را داشته و سیستم دیگر پیام ما را دریافت می کند که در اینجا به سیستمی که پیام را ارسال می کند Client و سیستمی که پیام را گرفته و عملیاتی را انجام می دهد اصطلاحاً نقش Listener را بازی می کند که دائماً منتظر دریافت ارتباطی از طریق یکی از Client ها است. کلاس TcpClient برای ایجاد Client که ارسال پیام را انجام می دهد استفاده می شود و کلاس TcpListener برای دریافت Connection استفاده می شود.همانطور که متوجه شدید ما برای دریافت ارتباط باید ابتدا یک Listener ایجاد کنیم. کد زیر برای ما اینکار را انجام می دهد (در این کد یک TextBox با نام LogTextBox و یک Button با نام ListenButton ایجاد کردیم)

      private void ListenButton_Click(object sender, EventArgs e)
      {
          var thread = new Thread(new ThreadStart(StartListen));
          thread.Start();
      }
      
      private void StartListen()
      {
          TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.25"), 2222);
          listener.Start();
      
          var client = listener.AcceptTcpClient();
          var stream = client.GetStream();
          StreamReader reader = new StreamReader(stream);
          var result = reader.ReadToEnd();
          Invoke(new Action(() => LogTextBox.Text = result));
          stream.Close();
          client.Close();
          listener.Stop();
      }
      

      در کد بالا برای اینکه از Freeze شدن فرم جلوگیری کنیم از Thread استفاده کردیم. در متد StartListen ابتدا یک شئ از TcpListener ساختیم و به عنوان پارامتر آدرس IP و Port مورد نظر که Connection مربوطه را بر روی آن دریافت می کنیم مشخص کردیم. با فراخوانی متد Start عملیات Listen شروع می شود و متد AcceptTcpClient منتظر می شود که یک درخواست TCP برای ما ارسال شود و یک شئ از نوع TcpClient برای ما بر میگرداند (در صورت عدم استفاده از Thread متد AcceptTcpClient باعث Freeze شدن Form می شود). بعد از اینکه از سمت Client که کد آن را در قسمت بعدی بررسی می کنیم درخواستی دریافت شد، بوسیله متد GetStream استریمی که مبتنی بر آن پیام ارسال می شود را گرفته و در قالب یک StreamReader محتویات Stream را می خوانیم. Stream مربوطه از سمت Client نوشته می شود و ما اینجا پیام را دریافت می کنیم. بعد از دریافت پیام، خروجی را در LogTextBox نمایش داده و سپس استریم ایجاد شده، Client و Listener را می بندیم.

      به سراغ کد Client برویم:

      var client = new TcpClient("127.0.0.25", 2222);
      
      var stream = client.GetStream();
      var bytes = System.Text.Encoding.UTF8.GetBytes("Welcome to ITPro.ir");
      stream.Write(bytes, 0, bytes.Length);           
      stream.Close();
      client.Close();
      

      این کد که در سمت کلاینت نوشته می شود، ابتدا یک شئ از نوع TcpClient ایجاد می کند و به عنوان پارامتر ورودی آدرس IP و Port ای که قصد ارتباط با آن را داریم مشخص می کنیم. دقت کنید که این آدرس IP و Port با آدرس IP و Port که در TcpListener استفاده شده یکی است. بعد از ایجاد client متد AcceptTcpClient که در بخش Listener از آن استفاده کردیم فراخوانی شده و شئ Client در سمت Listener ایجاد می شود. در قدم بعد بوسیله متد GetStream، استریم مربوط به Client را گرفته و بر روی آن بوسیله متد Write پیامی که قصد انتقال آن را داریم را می نویسیم. دقت کنید که این پیام هر چیزی می تواند باشد، شما می توانید محتویات یک فایل را خوانده و آن را در انتقال دهید یا هر چیز دیگر. بعد از نوشتن پیام بر روی Stream بوسیله متد Close، استریم و Client ایجاد شده را می بندیم. بوسیله این کدها پیام ما در بستر شبکه منتقل شد. این انتقال پیام یک طرفه بود، شما می توانید از ارتباط را دو طرفه کنید، یعنی بر روی هر دو سیستم یک Listener ایجاد کنید که دریافت کننده پیام ها باشند و همچنین هر سیستم بتواند به سیستم دیگر پیام ارسال کند. نمونه کد بالا بر روی سیستم local قابل اجرا است، اما در صورتی که قصد اجرای آن در محیط شبکه را دارید، آدرس های IP مشخص شده را بر اساس IP سیستمی که برنامه بر روی آن اجرا می شود مشخص کنید.

      نویسنده: حسین احمدی
      منبع: ITpro
      برچسب ها
      ردیفعنوان
      1برنامه نویسی شبکه (Network Programming) در سی شارپ :: آشنایی با کلاس HttpClient
      2برنامه نویسی شبکه (Network Programming) در سی شارپ :: ارسال درخواست Post در کلاس HttpClient
      3برنامه نویسی شبکه (Network Programming) در سی شارپ :: کلاس های Uri و UriBuilder
      4برنامه نویسی شبکه (Network Programming) در سی شارپ :: کار با آدرس های IP و Dns
      5برنامه نویسی شبکه (Network Programming) در سی شارپ :: کلاس های TcpClient و TcpListener
      6برنامه نویسی شبکه (Network Programming) در سی شارپ :: پروتکل SMTP و ارسال ایمیل در سی شارپ
      دورهمجموعه کل دوره
      مطالب مرتبط

      در حال دریافت اطلاعات

      نظرات
      هیچ نظری ارسال نشده است

        برای ارسال نظر ابتدا به سایت وارد شوید

        arrow