وباکا

آموزش تخصصی برنامه نویسی وب

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

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

کلاس TCPClient
از اين آبجكت براي اتصال به يك سرور از طريق يك پورت خاص استفاده مي‌كنيم و بوسيله آن مي‌توانيم از سرور داده بخوانيم يا به آن داده ارسال كنيم. این کلاس در فضای نام System.Net.Sockets قرار دارد.
سازنده آن بصورت ساده به شکل زیر است که دو ورودی ip و شماره پورت را می گیرد:
TCPClient    نام  دلخواه   = new   TCPClient(ip,port);
برخي از متد هاي رايج آن عبارتند از:
متد Connect : برای اتصال به یک host خاص است.ابتدا یک شی از نوع TCPClient ساخته شده سپس به یک آدرس و پورت مقید میشود.
مثال:
TCPClient    Test= new   TCPClient( );
Test.Connect(webaca.ir , 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();
}
}
}

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

فهرست مطالب