জাভা নেটওয়ার্কিং উদাহরণ (Java Networking Examples) দিয়ে আপনি কিভাবে নেটওয়ার্ক প্রোগ্রামিং করতে পারেন তা দেখতে পারেন। নিচে কিছু সাধারণ জাভা নেটওয়ার্কিং উদাহরণ দেওয়া হল:
এটি একটি সাধারণ TCP/IP সার্ভার যা ক্লায়েন্টের সাথে যোগাযোগ করে।
import java.io.*;
import java.net.*;
public class ServerExample {
public static void main(String[] args) {
try {
// সার্ভার সকেট তৈরি
ServerSocket serverSocket = new ServerSocket(5000);
System.out.println("সার্ভার চালু হয়েছে...");
// ক্লায়েন্ট থেকে সংযোগের জন্য অপেক্ষা
Socket clientSocket = serverSocket.accept();
System.out.println("ক্লায়েন্ট সংযুক্ত হয়েছে...");
// ইনপুট এবং আউটপুট স্ট্রিম তৈরি
BufferedReader input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter output = new PrintWriter(clientSocket.getOutputStream(), true);
// ক্লায়েন্টের পাঠানো বার্তা পড়া
String clientMessage = input.readLine();
System.out.println("ক্লায়েন্ট: " + clientMessage);
// সার্ভার থেকে ক্লায়েন্টকে বার্তা পাঠানো
output.println("এটা সার্ভারের সাড়া");
// সংযোগ বন্ধ করা
clientSocket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
এটি একটি সাধারণ TCP/IP ক্লায়েন্ট প্রোগ্রাম যা সার্ভারের সাথে সংযোগ করে।
import java.io.*;
import java.net.*;
public class ClientExample {
public static void main(String[] args) {
try {
// সার্ভারের সাথে সংযোগ
Socket socket = new Socket("localhost", 5000);
System.out.println("সার্ভারের সাথে সংযোগ হয়েছে...");
// ইনপুট এবং আউটপুট স্ট্রিম তৈরি
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
// সার্ভারকে বার্তা পাঠানো
output.println("হ্যালো সার্ভার!");
// সার্ভার থেকে সাড়া গ্রহণ করা
String serverResponse = input.readLine();
System.out.println("সার্ভার: " + serverResponse);
// সংযোগ বন্ধ করা
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
এটি একটি উদাহরণ যা URL-এ HTTP GET রিকোয়েস্ট পাঠায় এবং রেসপন্স দেখায়।
import java.io.*;
import java.net.*;
public class URLExample {
public static void main(String[] args) {
try {
// URL অবজেক্ট তৈরি
URL url = new URL("http://example.com");
// URL কানেকশন তৈরি
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// HTTP GET রিকোয়েস্ট পাঠানো
connection.setRequestMethod("GET");
connection.connect();
// HTTP রেসপন্স কোড চেক করা
int responseCode = connection.getResponseCode();
System.out.println("HTTP Response Code: " + responseCode);
// রেসপন্স ডেটা পড়া
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// রেসপন্স প্রিন্ট করা
System.out.println(response.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
এটি একটি উদাহরণ যেখানে UDP প্রোটোকল ব্যবহার করা হয়েছে ক্লায়েন্ট এবং সার্ভার কমিউনিকেশন করার জন্য।
import java.net.*;
public class UDPSocketServer {
public static void main(String[] args) {
DatagramSocket socket = null;
try {
socket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
while (true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
socket.receive(receivePacket);
String message = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("প্রাপ্ত বার্তা: " + message);
// ক্লায়েন্টের কাছ থেকে ডেটা গ্রহণ
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (socket != null && !socket.isClosed()) {
socket.close();
}
}
}
}
import java.net.*;
public class UDPSocketClient {
public static void main(String[] args) {
DatagramSocket socket = null;
try {
socket = new DatagramSocket();
String message = "হ্যালো UDP সার্ভার!";
InetAddress serverAddress = InetAddress.getByName("localhost");
DatagramPacket sendPacket = new DatagramPacket(message.getBytes(), message.length(), serverAddress, 9876);
socket.send(sendPacket);
System.out.println("বার্তা সার্ভারে পাঠানো হয়েছে: " + message);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (socket != null && !socket.isClosed()) {
socket.close();
}
}
}
}
এটি একটি সাধারণ উদাহরণ যেখানে সিস্টেমের মধ্যে একটি ফাইল ট্রান্সফার করা হয়।
import java.io.*;
import java.net.*;
public class FileServer {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(5001);
Socket socket = serverSocket.accept();
DataInputStream inputStream = new DataInputStream(socket.getInputStream());
FileOutputStream fileOutput = new FileOutputStream("received_file.txt");
int fileSize = inputStream.readInt();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer, 0, Math.min(buffer.length, fileSize))) != -1) {
fileOutput.write(buffer, 0, bytesRead);
fileSize -= bytesRead;
if (fileSize == 0) break;
}
System.out.println("ফাইল রিসিভ করা হয়েছে।");
fileOutput.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.*;
import java.net.*;
public class FileClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 5001);
FileInputStream fileInput = new FileInputStream("sample_file.txt");
DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
byte[] buffer = new byte[1024];
int bytesRead;
outputStream.writeInt((int) new File("sample_file.txt").length());
while ((bytesRead = fileInput.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
System.out.println("ফাইল সার্ভারে পাঠানো হয়েছে।");
fileInput.close();
outputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
এই উদাহরণগুলোতে, আপনি নেটওয়ার্কিং এর বিভিন্ন কৌশল এবং প্রোটোকল সম্পর্কে ধারণা পাবেন, যা জাভাতে নেটওয়ার্ক ভিত্তিক অ্যাপ্লিকেশন তৈরি করতে সাহায্য করবে।
জাভা সোকেট প্রোগ্রামিং এর মাধ্যমে ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগ স্থাপন করা হয়। নিচে একটি সোকেট প্রোগ্রামিং উদাহরণ দেওয়া হলো, যেখানে ক্লায়েন্ট এবং সার্ভারের মধ্যে ডাটা পাঠানো এবং গ্রহণ করা হয়।
এখানে একটি সাধারণ সার্ভার তৈরি করা হয়েছে যা ক্লায়েন্টের সাথে সংযোগ স্থাপন করে এবং প্রাপ্ত ডাটা ফিরিয়ে দেয়।
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try {
// সার্ভারের পোর্ট নং নির্ধারণ
int port = 1234;
// সার্ভার সকেট তৈরি
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("সার্ভার চলছে... ক্লায়েন্টের অপেক্ষা করছি...");
// ক্লায়েন্টের সাথে সংযোগ স্থাপন
Socket socket = serverSocket.accept();
System.out.println("ক্লায়েন্ট সংযোগ স্থাপন করেছে।");
// ইনপুট এবং আউটপুট স্ট্রিম তৈরি
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
// ক্লায়েন্ট থেকে মেসেজ গ্রহণ এবং তার উত্তর পাঠানো
String message = input.readLine();
System.out.println("ক্লায়েন্ট থেকে প্রাপ্ত মেসেজ: " + message);
output.println("সার্ভার থেকে প্রতিক্রিয়া: " + message);
// সংযোগ বন্ধ
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ক্লায়েন্ট একটি সার্ভারে সংযোগ স্থাপন করে এবং একটি মেসেজ পাঠায়। সার্ভার থেকে প্রতিক্রিয়া গ্রহণ করে।
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try {
// সার্ভারের আইপি এবং পোর্ট নং নির্ধারণ
String serverAddress = "localhost"; // বা সার্ভারের আইপি
int port = 1234;
// সার্ভারে সংযোগ স্থাপন
Socket socket = new Socket(serverAddress, port);
System.out.println("সার্ভারের সাথে সংযোগ স্থাপন হয়েছে।");
// ইনপুট এবং আউটপুট স্ট্রিম তৈরি
BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
// ক্লায়েন্ট থেকে সার্ভারে মেসেজ পাঠানো
System.out.print("আপনার মেসেজ লিখুন: ");
String message = userInput.readLine();
output.println(message);
// সার্ভার থেকে প্রতিক্রিয়া গ্রহণ
String response = input.readLine();
System.out.println("সার্ভার থেকে প্রাপ্ত প্রতিক্রিয়া: " + response);
// সংযোগ বন্ধ
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ServerSocket
ক্লাসটি সার্ভারের জন্য একটি সকেট তৈরি করে, যা নির্দিষ্ট পোর্টে ক্লায়েন্টের সাথে সংযোগ গ্রহণ করবে।socket.accept()
দ্বারা সার্ভার একটি ক্লায়েন্টের সাথে সংযোগ গ্রহণ করে।Socket
ক্লাসটি ক্লায়েন্টকে সার্ভারের সাথে সংযোগ স্থাপন করতে সাহায্য করে।PrintWriter
দিয়ে সার্ভারে পাঠায়।BufferedReader
ব্যবহার করা হয়।এই উদাহরণটি ক্লায়েন্ট এবং সার্ভারের মধ্যে সোকেট যোগাযোগকে প্রদর্শন করে এবং এর মাধ্যমে বিভিন্ন অ্যাপ্লিকেশনে রিমোট কমিউনিকেশন গঠন করা যায়।
নিচে একটি উদাহরণ দেওয়া হলো যা জাভাতে HTTP রিকোয়েস্ট করার জন্য URLConnection
ব্যবহার করে। এই উদাহরণে আমরা একটি URL এর সাথে সংযোগ তৈরি করব, এবং HTTP GET রিকোয়েস্ট পাঠাব।
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class URLConnectionExample {
public static void main(String[] args) {
try {
// URL তৈরি করুন
String urlString = "https://jsonplaceholder.typicode.com/posts"; // উদাহরণ হিসেবে একটি ফেক API URL
URL url = new URL(urlString);
// HTTP GET রিকোয়েস্ট তৈরি করুন
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET"); // GET রিকোয়েস্ট পাঠানো
// রেসপন্স কোড চেক করুন
int responseCode = connection.getResponseCode();
System.out.println("Response Code: " + responseCode);
// রেসপন্স পড়ুন যদি কোড 200 (OK) হয়
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// রেসপন্স প্রিন্ট করুন
System.out.println("Response Content: ");
System.out.println(response.toString());
} else {
System.out.println("GET request failed");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
URL
অবজেক্ট তৈরি করা হয় এবং সেটি HttpURLConnection
দিয়ে খোলা হয়।setRequestMethod("GET")
দিয়ে HTTP GET রিকোয়েস্ট পাঠানো হয়।BufferedReader
ব্যবহার করে রেসপন্স স্ট্রিম থেকে ডেটা পড়ি এবং সেটি একটি StringBuilder
তে জমা করি।জাভাতে HTTP রিকোয়েস্টের জন্য কিছু জনপ্রিয় প্রযুক্তি ও লাইব্রেরি রয়েছে:
HttpClient
API প্রদান করা হয়, যা HTTP রিকোয়েস্ট পরিচালনা করতে আরও সহজ এবং শক্তিশালী।Java 11 থেকে শুরু করে, HttpClient
API যোগ করা হয়েছে যা URLConnection
থেকে আরও উন্নত। নিচে তার একটি উদাহরণ দেওয়া হলো:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class HttpClientExample {
public static void main(String[] args) {
try {
// HttpClient তৈরি
HttpClient client = HttpClient.newHttpClient();
// GET রিকোয়েস্ট তৈরি
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://jsonplaceholder.typicode.com/posts"))
.build();
// রিকোয়েস্ট পাঠান এবং রেসপন্স প্রাপ্ত করুন
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// রেসপন্স কোড এবং কন্টেন্ট প্রিন্ট করুন
System.out.println("Response Code: " + response.statusCode());
System.out.println("Response Body: " + response.body());
} catch (Exception e) {
e.printStackTrace();
}
}
}
HttpClient
অবজেক্ট তৈরি করা হয়, যা HTTP রিকোয়েস্ট পাঠানোর জন্য ব্যবহৃত।HttpRequest
তৈরি করে URL সেট করা হয় এবং send()
মেথডের মাধ্যমে HTTP রিকোয়েস্ট পাঠানো হয়।এই উদাহরণগুলি HTTP রিকোয়েস্টের জন্য জাভাতে দুইটি জনপ্রিয় উপায় দেখায়। URLConnection
বেশ পুরানো এবং কিছুটা জটিল, তবে HttpClient
একটি আধুনিক এবং আরও সুবিধাজনক পদ্ধতি।
এখানে একটি Datagram Socket Example দেওয়া হল যা UDP Protocol এর মাধ্যমে ডেটা ট্রান্সমিশন দেখায়। UDP (User Datagram Protocol) একটি connectionless protocol যা কম দেরিতে এবং ছোট ডেটা প্যাকেট প্রেরণ করে থাকে।
এই কোডটি UDP সেক্টরে ডেটা পাঠানোর জন্য একটি ক্লায়েন্ট অ্যাপ্লিকেশন তৈরি করবে।
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPClient {
public static void main(String[] args) {
DatagramSocket socket = null;
try {
// Create DatagramSocket to send data
socket = new DatagramSocket();
String message = "Hello from UDP Client!";
byte[] sendData = message.getBytes();
// Get the server address and port
InetAddress serverAddress = InetAddress.getByName("localhost");
int serverPort = 9876;
// Create a DatagramPacket with message and send to server
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, serverPort);
socket.send(sendPacket);
System.out.println("Message sent to server: " + message);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (socket != null && !socket.isClosed()) {
socket.close();
}
}
}
}
এই কোডটি UDP সেক্টরে ক্লায়েন্ট থেকে ডেটা গ্রহণ করবে এবং তা প্রিন্ট করবে।
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UDPServer {
public static void main(String[] args) {
DatagramSocket socket = null;
try {
// Create DatagramSocket to receive data
socket = new DatagramSocket(9876); // Server listens on port 9876
byte[] receiveData = new byte[1024];
while (true) {
// Create DatagramPacket to receive the message
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
socket.receive(receivePacket);
// Extract message from packet
String message = new String(receivePacket.getData(), 0, receivePacket.getLength());
// Print received message
System.out.println("Received message: " + message);
}
} catch (SocketException e) {
System.out.println("Socket error: " + e.getMessage());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (socket != null && !socket.isClosed()) {
socket.close();
}
}
}
}
DatagramSocket
তৈরি করা হয় যা ডেটা পাঠানোর জন্য ব্যবহৃত হয়।InetAddress.getByName("localhost")
ব্যবহার করে আমরা সার্ভারের IP ঠিকানা পেতে পারি।DatagramSocket
দিয়ে একটি নির্দিষ্ট পোর্ট (যেমন, 9876) তে মেসেজ গ্রহণ করতে থাকে।DatagramPacket
ব্যবহার করে ডেটা গ্রহণ করে এবং তারপর সেই মেসেজটি কনসোলে প্রিন্ট করে।Java-তে Multicast Socket ব্যবহার করে Multicast Communication করার উদাহরণ দেয়া হলো। Multicast socket দিয়ে একাধিক ক্লায়েন্টের সাথে একই সময়ে ডেটা পাঠানো সম্ভব হয়। এটি একটি খুবই কার্যকরী পদ্ধতি যখন একাধিক ডিভাইস একই ডেটা গ্রহণ করতে চায়, যেমন স্ট্রিমিং ডেটা বা সেমিনার সেশনে একাধিক দর্শক।
নিচে Multicast Socket Communication এর উদাহরণ দেওয়া হয়েছে:
এই সার্ভারটি একটি multicast গ্রুপে ডেটা পাঠাবে।
import java.net.*;
import java.io.*;
public class MulticastServer {
public static void main(String[] args) {
try {
// Multicast গ্রুপের IP অ্যাড্রেস এবং পোর্ট নম্বর
InetAddress group = InetAddress.getByName("230.0.0.0");
int port = 1234;
// MulticastSocket তৈরি
MulticastSocket socket = new MulticastSocket();
String message = "Hello, Multicast Clients!";
byte[] buffer = message.getBytes();
// DatagramPacket তৈরি এবং পাঠানো
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, group, port);
socket.send(packet);
System.out.println("Message sent to the multicast group.");
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
এই ক্লায়েন্টটি multicast গ্রুপ থেকে ডেটা গ্রহণ করবে।
import java.net.*;
import java.io.*;
public class MulticastClient {
public static void main(String[] args) {
try {
// Multicast গ্রুপের IP অ্যাড্রেস এবং পোর্ট নম্বর
InetAddress group = InetAddress.getByName("230.0.0.0");
int port = 1234;
// MulticastSocket তৈরি এবং গ্রুপে যোগদান
MulticastSocket socket = new MulticastSocket(port);
socket.joinGroup(group);
byte[] buffer = new byte[256];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
System.out.println("Waiting for message...");
// ডেটা গ্রহণ করা
socket.receive(packet);
String received = new String(packet.getData(), 0, packet.getLength());
System.out.println("Received message: " + received);
socket.leaveGroup(group);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
230.0.0.0
(Multicast address range: 224.0.0.0 to 233.255.255.255) এবং পোর্ট 1234
ব্যবহার করে ডেটা পাঠায়।MulticastSocket
তৈরি করে এবং একটি DatagramPacket
ব্যবহার করে গ্রুপের কাছে একটি বার্তা পাঠায়।230.0.0.0
এবং পোর্ট 1234
তে যুক্ত হয়।MulticastSocket
তৈরি করে, এবং গ্রুপে যোগ দেয়।joinGroup()
মেথড দিয়ে গ্রুপে যোগ দেয় এবং leaveGroup()
মেথড দিয়ে গ্রুপ ছেড়ে যায়।এটি একটি মৌলিক উদাহরণ, তবে বাস্তব জীবনে আরও উন্নত ফিচার এবং নিরাপত্তা নিশ্চিত করতে TTL (Time-to-Live)
, SocketTimeout
, এবং অন্যান্য কনফিগারেশন সমর্থন ব্যবহার করা হতে পারে।
জাভাতে TCP প্রোটোকল ব্যবহার করে সিকিউর কমিউনিকেশন করার জন্য আমরা SSL/TLS এনক্রিপশন ব্যবহার করতে পারি, যা নেটওয়ার্কের মাধ্যমে নিরাপদ যোগাযোগ নিশ্চিত করে। নিচে দুটি অংশ দেওয়া হলো: সার্ভার এবং ক্লায়েন্ট। সার্ভার ইনকামিং ক্লায়েন্ট কানেকশন শোনে এবং SSL/TLS ব্যবহার করে ডেটা এনক্রিপ্ট করে পাঠায়, আর ক্লায়েন্ট সার্ভারের সাথে সিকিউর কানেকশনে যুক্ত হয়।
এই সার্ভারটি ক্লায়েন্ট কানেকশন শোনে এবং SSL/TLS ব্যবহার করে সিকিউর কমিউনিকেশন স্থাপন করে।
import javax.net.ssl.*;
import java.io.*;
import java.security.KeyStore;
public class SSLServer {
public static void main(String[] args) {
try {
// সার্ভারের প্রাইভেট কী এবং সার্টিফিকেট ধারণকারী KeyStore লোড করা হচ্ছে
KeyStore keyStore = KeyStore.getInstance("JKS");
FileInputStream keyStoreFile = new FileInputStream("server.keystore");
keyStore.load(keyStoreFile, "password".toCharArray());
// KeyManagerFactory তৈরি করা হচ্ছে
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore, "password".toCharArray());
// SSLContext তৈরি করা হচ্ছে এবং এটি KeyManagerFactory দিয়ে ইনিশিয়ালাইজ করা হচ্ছে
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagerFactory.getKeyManagers(), null, null);
// SSLServerSocketFactory তৈরি করা হচ্ছে
SSLServerSocketFactory serverSocketFactory = sslContext.getServerSocketFactory();
// SSLServerSocket তৈরি করা হচ্ছে
SSLServerSocket serverSocket = (SSLServerSocket) serverSocketFactory.createServerSocket(1234);
System.out.println("সার্ভার শুরু হয়েছে এবং ক্লায়েন্ট কানেকশনের জন্য অপেক্ষা করছে...");
// ক্লায়েন্ট কানেকশন অ্যাকসেপ্ট করা হচ্ছে
SSLSocket sslSocket = (SSLSocket) serverSocket.accept();
System.out.println("ক্লায়েন্ট কানেক্টেড");
// কমিউনিকেশনের জন্য ইনপুট এবং আউটপুট স্ট্রিম সেটআপ করা হচ্ছে
BufferedReader reader = new BufferedReader(new InputStreamReader(sslSocket.getInputStream()));
PrintWriter writer = new PrintWriter(sslSocket.getOutputStream(), true);
String clientMessage;
while ((clientMessage = reader.readLine()) != null) {
System.out.println("ক্লায়েন্ট: " + clientMessage);
writer.println("সার্ভার: " + clientMessage);
}
sslSocket.close();
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
ক্লায়েন্ট সিকিউর SSL/TLS কানেকশন ব্যবহার করে সার্ভারের সাথে সংযুক্ত হয় এবং ডেটা পাঠায়।
import javax.net.ssl.*;
import java.io.*;
import java.security.KeyStore;
public class SSLClient {
public static void main(String[] args) {
try {
// ক্লায়েন্টের সার্টিফিকেট (অপশনাল) ধারণকারী TrustStore লোড করা হচ্ছে
KeyStore trustStore = KeyStore.getInstance("JKS");
FileInputStream trustStoreFile = new FileInputStream("client.truststore");
trustStore.load(trustStoreFile, "password".toCharArray());
// TrustManagerFactory তৈরি করা হচ্ছে
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(trustStore);
// SSLContext তৈরি করা হচ্ছে এবং এটি TrustManagerFactory দিয়ে ইনিশিয়ালাইজ করা হচ্ছে
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManagerFactory.getTrustManagers(), null);
// SSLSocketFactory তৈরি করা হচ্ছে
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
// SSLSocket তৈরি করা হচ্ছে এবং সার্ভারের সাথে কানেক্ট করা হচ্ছে
SSLSocket sslSocket = (SSLSocket) sslSocketFactory.createSocket("localhost", 1234);
System.out.println("সার্ভারের সাথে সংযুক্ত হয়েছে");
// কমিউনিকেশনের জন্য ইনপুট এবং আউটপুট স্ট্রিম সেটআপ করা হচ্ছে
BufferedReader reader = new BufferedReader(new InputStreamReader(sslSocket.getInputStream()));
PrintWriter writer = new PrintWriter(sslSocket.getOutputStream(), true);
// সার্ভারে ডেটা পাঠানো হচ্ছে
writer.println("হ্যালো সার্ভার! এটি একটি সিকিউর মেসেজ।");
// সার্ভারের প্রতিক্রিয়া পড়া হচ্ছে
String serverMessage;
while ((serverMessage = reader.readLine()) != null) {
System.out.println("সার্ভার: " + serverMessage);
}
sslSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
এই উদাহরণটি কাজ করার জন্য আপনাকে Keystore এবং Truststore তৈরি করতে হবে।
keytool -genkeypair -alias server -keyalg RSA -keysize 2048 -storetype JKS -keystore server.keystore -validity 3650
keytool -import -alias server -file server.crt -keystore client.truststore
SSLServerSocket
) ব্যবহার করে সিকিউর কমিউনিকেশন স্থাপন করে। এটি ক্লায়েন্ট থেকে ডেটা পড়ে এবং একটি সিকিউর চ্যানেল ব্যবহার করে প্রতিক্রিয়া পাঠায়।SSLSocket
) ব্যবহার করে সার্ভারের সাথে সংযুক্ত হয়, একটি মেসেজ পাঠায় এবং সার্ভারের প্রতিক্রিয়া প্রিন্ট করে।এই উদাহরণটি TCP প্রোটোকল ব্যবহার করে SSL/TLS এনক্রিপশন সহ সিকিউর কমিউনিকেশন কিভাবে স্থাপন করা যায় তা প্রদর্শন করে।
Read more