آموزش برنامه نویسی تحت شبکه درسی شارپ FtpWebRequest,SmtpClient,HttpClient,TcpClient,...
C# UdpClient
UdpClient خدمات شبکه پروتکل دادهگرام کاربر (UDP) را ارائه میکند. این شامل روش هایی برای ارسال و دریافت دیتاگرام های UDP بدون اتصال در حالت مسدود کردن همزمان است. قبل از ارسال و دریافت داده، نیازی به ایجاد یک اتصال میزبان راه دور نداریم، زیرا UDP یک پروتکل انتقال بدون اتصال است.
اکثر سرورهای عمومی به دلیل نگرانی های امنیتی دیگر سرویس اکو را ارائه نمی دهند. برای آزمایش مثال، باید سروری را در یک شبکه محلی راهاندازی کنیم و شبح xinetd (Debian) یا inetd (FreeBSD) را فعال کنیم.
Program.cs
using System.Text; using System.Net; using System.Net.Sockets; UdpClient udpClient = new UdpClient("core9", 7); Byte[] data = Encoding.ASCII.GetBytes("Hello there"); udpClient.Send(data, data.Length); IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); Byte[] received = udpClient.Receive(ref RemoteIpEndPoint); string output = Encoding.ASCII.GetString(received); Console.WriteLine(output); udpClient.Close();
مثال بالا یک پیام به سرویس اکو ارسال می کند سرویس اکو یک سرویس ازمایشی است که در پورت ۷ گوش میدهد
$ dotnet run Hello there
پیامی که ما راسال میکنیم به ما بر میگردد
C# TcpClient
کلاس TcpClient با استفاده از TCP دادهها را از یک منبع اینترنتی درخواست میکند. TcpClient جزئیات سطح پایین را برای ایجاد یک سوکت برای درخواست و دریافت داده از طریق TCP خلاصه میکند.
از آنجایی که اتصال به دستگاه راه دور به عنوان یک جریان نمایش داده می شود، داده ها را می توان با تکنیک های مدیریت جریان دات نت خواند و نوشت.
Program.cs
using System.Text; using System.Net.Sockets; using var client = new TcpClient(); var hostname = "webcode.me"; client.Connect(hostname, 80); using NetworkStream networkStream = client.GetStream(); networkStream.ReadTimeout = 2000; using var writer = new StreamWriter(networkStream); var message = @"GET / HTTP/1.1 Accept: text/html, charset=utf-8 Accept-Language: en-US User-Agent: Console app Connection: close Host: webcode.me" + "\r\n\r\n"; using var reader = new StreamReader(networkStream, Encoding.UTF8); byte[] bytes = Encoding.UTF8.GetBytes(message); networkStream.Write(bytes, 0, bytes.Length); Console.WriteLine(reader.ReadToEnd());
در مثال یک درخواست get با TCP ساخته ایم
using var client = new TcpClient(); var hostname = "webcode.me"; client.Connect(hostname, 80);
TCP کلاینت ساخته شده از ما به متد Connect به یک هاست remote وصل می شویم
using NetworkStream networkStream = client.GetStream(); networkStream.ReadTimeout = 2000;
با روش GetStream یک جریان شبکه بدست می آوریم. timeout را دو ثانیه تعیین می کنیم
using var writer = new StreamWriter(networkStream); var message = @"GET / HTTP/1.1 Accept: text/html, charset=utf-8 Accept-Language: en-US User-Agent: Console app Connection: close Host: webcode.me" + "\r\n\r\n";
ما یک StreamWriter ایجاد میکنیم و یک پیام درخواست GET آماده میکنیم.
using var reader = new StreamReader(networkStream, Encoding.UTF8); byte[] bytes = Encoding.UTF8.GetBytes(message);
برای پاسخ از سرور، یک StreamReader ایجاد میکنیم. دیتا را با روش GetBytes به بایت تبدیل میکنیم.
networkStream.Write(bytes, 0, bytes.Length);
پیام را با روش write در جریان شبکه مینویسیم.
Console.WriteLine(reader.ReadToEnd());
ما پاسخ را با روش ReadToEnd می خوانیم
C# FtpWebRequest
FtpWebRequest یک کلاینت پروتکل انتقال فایل (FTP) را پیادهسازی میکند.
Program.cs
using System.Net; string uri = "ftp://192.168.0.21"; FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(uri); ftpRequest.Credentials = new NetworkCredential("user7", "s$cret"); ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory; using FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse(); using var streamReader = new StreamReader(response.GetResponseStream()); var content = new List<string>(); string line = streamReader.ReadLine(); while (!string.IsNullOrEmpty(line)) { content.Add(line); line = streamReader.ReadLine(); } foreach (var el in content) { Console.WriteLine(el); }
کد بالا محتویات دایرکتوری FTP را فهرست می کند.
string uri = "ftp://192.168.0.21";
این مسیر URL در یک سرور FTP محلی(local) است.
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(uri);
از URI، FtpWebRequest را ایجاد میکنیم.
ftpRequest.Credentials = new NetworkCredential("user7", "s$cret"); ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
ما اعتبار و روش FTP را ارائه می دهیم. ما قصد داریم محتویات فهرست کنیم.
using FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse(); using var streamReader = new StreamReader(response.GetResponseStream());
ما یک پاسخ دریافت می کنیم و یک جریان خوان برای خواندن آن ایجاد می کنیم.
var content = new List<string>(); string line = streamReader.ReadLine(); while (!string.IsNullOrEmpty(line)) { content.Add(line); line = streamReader.ReadLine(); }
داده ها در لیست خوانده می شود
foreach (var el in content) { Console.WriteLine(el); }
در نهایت محتویات روی کنسول چاپ می کنیم
C# SmtpClient
SmtpClient به برنامهها اجازه میدهد با استفاده از پروتکل انتقال نامه ساده (SMTP) ایمیل ارسال کنند.
توجه داشته باشید که کلاس به عنوان منسوخ علامت گذاری شده است و توصیه می شود از کتابخانه MailKit برای کار با ایمیل ها استفاده کنید.
Program.cs
using System.Net.Mail; var client = new SmtpClient("core9", 25); using var msg = new MailMessage(); msg.From = new MailAddress("john.doe@example.com"); msg.Subject = "Hello"; msg.Body = "hello there"; msg.To.Add(new MailAddress("root@core9")); client.Send(msg);
این مثال یک ایمیل ساده به سروری در یک شبکه محلی(local) ارسال می کند.
C# HttpClient
HttpClient یک کلاس پایه برای ارسال درخواستهای HTTP و دریافت پاسخهای HTTP از منبعی است که توسط یک URI شناسایی شده است.
Program.cs
using var client = new HttpClient(); var result = await client.GetAsync("http://webcode.me"); Console.WriteLine(result.StatusCode);
مثال یک درخواست GET برای یک وب سایت کوچک ایجاد می کند. ما کد وضعیت درخواست را دریافت می کنیم.
using var client = new HttpClient();
A new HttpClient
is created.
var result = await client.GetAsync("http://webcode.me");
روش GetAsync یک درخواست GET را به عنوان یک عملیات ناهمزمان به Uri مشخص شده ارسال می کند. اپراتور انتظار ارزیابی روش همگام سازی را تا زمانی که عملیات ناهمزمان کامل شود به حالت تعلیق در می آورد. هنگامی که عملیات ناهمزمان کامل شد، اپراتور انتظار، در صورت وجود، نتیجه عملیات را برمیگرداند.
$ dotnet run OK
ما کد وضعیت 200 OK را دریافت می کنیم. وب سایت فعال است
پایان