برنامه نویسی سوکت با سی شارپ
برنامه نویسی سوکت ها در سی شارپ
برنامهنویسی سوکتها در سیشارپ به شما اجازه میدهد تا برنامههایی ایجاد کنید که قادر به ارتباط از طریق شبکه باشند. سوکتها در واقع نقاط انتهایی یک کانال ارتباطی دوطرفه هستند که برای ارسال و دریافت دادهها استفاده میشوند. بیایید با هم پنج مثال از استفاده سوکتها در سیشارپ را ببینیم.
مثال ۱: ایجاد یک سرور ساده
در این مثال، یک سرور TCP ساده ایجاد میکنیم که به پورت 13000 گوش میدهد و پیامهایی را از کلاینت دریافت و پاسخ میدهد.
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class Server {
static void Main() {
TcpListener server = new TcpListener(IPAddress.Any, 13000);
server.Start();
Console.WriteLine("Server started...");
while (true) {
TcpClient client = server.AcceptTcpClient();
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[client.ReceiveBufferSize];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string message = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine("Received: " + message);
byte[] response = Encoding.ASCII.GetBytes("Message received");
stream.Write(response, 0, response.Length);
client.Close();
}
}
}
توضیحات: این سرور به پورت 13000 گوش میدهد و وقتی پیامی دریافت میکند، آن را چاپ کرده و پاسخ "Message received" را به کلاینت ارسال میکند.
مثال ۲: ایجاد یک کلاینت ساده
در این مثال، یک کلاینت TCP ساده ایجاد میکنیم که به سرور متصل شده و پیامی را ارسال میکند.
using System;
using System.Net.Sockets;
using System.Text;
class Client {
static void Main() {
TcpClient client = new TcpClient("localhost", 13000);
NetworkStream stream = client.GetStream();
byte[] message = Encoding.ASCII.GetBytes("Hello, Server!");
stream.Write(message, 0, message.Length);
byte[] buffer = new byte[client.ReceiveBufferSize];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string response = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine("Received: " + response);
client.Close();
}
}
توضیحات: این کلاینت به سرور متصل میشود، پیامی را ارسال میکند و پاسخ را دریافت و چاپ میکند.
مثال ۳: ارسال و دریافت دادههای باینری
در این مثال، دادههای باینری (بهعنوان مثال، یک آرایه بایت) را ارسال و دریافت میکنیم.
کد سمت سرور:
using System;
using System.Net;
using System.Net.Sockets;
class BinaryServer {
static void Main() {
TcpListener server = new TcpListener(IPAddress.Any, 13000);
server.Start();
Console.WriteLine("Server started...");
while (true) {
TcpClient client = server.AcceptTcpClient();
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[client.ReceiveBufferSize];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
Console.WriteLine("Received " + bytesRead + " bytes");
byte[] response = BitConverter.GetBytes(bytesRead);
stream.Write(response, 0, response.Length);
client.Close();
}
}
}
کد سمت کلاینت:
using System;
using System.Net.Sockets;
class BinaryClient {
static void Main() {
TcpClient client = new TcpClient("localhost", 13000);
NetworkStream stream = client.GetStream();
byte[] data = new byte[] { 0, 1, 2, 3, 4, 5 };
stream.Write(data, 0, data.Length);
byte[] buffer = new byte[client.ReceiveBufferSize];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
int receivedBytes = BitConverter.ToInt32(buffer, 0);
Console.WriteLine("Received: " + receivedBytes + " bytes");
client.Close();
}
}
توضیحات: این مثال نشان میدهد چگونه میتوان دادههای باینری را ارسال و دریافت کرد.
مثال ۴: استفاده از UDP برای ارتباط سریعتر
در این مثال، از UDP برای ارسال و دریافت پیامها استفاده میکنیم.
کد سمت سرور:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class UdpServer {
static void Main() {
UdpClient server = new UdpClient(13000);
IPEndPoint clientEndpoint = new IPEndPoint(IPAddress.Any, 0);
Console.WriteLine("UDP Server started...");
while (true) {
byte[] buffer = server.Receive(ref clientEndpoint);
string message = Encoding.ASCII.GetString(buffer);
Console.WriteLine("Received: " + message);
byte[] response = Encoding.ASCII.GetBytes("Message received");
server.Send(response, response.Length, clientEndpoint);
}
}
}
کد سمت کلاینت:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class UdpClientProgram {
static void Main() {
UdpClient client = new UdpClient();
byte[] message = Encoding.ASCII.GetBytes("Hello, UDP Server!");
client.Send(message, message.Length, "localhost", 13000);
IPEndPoint serverEndpoint = new IPEndPoint(IPAddress.Any, 0);
byte[] buffer = client.Receive(ref serverEndpoint);
string response = Encoding.ASCII.GetString(buffer);
Console.WriteLine("Received: " + response);
client.Close();
}
}
توضیحات: این مثال نشان میدهد چگونه میتوان از پروتکل UDP برای ارسال و دریافت پیامها استفاده کرد.
مثال ۵: استفاده از چندنخ (Threading) برای مدیریت چندین کلاینت
در این مثال، سرور چندین کلاینت را با استفاده از نخها (Threads) مدیریت میکند.
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
class MultiThreadedServer {
static void Main() {
TcpListener server = new TcpListener(IPAddress.Any, 13000);
server.Start();
Console.WriteLine("Server started...");
while (true) {
TcpClient client = server.AcceptTcpClient();
Thread clientThread = new Thread(HandleClient);
clientThread.Start(client);
}
}
static void HandleClient(object obj) {
TcpClient client = (TcpClient)obj;
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[client.ReceiveBufferSize];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string message = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine("Received: " + message);
byte[] response = Encoding.ASCII.GetBytes("Message received");
stream.Write(response, 0, response.Length);
client.Close();
}
}
توضیحات: این سرور با استفاده از نخها میتواند همزمان با چندین کلاینت ارتباط برقرار کند.
! با این مثالها و توضیحات، شما اکنون میتوانید برنامههای شبکهای سادهای با استفاده از سوکتها در سیشارپ ایجاد کنید.