برنامهنویسی شبکه (Networking) در #C
برنامهنویسی شبکه (Networking) در #C
#C دارای کتابخانههای قدرتمندی برای برنامهنویسی شبکه است. با استفاده از فضای نام System.Net و System.Net.Sockets میتوان برنامههای ارتباطی مانند کلاینت-سرور، وبسرور، دریافت و ارسال دادهها از طریق HTTP، TCP و UDP ایجاد کرد.
۱. کار با WebClient برای درخواستهای HTTP
کلاس WebClient یکی از سادهترین راهها برای ارسال درخواستهای HTTP و دریافت پاسخ از وبسرورها است.
مثال: دانلود یک صفحه وب
using System.Net;
class Program
{
static void Main()
{
using (WebClient client = new WebClient())
{
string content = client.DownloadString("https://www.example.com");
Console.WriteLine(content);
}
}
}
🔹 ()DownloadString محتوای یک URL را دریافت میکند.
🔹 این روش برای درخواستهای ساده مناسب است، اما در نسخههای جدید #C استفاده از HttpClient توصیه میشود.
۲. استفاده از HttpClient برای ارتباطات HTTP
HttpClient گزینهای مدرنتر و انعطافپذیرتر برای ارسال درخواستهای HTTP است.
مثال: دریافت داده از یک API
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using (HttpClient client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync("https://jsonplaceholder.typicode.com/posts/1");
string content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
}
}
🔹 ()GetAsync درخواست HTTP GET ارسال میکند.
🔹 ()ReadAsStringAsync محتوای پاسخ را به صورت متن دریافت میکند.
🔹 از await برای اجرای عملیات به صورت ناهمزمان (async) استفاده شده است.
۳. برنامهنویسی TCP (کلاینت-سرور)
برای ارتباط از طریق TCP میتوان از کلاسهای TcpClient و TcpListener استفاده کرد.
مثال: سرور TCP ساده
using System.Net;
using System.Net.Sockets;
using System.Text;
class Program
{
static void Main()
{
TcpListener server = new TcpListener(IPAddress.Any, 5000);
server.Start();
Console.WriteLine("سرور آماده است...");
while (true)
{
TcpClient client = server.AcceptTcpClient();
NetworkStream stream = client.GetStream();
byte[] buffer = Encoding.UTF8.GetBytes("به سرور خوش آمدید!");
stream.Write(buffer, 0, buffer.Length);
client.Close();
}
}
}
🔹 TcpListener یک سرور TCP ایجاد میکند.
🔹 ()AcceptTcpClient منتظر اتصال کلاینت میماند.
🔹 NetworkStream برای ارسال داده استفاده میشود.
مثال: کلاینت TCP ساده
using System.Net.Sockets;
using System.Text;
class Program
{
static void Main()
{
TcpClient client = new TcpClient("127.0.0.1", 5000);
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[256];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("پیام از سرور: " + response);
client.Close();
}
}
🔹 TcpClient برای اتصال به سرور استفاده شده است.
🔹 ()Read داده دریافتی را خوانده و نمایش میدهد.
۴. ارتباط از طریق UDP
UDP برخلاف TCP بدون اتصال است و برای ارسال دادههای سریع و بدون تأخیر (مانند بازیهای آنلاین) استفاده میشود.
مثال: سرور UDP
using System.Net;
using System.Net.Sockets;
using System.Text;
class Program
{
static void Main()
{
UdpClient udpServer = new UdpClient(5000);
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);
Console.WriteLine("سرور UDP در حال اجرا...");
while (true)
{
byte[] receivedData = udpServer.Receive(ref remoteEP);
string message = Encoding.UTF8.GetString(receivedData);
Console.WriteLine($"دریافت شد: {message}");
byte[] response = Encoding.UTF8.GetBytes("پیام دریافت شد!");
udpServer.Send(response, response.Length, remoteEP);
}
}
}
🔹 UdpClient یک سرور UDP راهاندازی میکند.
🔹 ()Receive برای دریافت پیام از کلاینت استفاده شده است.
🔹 ()Send پاسخ را ارسال میکند.
مثال: کلاینت UDP
using System.Net;
using System.Net.Sockets;
using System.Text;
class Program
{
static void Main()
{
UdpClient udpClient = new UdpClient();
IPEndPoint serverEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5000);
byte[] data = Encoding.UTF8.GetBytes("سلام سرور!");
udpClient.Send(data, data.Length, serverEP);
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);
byte[] receivedData = udpClient.Receive(ref remoteEP);
string response = Encoding.UTF8.GetString(receivedData);
Console.WriteLine("پاسخ از سرور: " + response);
}
}
🔹 ()Send پیام را به سرور ارسال میکند.
🔹 ()Receive پاسخ را دریافت و نمایش میدهد.
۵. استفاده از WebSockets برای ارتباطات زنده
WebSocket برای ارتباطات دوطرفه زنده (مثلاً چت آنلاین) استفاده میشود.
مثال: سرور WebSocket با ASP.NET Core
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
var builder = WebApplication.CreateBuilder();
var app = builder.Build();
app.UseWebSockets();
app.Map("/", async (HttpContext context) =>
{
if (context.WebSockets.IsWebSocketRequest)
{
WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync();
await Echo(webSocket);
}
else
{
context.Response.StatusCode = 400;
}
});
async Task Echo(WebSocket webSocket)
{
byte[] buffer = new byte[1024];
while (webSocket.State == WebSocketState.Open)
{
var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
string message = Encoding.UTF8.GetString(buffer, 0, result.Count);
Console.WriteLine("پیام دریافت شد: " + message);
await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, result.Count),
result.MessageType, result.EndOfMessage, CancellationToken.None);
}
}
app.Run();
()app.Run;
🔹 WebSocket ارتباط دوطرفه دائمی را فراهم میکند.
🔹 ()ReceiveAsync داده را دریافت میکند.
🔹 ()SendAsync پاسخ را ارسال میکند.
جمعبندی
#C ابزارهای مختلفی برای برنامهنویسی شبکه دارد. بسته به نیاز خود میتوانید از HttpClient برای درخواستهای HTTP، TcpClient و TcpListener برای ارتباط TCP، UdpClient برای ارتباط UDP، و WebSockets برای ارتباط زنده و دوطرفه استفاده کنید.
