System.Net.Sockets নামস্পেস উইন্ডোজ সকেট ইন্টারফেসের ম্যানেজড ইমপ্লিমেন্টেশন প্রদান করে। সকেট প্রোগ্রামিং দুটি মোডে হয়: সিঙ্ক্রোনাস (ব্লকিং) এবং অ্যাসিঙ্ক্রোনাস (নন-ব্লকিং)।
মূল সকেট ক্লাস এবং প্যারামিটার
Socket socket = new Socket(
AddressFamily.InterNetwork, // IPv4
SocketType.Stream, // TCP (রিলায়েবল, কানেকশন-অরিয়েন্টেড)
ProtocolType.Tcp // TCP প্রোটোকল
);
| প্যারামিটার | ব্যাখ্যা |
|---|---|
AddressFamily | অ্যাড্রেস ফ্যামিলি: InterNetwork (IPv4), InterNetworkV6 (IPv6) |
SocketType | Stream (TCP), Dgram (UDP), Raw |
ProtocolType | Tcp, Udp, IP, Unspecified |
TCP সার্ভার (TcpListener) উদাহরণ
using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
public class TcpServer
{
public static void StartServer(int port = 1234)
{
TcpListener listener = new TcpListener(IPAddress.Any, port);
listener.Start();
Console.WriteLine($"সার্ভার শুরু হয়েছে পোর্ট {port}-এ");
while (true)
{
// ক্লায়েন্ট কানেকশন অপেক্ষা করুন (ব্লকিং)
Socket clientSocket = listener.AcceptSocket();
Console.WriteLine($"ক্লায়েন্ট কানেক্টেড: {clientSocket.RemoteEndPoint}");
// নেটওয়ার্ক স্ট্রিম তৈরি করুন
using (NetworkStream stream = new NetworkStream(clientSocket))
using (StreamReader reader = new StreamReader(stream))
using (StreamWriter writer = new StreamWriter(stream) { AutoFlush = true })
{
string message = reader.ReadLine();
Console.WriteLine($"প্রাপ্ত: {message}");
// রেসপন্স পাঠান
writer.WriteLine($"সার্ভার ইকো: {message}");
}
clientSocket.Close();
}
}
}
TCP ক্লায়েন্ট উদাহরণ
using System;
using System.Net.Sockets;
using System.IO;
public class TcpClient
{
public static void Connect(string serverIp, int port = 1234)
{
using (TcpClient client = new TcpClient(serverIp, port))
using (NetworkStream stream = client.GetStream())
using (StreamReader reader = new StreamReader(stream))
using (StreamWriter writer = new StreamWriter(stream) { AutoFlush = true })
{
Console.WriteLine("সার্ভারের সাথে কানেক্টেড।");
// মেসেজ পাঠান
writer.WriteLine("হ্যালো সার্ভার!");
Console.WriteLine("পাঠানো হয়েছে: হ্যালো সার্ভার!");
// রেসপন্স পড়ুন
string response = reader.ReadLine();
Console.WriteLine($"প্রাপ্ত রেসপন্স: {response}");
}
}
}
অ্যাসিঙ্ক্রোনাস সকেট (আধুনিক পদ্ধতি)
.NET Core / .NET 5+ এ SocketAsyncEventArgs বা await SocketTaskExtensions ব্যবহার করুন:
using System;
using System.Net.Sockets;
using System.Threading.Tasks;
public class AsyncTcpClient
{
public static async Task ConnectAsync(string host, int port)
{
using var client = new TcpClient();
await client.ConnectAsync(host, port);
using var stream = client.GetStream();
var writer = new StreamWriter(stream) { AutoFlush = true };
var reader = new StreamReader(stream);
await writer.WriteLineAsync("অ্যাসিঙ্ক মেসেজ");
string response = await reader.ReadLineAsync();
Console.WriteLine($"রেসপন্স: {response}");
}
}
UDP সকেট (Datagram) - সংক্ষিপ্ত
// UDP সার্ভার
Socket udpServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
udpServer.Bind(new IPEndPoint(IPAddress.Any, 5000));
byte[] buffer = new byte[1024];
EndPoint clientEp = new IPEndPoint(IPAddress.Any, 0);
int received = udpServer.ReceiveFrom(buffer, ref clientEp);
string msg = Encoding.UTF8.GetString(buffer, 0, received);
// UDP ক্লায়েন্ট
Socket udpClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
udpClient.SendTo(Encoding.UTF8.GetBytes("হ্যালো UDP"), new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5000));
সর্বোত্তম অনুশীলন
- স্ট্রিমের জন্য
usingব্লক ব্যবহার করুন (অটো ডিসপোজ)। - অ্যাসিঙ্ক্রোনাস মেথড (
ConnectAsync,SendAsync,ReceiveAsync) ব্যবহার করুন স্কেলেবিলিটির জন্য। - বড় ফাইল ট্রান্সফারের জন্য বাফার সাইজ অপ্টিমাইজ করুন।
- এক্সেপশন হ্যান্ডলিং:
SocketException,ObjectDisposedExceptionক্যাচ করুন। - প্রোডাকশনে TLS/SSL এর জন্য
SslStreamব্যবহার করুন।