برنامه سازی شبکه با سی شارپ- 6#ایجاد یک برنامه کلاینت/سرور اتصال گرا (TCP) بدون سوکت در سی شارپ

برنامه سازی شبکه در سی شارپ

دردات نت دو کلاس مخصوص TCP است: کلاس TCPClient و کلاس TCPListener. برای نوشتن یک برنامه اتصالگرا بدون سوکت نیاز هست با این دو کلاس و متدهای آنها آشنا شویم:

کلاس TCPClient
از این آبجکت برای اتصال به یک سرور از طریق یک پورت خاص استفاده می‌کنیم و بوسیله آن می‌توانیم از سرور داده بخوانیم یا به آن داده ارسال کنیم. این کلاس در فضای نام System.Net.Sockets قرار دارد.
سازنده آن بصورت ساده به شکل زیر است که دو ورودی ip و شماره پورت را می گیرد:
TCPClient    نام  دلخواه   = new   TCPClient(ip,port);
برخی از متد های رایج آن عبارتند از:
متد Connect : برای اتصال به یک host خاص است.ابتدا یک شی از نوع TCPClient ساخته شده سپس به یک آدرس و پورت مقید میشود.
مثال:
TCPClient    Test= new   TCPClient( );
Test.Connect(www.codenevisan.com , 2000);
متد Close: ارتباط آبجکت را با سروری که هم اکنون به آن متصل است قطع می‌کند.
متد GetStream : با فراخوانی این متد یک Stream از نوع NetworkStream به دست خواهیم آورد که از آن می توانیم برای ارسال و دریافت داده با سرور استفاده کنیم.
Network Stream یک کانال داده ای است که از آن برای نوشتن و خواندن داده، در ارتباط شبکه ای استفاده می شود. Getstream اجازه می دهد که داده خود را برحسب بایت ارسال و یا دریافت کنیم.  سازنده آن بصورت زیر است که یک ورودی از نوع Socket می پذیرد:
Network Stream نام دلخواه =new  Network Stream(ورودی از نوع سوکت)
کلاس TCPListener 
همان طور که از اسم آن مشخص است یک Object است که از آن برای ساخت یک Listener  (شنونده) بر روی یک پورت خاص استفاده کرده و از طریق آن با کامپیوترهایی که روی آن پورت خاص به کامپیوتر وصل می‌شوند رد و بدل اطلاعات کنیم. بطور ساده میتوان گفت این کلاس به اتصالهای درخواستی از سرویس گیرنده های شبکه گوش میدهد.
برخی از خواص و متد های رایج آن عبارتند از:
 متد AcceptSocket 
با فراخوانی این متد ، TCP Listener منتظر اتصال یک کلاینت به کامپیوتر می‌شود پس از اتصال یک کلاینت یک آبجکت از نوع Socket برمی‌گرداند که از آن می‌توانیم جهت خواندن و ارسال داده از وبه کلاینت وصل شده استفاده کنیم.
متد AcceptTCPClient 
با فراخوانی این متد ، TCP Listener منتظر اتصال یک کلاینت به کامپیوتر می‌شود پس از اتصال یک کلاینت یک آبجکت از نوع TCPClient برمی‌گرداند که از آن می‌توانیم جهت خواندن و ارسال داده از وبه کلاینت وصل شده استفاده کنیم.
متد Start 
 با فراخوانی این متد ، TCP Listener شروع به گوش دادن به پورت داده شده به آن می کند.
متد Stop 
 با فراخوانی این متد ، TCP Listener از گوش دادن به پورت داده شده به آن متوقف می‌شود.
StreamWriter:
برای نوشتن (ارسال) مطلب از آن استفاده میشود. در فضای نام System.IO استفاده می شود.سازنده آن بصورت زیر است که یک ورودی از نوع networkStream می پذیرد:
StreamWriter نام دلخواه   =new streamWriter(networkStream)
و برای نوشتن مطالب از متد WriteLine روی شی ایجاد شده استفاده میشود.ورودی این متد داده ای است که قرار است ارسال(نوشته) شود.
مثال:
StreamWriter  sr =new streamWriter(networkStream);
Sr. WriteLine(. ..);
StreamReader:
برای خواندن (دریافت) مطلب از آن استفاده میشود. در فضای نام System.IO استفاده می شود.سازنده آن بصورت زیر است که یک ورودی از نوع networkStream می پذیرد:
StreamReader نام دلخواه   =new streamReader(networkStream)
و برای نوشتن مطالب از متد ReadLine روی شی ایجاد شده استفاده میشود.
مثال:
StreamReader   sr 2 =new streamReader(networkStream)
Sr2. ReadLine( );
مثال های زیر برنامه سرویس دهنده و سرویش گیرنده را نشان میدهد :
برنامه سرویس دهنده:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace Server3
{
class Program
{
static void Main(string[] args)
{
int port = 2500;
IPAddress ip = IPAddress.Parse("192.168.100.232");
TcpListener s = new TcpListener(ip, port);
s.Start();
TcpClient c = s.AcceptTcpClient();
Stream st = c.GetStream();
byte[] b = ASCIIEncoding.ASCII.GetBytes("Message from Server");
st.Write(b, 0, b.Length);
byte[] b2 = new byte[20];
st.Read(b2, 0, 20);
Console.WriteLine(ASCIIEncoding.ASCII.GetString(b2));
st.Close();
Console.ReadKey();
}
}
}

برنامه سرویس گیرنده:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace Client3
{
class Program
{
static void Main(string[] args)
{
int port = 2500;
TcpClient s = new TcpClient();
s.Connect("192.168.100.232", port);
Stream st = s.GetStream();
byte[] b2 = new byte[20];
st.Read(b2, 0, 20);
Console.WriteLine(ASCIIEncoding.ASCII.GetString(b2));
byte[] b = ASCIIEncoding.ASCII.GetBytes("Message from client");
st.Write(b, 0, b.Length);
st.Close();
Console.ReadKey();
}
}
}

برچسب ها

, ,

محصولات پیشنهادی


نظرات کاربران


نظرات برای آموزش برنامه سازی شبکه با C# | بدون نظر »

کاربر عزیز، لطفاً دیدگاه ارزشمند خود را از طریق فرم زیر برای ما ارسال کنید:

درباره کدنویسان
آکادمی کدنویسان جهت کمک به دانشجویان رشته های کامپیوتر و فناوری اطلاعات و همه علاقمندان به طراحی و برنامه نویسی برای ویندوز، وب و موبایل ایجاد شده است.
بیشتر آموزش های سایت کدنویسان، بصورت رایگان ارائه شده است و بعضی بسته های آموزشی تصویری و نیز نرم افزارهای پیاده سازی شده در ازای پرداخت، قابل دانلود هستند.
هر گونه نظر، انتقاد یا پیشنهادی در مورد مطالب یا عملکرد کدنویسان دارید، حتما با ما در میان بگذارید.
نمادهای اعتماد ما


تماس با ما
  • شماره همراه : ۰۹۱۵۱۶۰۴۰۶۸
  • آی دی تلگرام : @mmoha94
  • پست الکترونیکی : mohammadi.sm@gmail.com
  • آدرس پستی : بیرجند، خیابان پیروزی، پیروزی ۹، پلاک ۲۸
کلیه حقوق متعلق به سایت کدنویسان است، انتشار و کپی برداری از مطالب این سایت غیرمجاز بوده و پیگرد قانونی دارد.