در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آموزش برنامه نویسی شبکه در سی شارپ قسمت 5 : Client و Listener

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

نویسنده: حسین احمدی

منبع: جزیره برنامه نویسی و توسعه نرم افزار وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی است

#آموزش_سی_شارپ #دوره_آموزشی_سی_شارپ #کلاس_tcpclient_در_سی_شارپ #کلاس_tcplistener_در_سی_شارپ #نکات_سی_شارپ #استفاده_از_tcp_در_سی_شارپ #network_programming_در_سی_شارپ #برنامه_نویسی_شبکه_در_سی_شارپ
عنوان
1 آموزش برنامه نویسی شبکه در سی شارپ قسمت 1 : کلاس HttpClient رایگان
2 آموزش برنامه نویسی شبکه در سی شارپ قسمت 2 : ارسال درخواست Post رایگان
3 آموزش برنامه نویسی شبکه در سی شارپ قسمت 3 : کلاس Uri و UriBuilder رایگان
4 آموزش برنامه نویسی شبکه در سی شارپ قسمت 4 : کار با IP و DNS رایگان
5 آموزش برنامه نویسی شبکه در سی شارپ قسمت 5 : Client و Listener رایگان
6 آموزش برنامه نویسی شبکه در سی شارپ قسمت 6 : SMTP و ارسال ایمیل رایگان
زمان و قیمت کل 0″ 0
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....