কিভাবে জাভাতে একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করবেন (ছবি সহ)

সুচিপত্র:

কিভাবে জাভাতে একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করবেন (ছবি সহ)
কিভাবে জাভাতে একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করবেন (ছবি সহ)

ভিডিও: কিভাবে জাভাতে একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করবেন (ছবি সহ)

ভিডিও: কিভাবে জাভাতে একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করবেন (ছবি সহ)
ভিডিও: ফোনের ডিসপ্লেতে টাচ করলে স্ক্রিনশট উঠে যাবে || How to take a Screenshot use display touch button 2024, মে
Anonim

একটি নির্দিষ্ট ডিভাইসে চালানো কোড লেখা খুবই সন্তোষজনক। কিন্তু, একে অপরের সাথে যোগাযোগ করে এমন বেশ কয়েকটি ডিভাইসে চালানো কোড লেখা কেবল জীবন-নিশ্চিত। এই নিবন্ধটি আপনাকে শেখাবে কিভাবে ট্রান্সমিশন কন্ট্রোল প্রোটোকল (টিসিপি) ব্যবহার করে নেটওয়ার্কের মাধ্যমে বার্তাগুলি সংযুক্ত এবং বিনিময় করতে হয়।

এই নিবন্ধে, আপনি একটি অ্যাপ্লিকেশন সেটআপ করবেন যা আপনার কম্পিউটারকে নিজের সাথে সংযুক্ত করবে এবং মূলত এটিকে পাগল করে তুলবে - নিজের সাথে কথা বলুন। আপনি জাভাতে নেটওয়ার্কিংয়ের জন্য দুটি সর্বাধিক ব্যবহৃত স্ট্রিম এবং সেগুলি কীভাবে কাজ করে তার মধ্যে পার্থক্যও শিখবেন।

ডেটা এবং অবজেক্ট স্ট্রিম

কোডে ডুব দেওয়ার আগে, নিবন্ধে ব্যবহৃত দুটি প্রবাহের মধ্যে পার্থক্য আলাদা করা প্রয়োজন।

ডেটা স্ট্রিম

ডেটা স্ট্রিমগুলি আদিম ডেটা টাইপ এবং স্ট্রিং প্রক্রিয়া করে। ডেটা স্ট্রীমে পাঠানো ডেটা ম্যানুয়ালি সিরিয়ালাইজড এবং ডেসেরিয়ালাইজ করা প্রয়োজন যা জটিল ডেটা স্থানান্তর করা কঠিন করে তোলে। কিন্তু, ডেটা স্ট্রিমগুলি জাভা ছাড়া অন্য ভাষায় লেখা সার্ভার এবং ক্লায়েন্টদের সাথে যোগাযোগ করতে পারে। কাঁচা স্ট্রিমগুলি সেই দিকের ডেটা স্ট্রিমের অনুরূপ, কিন্তু ডেটা স্ট্রিমগুলি নিশ্চিত করে যে ডেটা একটি প্ল্যাটফর্ম স্বাধীনভাবে ফরম্যাট করা হয়েছে যা উপকারী কারণ উভয় পক্ষই পাঠানো ডেটা পড়তে পারবে।

অবজেক্ট স্ট্রিম

অবজেক্ট স্ট্রিমগুলি আদিম ডেটা টাইপ এবং বাস্তবায়নকারী বস্তুগুলি প্রক্রিয়া করে

সিরিয়ালাইজযোগ্য

ইন্টারফেস. অবজেক্ট স্ট্রীমের উপর পাঠানো ডেটা স্বয়ংক্রিয়ভাবে সিরিয়ালাইজড এবং ডিসেরিয়ালাইজড যা জটিল ডেটা স্থানান্তর করা সহজ করে তোলে। কিন্তু, অবজেক্ট স্ট্রিমগুলি শুধুমাত্র জাভাতে লেখা সার্ভার এবং ক্লায়েন্টদের সাথে যোগাযোগ করতে পারে। এছাড়াও,

অবজেক্ট আউটপুট স্ট্রিম

আরম্ভ করার পরে, একটি হেডার পাঠায়

ইনপুট স্ট্রিম

অন্য পক্ষের, যা শুরুর পরে, শিরোনাম না পাওয়া পর্যন্ত মৃত্যুদন্ড কার্যকর করে।

ধাপ

জাভা Step1 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step1 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 1. একটি ক্লাস তৈরি করুন।

একটি ক্লাস তৈরি করুন এবং আপনি যা চান তার নাম দিন। এই নিবন্ধে, এটি নামকরণ করা হবে

NetworkAppExample

পাবলিক ক্লাস NetworkAppExample {}

জাভা Step2 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step2 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

পদক্ষেপ 2. একটি প্রধান পদ্ধতি তৈরি করুন।

একটি প্রধান পদ্ধতি তৈরি করুন এবং ঘোষণা করুন এটি এর ব্যতিক্রমগুলি ফেলে দিতে পারে

ব্যতিক্রম

টাইপ করুন এবং এর কোন উপশ্রেণী - সব ব্যতিক্রম। এটি একটি খারাপ অভ্যাস হিসাবে বিবেচিত হয়, কিন্তু বেয়ারবোন উদাহরণের জন্য গ্রহণযোগ্য।

public class NetworkAppExample {public static void main (String args) throws Exception {}}

জাভা Step3 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step3 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

পদক্ষেপ 3. সার্ভারের ঠিকানা ঘোষণা করুন।

এই উদাহরণটি স্থানীয় হোস্ট ঠিকানা এবং একটি নির্বিচারে পোর্ট নম্বর ব্যবহার করবে। পোর্ট নম্বরটি 0 থেকে 65535 (সহ) এর পরিসরে থাকা প্রয়োজন। যাইহোক, পোর্ট নম্বর 0 থেকে 1023 (সহ) এর পরিসর এড়ানোর জন্য কারণ সেগুলি সংরক্ষিত সিস্টেম পোর্ট।

public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; }}

জাভা Step4 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step4 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 4. একটি সার্ভার তৈরি করুন।

সার্ভার ঠিকানা এবং পোর্টে আবদ্ধ এবং আগত সংযোগগুলির জন্য শোনে। জাভাতে,

সার্ভারসকেট

সার্ভার-সাইড এন্ডপয়েন্টকে প্রতিনিধিত্ব করে এবং এর ফাংশনটি নতুন সংযোগ গ্রহণ করছে।

সার্ভারসকেট

ডেটা পড়া এবং পাঠানোর জন্য স্ট্রিম নেই কারণ এটি সার্ভার এবং ক্লায়েন্টের মধ্যে সংযোগের প্রতিনিধিত্ব করে না।

java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); }}

জাভা Step5 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step5 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

পদক্ষেপ 5. লগ সার্ভার চালু।

লগিং উদ্দেশ্যে, সার্ভারটি চালু করা কনসোলে মুদ্রণ করুন।

java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); }}

জাভা Step6 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step6 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

পদক্ষেপ 6. একটি ক্লায়েন্ট তৈরি করুন।

ক্লায়েন্ট একটি সার্ভারের ঠিকানা এবং পোর্টে আবদ্ধ এবং সংযোগ স্থাপনের পর প্যাকেট (বার্তা) শুনতে পায়। জাভাতে,

সকেট

সার্ভারের সাথে সংযুক্ত ক্লায়েন্ট-সাইড এন্ডপয়েন্ট বা ক্লায়েন্টের সাথে সংযোগ (সার্ভার থেকে) প্রতিনিধিত্ব করে এবং অন্য প্রান্তে পার্টির সাথে যোগাযোগ করতে ব্যবহৃত হয়।

java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); }}

জাভা Step7 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step7 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 7. সংযোগ প্রচেষ্টা লগ।

লগিং উদ্দেশ্যে, কনসোলে মুদ্রণ করুন যে সংযোগের চেষ্টা করা হয়েছে।

java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); }}

জাভা Step8 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step8 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 8. সংযোগ স্থাপন করুন।

ক্লায়েন্ট কখনই সংযোগ করবে না যতক্ষণ না সার্ভার শোনে এবং গ্রহণ করে, অন্য কথায় সংযোগ স্থাপন করে। জাভাতে, সংযোগগুলি ব্যবহার করে প্রতিষ্ঠিত হয়

গ্রহণ ()

পদ্ধতি

সার্ভারসকেট

শ্রেণী একটি ক্লায়েন্ট সংযোগ না হওয়া পর্যন্ত পদ্ধতিটি কার্যকর করা বন্ধ করবে।

java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); }}

জাভা Step9 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step9 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 9. প্রতিষ্ঠিত সংযোগ লগ।

লগিং উদ্দেশ্যে, কনসোলে মুদ্রণ করুন যে সার্ভার এবং ক্লায়েন্টের মধ্যে সংযোগ স্থাপন করা হয়েছে।

java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); }}

জাভা Step10 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step10 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 10. যোগাযোগের ধারা প্রস্তুত করুন।

যোগাযোগ স্ট্রীমের উপর করা হয় এবং, এই অ্যাপ্লিকেশনে, সার্ভার (ক্লায়েন্ট থেকে) এবং ক্লায়েন্টের কাঁচা স্ট্রীমগুলিকে ডেটা বা অবজেক্ট স্ট্রীমের সাথে বেঁধে রাখা প্রয়োজন। মনে রাখবেন, উভয় পক্ষকে একই স্ট্রিম টাইপ ব্যবহার করতে হবে।

  • তথ্য প্রবাহ

    java.io. DataInputStream আমদানি করুন; java.io. DataOutputStream আমদানি করুন; java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); DataOutputStream clientOut = নতুন DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = নতুন DataInputStream (client.getInputStream ()); DataOutputStream serverOut = নতুন DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = নতুন DataInputStream (connection.getInputStream ()); }}

  • অবজেক্ট স্ট্রিম

    যখন একাধিক অবজেক্ট স্ট্রিম ব্যবহার করা হয়, ইনপুট স্ট্রিমগুলিকে আউটপুট স্ট্রিমগুলির মতো একই ক্রমে শুরু করতে হয় কারণ

    অবজেক্ট আউটপুট স্ট্রিম

    অন্য দলকে একটি হেডার পাঠায় এবং

    ObjectInputStream

    শিরোনাম না পড়া পর্যন্ত এটি কার্যকর করা বন্ধ করে দেয়।

    java.io. ObjectInputStream আমদানি করুন; java.io. ObjectOutputStream আমদানি করুন; java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); ObjectOutputStream clientOut = নতুন ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = নতুন ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = new ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = নতুন ObjectInputStream (connection.getInputStream ()); }}

    উপরের কোডে উল্লেখ করা অর্ডারটি মনে রাখা সহজ হতে পারে - প্রথমে আউটপুট স্ট্রিমগুলি শুরু করুন তারপর একই ক্রমে ইনপুট স্ট্রিমগুলি। যাইহোক, অবজেক্ট স্ট্রিমগুলি আরম্ভ করার জন্য আরেকটি আদেশ হল:

    ObjectOutputStream clientOut = নতুন ObjectOutputStream (client.getOutputStream ()); ObjectInputStream serverIn = নতুন ObjectInputStream (connection.getInputStream ()); ObjectOutputStream serverOut = নতুন ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = new ObjectInputStream (client.getInputStream ());

জাভা Step11 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step11 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 11. লগ ইন করুন যে যোগাযোগ প্রস্তুত।

লগিং উদ্দেশ্যে, কনসোলে প্রিন্ট করুন যে যোগাযোগ প্রস্তুত।

// কোড বাদ দেওয়া আমদানি java.net. InetAddress; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); // কোড বাদ দেওয়া System.out.println ("যোগাযোগ প্রস্তুত।"); }}

জাভা Step12 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step12 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 12. একটি বার্তা তৈরি করুন।

এই আবেদনে,

ওহে বিশ্ব

পাঠ্যটি সার্ভারে পাঠানো হবে

বাইট

অথবা

স্ট্রিং

। ব্যবহৃত প্রবাহের উপর নির্ভর করে এমন একটি ভেরিয়েবল ঘোষণা করুন। ব্যবহার করুন

বাইট

ডেটা স্ট্রীমের জন্য এবং

স্ট্রিং

বস্তুর স্রোতের জন্য।

  • তথ্য প্রবাহ

    ডেটা স্ট্রিম ব্যবহার করে, সিরিয়ালাইজেশন বস্তুগুলিকে আদিম ডেটা টাইপে রূপান্তরিত করে বা a

    স্ট্রিং

    । এক্ষেত্রে,

    স্ট্রিং

    এ রূপান্তরিত হয়

    বাইট

    লিখিত ব্যবহারের পরিবর্তে

    writeBytes ()

    অন্যান্য বস্তু যেমন চিত্র বা অন্যান্য ফাইলের সাথে এটি কীভাবে করা হবে তা দেখানোর পদ্ধতি।

    java.io. DataInputStream আমদানি করুন; java.io. DataOutputStream আমদানি করুন; java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); DataOutputStream clientOut = নতুন DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = নতুন DataInputStream (client.getInputStream ()); DataOutputStream serverOut = নতুন DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = নতুন DataInputStream (connection.getInputStream ()); System.out.println ("যোগাযোগ প্রস্তুত।"); বাইট messageOut = "Hello World".getBytes (); }}

  • অবজেক্ট স্ট্রিম

    java.io. ObjectInputStream আমদানি করুন; java.io. ObjectOutputStream আমদানি করুন; java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); ObjectOutputStream clientOut = নতুন ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = নতুন ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = new ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = new ObjectInputStream (connection.getInputStream ()); System.out.println ("যোগাযোগ প্রস্তুত।"); স্ট্রিং মেসেজ আউট = "হ্যালো ওয়ার্ল্ড"; }}

জাভা Step13 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step13 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 13. বার্তা পাঠান।

আউটপুট স্ট্রিমে ডেটা লিখুন এবং স্ট্রিমটি ফ্লাশ করুন যাতে ডেটা সম্পূর্ণরূপে লেখা হয়েছে।

  • তথ্য প্রবাহ

    একটি বার্তার দৈর্ঘ্য প্রথমে পাঠানো প্রয়োজন যাতে অন্য পক্ষ জানতে পারে যে এটি কত বাইট পড়তে হবে। দৈর্ঘ্য একটি আদিম পূর্ণসংখ্যা টাইপ হিসাবে পাঠানোর পরে, বাইট পাঠানো যেতে পারে।

    java.io. DataInputStream আমদানি করুন; java.io. DataOutputStream আমদানি করুন; java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); DataOutputStream clientOut = নতুন DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = নতুন DataInputStream (client.getInputStream ()); DataOutputStream serverOut = নতুন DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = নতুন DataInputStream (connection.getInputStream ()); System.out.println ("যোগাযোগ প্রস্তুত।"); বাইট messageOut = "Hello World".getBytes (); clientOut.writeInt (messageOut.length); clientOut.write (messageOut); clientOut.flush (); }}

  • বস্তুর স্রোত

    java.io. ObjectInputStream আমদানি করুন; java.io. ObjectOutputStream আমদানি করুন; java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); ObjectOutputStream clientOut = নতুন ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = নতুন ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = new ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = নতুন ObjectInputStream (connection.getInputStream ()); System.out.println ("যোগাযোগ প্রস্তুত।"); স্ট্রিং মেসেজ আউট = "হ্যালো ওয়ার্ল্ড"; clientOut.writeObject (messageOut); clientOut.flush (); }}

জাভা Step14 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step14 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 14. পাঠানো বার্তা লগ।

লগিং উদ্দেশ্যে, বার্তাটি পাঠানো হয়েছে এমন কনসোলে মুদ্রণ করুন।

  • তথ্য প্রবাহ

    java.io. DataInputStream আমদানি করুন; java.io. DataOutputStream আমদানি করুন; java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); DataOutputStream clientOut = নতুন DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = নতুন DataInputStream (client.getInputStream ()); DataOutputStream serverOut = নতুন DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = নতুন DataInputStream (connection.getInputStream ()); System.out.println ("যোগাযোগ প্রস্তুত।"); বাইট messageOut = "Hello World".getBytes (); clientOut.writeInt (messageOut.length); clientOut.write (messageOut); clientOut.flush (); System.out.println ("সার্ভারে বার্তা পাঠানো হয়েছে:" + নতুন স্ট্রিং (messageOut)); }}

  • বস্তুর স্রোত

    java.io. ObjectInputStream আমদানি করুন; java.io. ObjectOutputStream আমদানি করুন; java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); ObjectOutputStream clientOut = নতুন ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = নতুন ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = new ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = নতুন ObjectInputStream (connection.getInputStream ()); System.out.println ("যোগাযোগ প্রস্তুত।"); স্ট্রিং মেসেজ আউট = "হ্যালো ওয়ার্ল্ড"; clientOut.writeObject (messageOut); clientOut.flush (); System.out.println ("সার্ভারে বার্তা পাঠানো হয়েছে:" + মেসেজ আউট); }}

জাভা Step15 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step15 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 15. বার্তাটি পড়ুন।

ইনপুট স্ট্রিম থেকে ডেটা পড়ুন এবং এটি রূপান্তর করুন। যেহেতু আমরা পাঠানো ডেটার ধরন ঠিক জানি, তাই আমরা একটি তৈরি করব

স্ট্রিং

থেকে

বাইট

অথবা নিক্ষেপ

বস্তু

প্রতি

স্ট্রিং

চেক না করে, ব্যবহৃত স্ট্রিমের উপর নির্ভর করে।

  • তথ্য প্রবাহ

    যেহেতু দৈর্ঘ্য প্রথমে পাঠানো হয়েছিল এবং পরে বাইটগুলি পাঠানো হয়েছিল, একই ক্রমে পড়তে হবে। যদি দৈর্ঘ্য শূন্য হয়, সেখানে পড়ার কিছু নেই। বস্তুটি deserialized হয় যখন বাইটগুলি একটি উদাহরণে রূপান্তরিত হয়, এই ক্ষেত্রে, এর

    স্ট্রিং

    java.io. DataInputStream আমদানি করুন; java.io. DataOutputStream আমদানি করুন; java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); DataOutputStream clientOut = নতুন DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = নতুন DataInputStream (client.getInputStream ()); DataOutputStream serverOut = নতুন DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = নতুন DataInputStream (connection.getInputStream ()); System.out.println ("যোগাযোগ প্রস্তুত।"); বাইট messageOut = "Hello World".getBytes (); clientOut.writeInt (messageOut.length); clientOut.write (messageOut); clientOut.flush (); System.out.println ("সার্ভারে বার্তা পাঠানো হয়েছে:" + নতুন স্ট্রিং (messageOut)); int দৈর্ঘ্য = serverIn.readInt (); যদি (দৈর্ঘ্য> 0) {বাইট messageIn = নতুন বাইট [দৈর্ঘ্য]; serverIn.readFully (messageIn, 0, messageIn.length); }}}

  • বস্তুর স্রোত

    java.io. ObjectInputStream আমদানি করুন; java.io. ObjectOutputStream আমদানি করুন; java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); ObjectOutputStream clientOut = নতুন ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = নতুন ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = new ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = নতুন ObjectInputStream (connection.getInputStream ()); System.out.println ("যোগাযোগ প্রস্তুত।"); স্ট্রিং মেসেজ আউট = "হ্যালো ওয়ার্ল্ড"; clientOut.writeObject (messageOut); clientOut.flush (); System.out.println ("সার্ভারে বার্তা পাঠানো হয়েছে:" + মেসেজ আউট); স্ট্রিং messageIn = (স্ট্রিং) serverIn.readObject (); }}

জাভা Step16 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step16 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 16. লগ পড়ার বার্তা।

লগিংয়ের উদ্দেশ্যে, কনসোলে প্রিন্ট করুন যে বার্তাটি প্রাপ্ত হয়েছে এবং এর বিষয়বস্তু মুদ্রণ করুন।

  • তথ্য প্রবাহ

    java.io. DataInputStream আমদানি করুন; java.io. DataOutputStream আমদানি করুন; java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); DataOutputStream clientOut = নতুন DataOutputStream (client.getOutputStream ()); DataInputStream clientIn = নতুন DataInputStream (client.getInputStream ()); DataOutputStream serverOut = নতুন DataOutputStream (connection.getOutputStream ()); DataInputStream serverIn = নতুন DataInputStream (connection.getInputStream ()); System.out.println ("যোগাযোগ প্রস্তুত।"); বাইট messageOut = "Hello World".getBytes (); clientOut.writeInt (messageOut.length); clientOut.write (messageOut); clientOut.flush (); System.out.println ("সার্ভারে বার্তা পাঠানো হয়েছে:" + নতুন স্ট্রিং (messageOut)); int দৈর্ঘ্য = serverIn.readInt (); যদি (দৈর্ঘ্য> 0) {বাইট messageIn = নতুন বাইট [দৈর্ঘ্য]; serverIn.readFully (messageIn, 0, messageIn.length); System.out.println ("ক্লায়েন্টের কাছ থেকে প্রাপ্ত বার্তা:" + নতুন স্ট্রিং (messageIn)); }}}

  • বস্তুর স্রোত

    java.io. ObjectInputStream আমদানি করুন; java.io. ObjectOutputStream আমদানি করুন; java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); ObjectOutputStream clientOut = নতুন ObjectOutputStream (client.getOutputStream ()); ObjectOutputStream serverOut = নতুন ObjectOutputStream (connection.getOutputStream ()); ObjectInputStream clientIn = new ObjectInputStream (client.getInputStream ()); ObjectInputStream serverIn = নতুন ObjectInputStream (connection.getInputStream ()); System.out.println ("যোগাযোগ প্রস্তুত।"); স্ট্রিং মেসেজ আউট = "হ্যালো ওয়ার্ল্ড"; clientOut.writeObject (messageOut); clientOut.flush (); System.out.println ("সার্ভারে বার্তা পাঠানো হয়েছে:" + মেসেজ আউট); স্ট্রিং messageIn = (স্ট্রিং) serverIn.readObject (); System.out.println ("ক্লায়েন্টের কাছ থেকে প্রাপ্ত বার্তা:" + messageIn); }}

জাভা Step17 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step17 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 17. সংযোগ বিচ্ছিন্ন করুন।

যখন একটি পক্ষ তার স্ট্রিমগুলি বন্ধ করে দেয় তখন সংযোগ বিচ্ছিন্ন হয়ে যায়। জাভাতে, আউটপুট স্ট্রিম বন্ধ করে, সংশ্লিষ্ট সকেট এবং ইনপুট স্ট্রিম বন্ধ করা হয়। একবার অন্য প্রান্তের একটি পক্ষ খুঁজে পায় সংযোগটি শেষ হয়ে গেলে, মেমরি লিক রোধ করার জন্য এটির আউটপুট স্ট্রিমও বন্ধ করতে হবে।

// কোড বাদ দেওয়া আমদানি java.net. InetAddress; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); // কোড বাদ দেওয়া System.out.println ("যোগাযোগ প্রস্তুত।"); // কোড বাদ দেওয়া clientOut.close (); serverOut.close (); }}

জাভা Step18 V2 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step18 V2 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 18. সংযোগ বিচ্ছিন্ন করুন।

লগিং উদ্দেশ্যে, কনসোল সংযোগে মুদ্রণ সংযোগ বিচ্ছিন্ন করা হয়েছে।

// কোড বাদ দেওয়া আমদানি java.net. InetAddress; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); // কোড বাদ দেওয়া System.out.println ("যোগাযোগ প্রস্তুত।"); // কোড বাদ দেওয়া clientOut.close (); serverOut.close (); System.out.println ("সংযোগ বন্ধ।"); }}

জাভা Step19 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step19 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 19. সার্ভার বন্ধ করুন।

সংযোগ বিচ্ছিন্ন, কিন্তু সার্ভার এখনও চালু এবং চলমান। যেমন

সার্ভারসকেট

কোন প্রবাহের সাথে যুক্ত নয়, এটি কল করে স্পষ্টভাবে বন্ধ করা প্রয়োজন

বন্ধ ()

পদ্ধতি

// কোড বাদ দেওয়া আমদানি java.net. InetAddress; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); // কোড বাদ দেওয়া System.out.println ("যোগাযোগ প্রস্তুত।"); // কোড বাদ দেওয়া clientOut.close (); serverOut.close (); System.out.println ("সংযোগ বন্ধ।"); server.close (); }}

জাভা Step20 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step20 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 20. লগ সার্ভার বন্ধ।

লগিং উদ্দেশ্যে, কনসোল সার্ভারে মুদ্রণ বন্ধ করা হয়েছে।

// কোড বাদ দেওয়া আমদানি java.net. InetAddress; আমদানি java.net. ServerSocket; java.net. Socket আমদানি করুন; public class NetworkAppExample {public static void main (String args) throws Exception {String host = "localhost"; int পোর্ট = 10430; সার্ভারসকেট সার্ভার = নতুন সার্ভারসকেট (পোর্ট, 50, InetAddress.getByName (হোস্ট)); System.out.println ("সার্ভার শুরু হয়েছে।"); সকেট ক্লায়েন্ট = নতুন সকেট (হোস্ট, পোর্ট); System.out.println ("সার্ভারে সংযুক্ত হচ্ছে …"); সকেট সংযোগ = server.accept (); System.out.println ("সংযোগ প্রতিষ্ঠিত।"); // কোড বাদ দেওয়া System.out.println ("যোগাযোগ প্রস্তুত।"); // কোড বাদ দেওয়া clientOut.close (); serverOut.close (); System.out.println ("সংযোগ বন্ধ।"); server.close (); System.out.println ("সার্ভার বন্ধ।"); }}

জাভা Step21 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন
জাভা Step21 এ একটি নেটওয়ার্ক অ্যাপ্লিকেশন তৈরি করুন

ধাপ 21. কম্পাইল করুন এবং চালান।

লগিং আমাদের আবেদনটি সফল হয়েছে কিনা তা জানতে সক্ষম করেছে। প্রত্যাশিত আউটপুট:

সার্ভার শুরু হয়েছে। সার্ভারে সংযোগ করা হচ্ছে … সংযোগ স্থাপন করা হয়েছে। যোগাযোগ প্রস্তুত। সার্ভারে বার্তা পাঠানো হয়েছে: হ্যালো ওয়ার্ল্ড ক্লায়েন্টের কাছ থেকে প্রাপ্ত বার্তা: হ্যালো ওয়ার্ল্ড সংযোগ বন্ধ। সার্ভার বন্ধ।

যদি আপনার আউটপুট উপরেরটির মতো না হয়, যা ঘটার সম্ভাবনা নেই, তবে কয়েকটি সমাধান রয়েছে:

  • আউটপুট যদি লাইনে থামে

    সংযোগ স্থাপন করা হয়েছে।

    এবং বস্তু প্রবাহ ব্যবহার করা হয়, প্রতিটি ফ্লাশ

    অবজেক্ট আউটপুট স্ট্রিম

  • শুরুর পরে অবিলম্বে কারণ কোনো কারণে হেডার পাঠানো হয়নি।
  • আউটপুট প্রিন্ট করলে

    java.net. BindException: ইতিমধ্যে ব্যবহার করা ঠিকানা

  • একটি ভিন্ন পোর্ট নম্বর চয়ন করুন কারণ নির্দিষ্ট একটি ইতিমধ্যেই ব্যবহৃত হয়েছে।

পরামর্শ

  • একটি ভিন্ন নেটওয়ার্কে একটি সার্ভারের সাথে সংযোগ স্থাপন করা হয় একটি ফরোয়ার্ড পোর্ট আছে এমন সার্ভারের একটি ডিভাইসের বাহ্যিক আইপি ঠিকানার সাথে সংযোগ স্থাপন করে।
  • একই নেটওয়ার্কে সার্ভারের সাথে সংযোগ স্থাপন করা হয় সার্ভার চালানো কোনো ডিভাইসের প্রাইভেট আইপি ঠিকানার সাথে সংযোগ স্থাপন করা অথবা পোর্ট ফরওয়ার্ড করা এবং ডিভাইসের বাহ্যিক আইপি ঠিকানার সাথে সংযোগ স্থাপন করা।
  • হামাচির মতো সফ্টওয়্যার রয়েছে, যা একটি পোর্ট ফরওয়ার্ড না করেই ভিন্ন নেটওয়ার্কে সার্ভারের সাথে সংযোগ স্থাপনের অনুমতি দেয়, কিন্তু এর জন্য উভয় ডিভাইসে সফটওয়্যার ইনস্টল করা প্রয়োজন।

উদাহরণ

নেটওয়ার্ক অ্যাপ্লিকেশন যা ব্লকিং ইনপুট/আউটপুট ব্যবহার করে তাদের থ্রেড ব্যবহার করতে হবে। নিম্নলিখিত উদাহরণগুলি একটি ন্যূনতম সার্ভার এবং থ্রেড সহ ক্লায়েন্ট বাস্তবায়ন দেখায়। নেটওয়ার্কিং কোডটি মূলত প্রবন্ধের মতই, কিছু স্নিপেট সিঙ্ক্রোনাইজ করা হয়েছে, থ্রেডে সরানো হয়েছে এবং ব্যতিক্রমগুলি পরিচালনা করা হয়েছে।

সার্ভার। জাভা

java.io. IOException আমদানি করুন; java.net. InetAddress আমদানি করুন; আমদানি java.net. ServerSocket; java.net. SocketException আমদানি করুন; java.net. UnknownHostException আমদানি করুন; java.util. ArrayList আমদানি করুন; আমদানি java.util. Collections; java.util. List আমদানি করুন; /*** ক্লাস {@code Server} একটি নেটওয়ার্কে সার্ভারের শেষ বিন্দু উপস্থাপন করে। {ode কোড সার্ভার} একবার নির্দিষ্ট আইপি * ঠিকানা এবং পোর্টে আবদ্ধ, ক্লায়েন্টদের সাথে সংযোগ স্থাপন করে এবং তাদের সাথে যোগাযোগ করতে বা তাদের সংযোগ বিচ্ছিন্ন করতে সক্ষম হয়। *

* এই ক্লাস থ্রেডসেফ। * * sionversion 1.0 * -see Client * -see Connection */ public class server implements runnable {private ServerSocket server; ব্যক্তিগত তালিকা সংযোগ; ব্যক্তিগত থ্রেড থ্রেড; ব্যক্তিগত চূড়ান্ত বস্তু সংযোগ লক = নতুন বস্তু (); /** * একটি {ode কোড সার্ভার} তৈরি করে যা নির্দিষ্ট হোস্টের নাম এবং পোর্টে ক্লায়েন্টদের সাথে যোগাযোগ করে নির্দিষ্ট * অনুরোধকৃত সর্বাধিক দৈর্ঘ্যের আগত ক্লায়েন্টদের। * * @প্যারাম হোস্ট হোস্ট ঠিকানা ব্যবহার করতে। * mপরম পোর্ট পোর্ট নম্বর ব্যবহার করতে হবে। * m প্যারাম ব্যাকলগ আগত ক্লায়েন্টদের সারির সর্বোচ্চ দৈর্ঘ্যের অনুরোধ করেছে। * rowsথ্রো NetworkException যদি সার্ভার চালু করার সময় ত্রুটি ঘটে। */ পাবলিক সার্ভার (স্ট্রিং হোস্ট, ইন্ট পোর্ট, ইন্ট ব্যাকলগ) NetworkException নিক্ষেপ করে {try {server = new ServerSocket (port, backlog, InetAddress.getByName (host)); } catch (UnknownHostException e) {throw new NetworkException ("হোস্টের নাম সমাধান করা যায়নি:" + হোস্ট, ই); } ধরা (IllegalArgumentException e) {throw new NetworkException ("পোর্ট নম্বর 0 থেকে 65535 এর মধ্যে থাকা প্রয়োজন (সহ):" + পোর্ট); } ধরা (IOException e) {throw new NetworkException ("সার্ভার চালু করা যায়নি।", ই); } সংযোগ = Collections.synchronizedList (নতুন ArrayList ()); থ্রেড = নতুন থ্রেড (এই); thread.start (); } /*** একটি {ode কোড সার্ভার} তৈরি করে যা নির্দিষ্ট হোস্ট নাম এবং পোর্টে ক্লায়েন্টদের সাথে যোগাযোগ করে। * * @প্যারাম হোস্ট হোস্ট ঠিকানা বাঁধতে। * mপরম পোর্ট পোর্ট নম্বর বাঁধতে। * rowsথ্রো NetworkException যদি সার্ভার চালু করার সময় ত্রুটি দেখা দেয়। */ পাবলিক সার্ভার (স্ট্রিং হোস্ট, ইন্ট পোর্ট) NetworkException নিক্ষেপ করে {এই (হোস্ট, পোর্ট, 50); } /*** ক্লায়েন্টদের কাছ থেকে আগত সংযোগগুলি শোনেন, গ্রহণ করেন এবং নিবন্ধন করেন। */ @Override public void run () {while (! Server.isClosed ()) {try {connection.add (new Connection (server.accept ())); } ধরা (SocketException e) {if (! e.getMessage ()। সমান ("সকেট বন্ধ")) {e.printStackTrace (); }} ধরা (NetworkException | IOException e) {e.printStackTrace (); }}} /*** সমস্ত নিবন্ধিত ক্লায়েন্টদের কাছে ডেটা পাঠায়। * * m প্যারাম ডেটা ডেটা পাঠানোর জন্য। * rowsথ্রো IllegalStateException যদি সার্ভার অফলাইনে থাকে তখন ডেটা লেখার চেষ্টা করা হয়। * rowsথ্রু IllegalArgumentException যদি পাঠানোর তথ্য শূন্য হয়। */ পাবলিক অকার্যকর সম্প্রচার (অবজেক্ট ডেটা) {যদি (server.isClosed ()) {নতুন IllegalStateException নিক্ষেপ করুন ("ডেটা পাঠানো হয়নি, সার্ভার অফলাইন আছে"); } if (data == null) {নতুন IllegalArgumentException নিক্ষেপ ("নাল ডেটা"); } সমলয়িত System.out.println ("ক্লায়েন্টকে সফলভাবে ডেটা পাঠানো হয়েছে।"); } ধরা (NetworkException e) {e.printStackTrace (); }}}} /*** একটি সংযোগ বিচ্ছিন্ন বার্তা পাঠায় এবং নির্দিষ্ট ক্লায়েন্টকে সংযোগ বিচ্ছিন্ন করে। * * mপ্যারাম সংযোগ বিচ্ছিন্ন করার জন্য ক্লায়েন্ট। * rowsথ্রো NetworkException যদি সংযোগ বন্ধ করার সময় ত্রুটি ঘটে। */ পাবলিক অকার্যকর সংযোগ বিচ্ছিন্ন (সংযোগ সংযোগ) NetworkException নিক্ষেপ করে {যদি (connection.remove (connection)) {connection.close (); }} /*** সমস্ত ক্লায়েন্টকে একটি সংযোগ বিচ্ছিন্ন বার্তা পাঠায়, তাদের সংযোগ বিচ্ছিন্ন করে এবং সার্ভার বন্ধ করে দেয়। */ পাবলিক অকার্যকর বন্ধ () NetworkException নিক্ষেপ করে } ধরা (NetworkException e) {e.printStackTrace (); }}} connection. clear (); চেষ্টা করুন {server.close (); } catch (IOException e) {throw new NetworkException ("সার্ভার বন্ধ করার সময় ত্রুটি।"); } পরিশেষে {thread.interrupt (); }} /*** সার্ভার অনলাইনে আছে কিনা তা ফেরত দেয়। * * - সার্ভার অনলাইনে থাকলে সত্য ফিরে আসুন। মিথ্যা, অন্যথায়। */ পাবলিক বুলিয়ান isOnline () {return! server.isClosed (); } /*** নিবন্ধিত ক্লায়েন্টদের একটি অ্যারে প্রদান করে। */ পাবলিক কানেকশন getConnections () {সিঙ্ক্রোনাইজড (connectionLock) {return connection.toArray (নতুন কানেকশন [connection.size ()]); }}}

Client.java

java.io. IOException আমদানি করুন; java.net. Socket আমদানি করুন; java.net. UnknownHostException আমদানি করুন; /*** ক্লাস {odecode Client} একটি নেটওয়ার্কে ক্লায়েন্টের শেষ বিন্দু উপস্থাপন করে। {odecode Client}, একবার একটি নির্দিষ্ট * সার্ভারের সাথে সংযুক্ত হয়ে গেলে, শুধুমাত্র সার্ভারের সাথে যোগাযোগ করতে সক্ষম হওয়ার নিশ্চয়তা দেওয়া হয়। অন্যান্য ক্লায়েন্ট ডেটা পান কি না * সার্ভার বাস্তবায়নের উপর নির্ভর করে। *

* এই ক্লাস থ্রেডসেফ। * * sionversion 1.0 * -see server * -see connection */ public class Client {private Connection connection; /*** নির্দিষ্ট হোস্ট এবং পোর্টে সার্ভারের সাথে সংযুক্ত একটি {odecode Client} গঠন করে। * * @প্যারাম হোস্ট হোস্ট ঠিকানা বাঁধতে। * mপরম পোর্ট পোর্ট নম্বর বাঁধতে। * rowsথ্রো NetworkException যদি সার্ভার চালু করার সময় ত্রুটি ঘটে। */ পাবলিক ক্লায়েন্ট (স্ট্রিং হোস্ট, ইন্ট পোর্ট) NetworkException নিক্ষেপ করে {try {connection = new Connection (new socket (host, port)); } catch (UnknownHostException e) {throw new NetworkException ("হোস্টের নাম সমাধান করা যায়নি:" + হোস্ট, ই); } ধরা (IllegalArgumentException e) {throw new NetworkException ("পোর্ট নম্বর 0 থেকে 65535 এর মধ্যে থাকা প্রয়োজন (সহ):" + পোর্ট); } catch (IOException e) {throw new NetworkException ("সার্ভার চালু করা যায়নি।", ই); }} /*** অন্য পক্ষকে ডেটা পাঠায়। * * m প্যারাম ডেটা ডেটা পাঠানোর জন্য। * rowsথ্রো NetworkException যদি আউটপুট স্ট্রীমে লেখা ব্যর্থ হয়। * rowsথ্রো IllegalStateException যদি সংযোগ বন্ধ হয়ে যায় তাহলে ডেটা লেখার চেষ্টা করা হয়। * rowsথ্রু IllegalArgumentException যদি পাঠানোর তথ্য শূন্য হয়। * rowsথ্রো অসমর্থিত অপারেশন ব্যতিক্রম যদি অসমর্থিত ডেটা টাইপ পাঠানোর চেষ্টা করা হয়। */ পাবলিক অকার্যকর প্রেরণ (অবজেক্ট ডেটা) NetworkException {connection.send (data) নিক্ষেপ করে; } /*** সার্ভারের সাথে একটি সংযোগ বিচ্ছিন্ন বার্তা পাঠায় এবং সংযোগ বন্ধ করে দেয়। */ পাবলিক অকার্যকর বন্ধ () NetworkException নিক্ষেপ করে {connection.close (); } /*** ক্লায়েন্ট সার্ভারের সাথে সংযুক্ত কিনা তা ফেরত দেয়। * * client ক্লায়েন্ট সংযুক্ত থাকলে সত্য ফিরে আসুন। মিথ্যা, অন্যথায়। */ পাবলিক বুলিয়ান isOnline () {return connection.isConnected (); } /*** ক্লায়েন্টের {@link Connection} উদাহরণ প্রদান করে। */ পাবলিক কানেকশন getConnection () {রিটার্ন কানেকশন; }}

সংযোগ। জাভা

java.io. DataInputStream আমদানি করুন; java.io. DataOutputStream আমদানি করুন; java.io. IOException আমদানি করুন; java.net. Socket আমদানি করুন; আমদানি java.net. SocketException; /** * ক্লাস {odecode Connection} হয় সার্ভার থেকে ক্লায়েন্টের সাথে সংযোগ অথবা ক্লায়েন্টের এন্ড-পয়েন্ট একটি নেটওয়ার্কের প্রতিনিধিত্ব করে একটি সার্ভারে * বাস্তবায়ন। *

* এই ক্লাস থ্রেডসেফ। * * sionversion 1.0 * -see Server * -see Client */ public class Connection implements runnable {private socket socket; ব্যক্তিগত DataOutputStream আউট; ব্যক্তিগত DataInputStream মধ্যে; ব্যক্তিগত থ্রেড থ্রেড; প্রাইভেট ফাইনাল অবজেক্ট রাইটলক = নতুন অবজেক্ট (); ব্যক্তিগত চূড়ান্ত বস্তু readLock = নতুন বস্তু (); /*** একটি নির্দিষ্ট {inklink সকেট} এর স্ট্রিম ব্যবহার করে {@code Connection} তৈরি করে। * * @প্যারাম সকেট সকেট থেকে স্ট্রিম আনতে।*/ পাবলিক কানেকশন (সকেট সকেট) NetworkException নিক্ষেপ করে {যদি (socket == null) {নতুন IllegalArgumentException নিক্ষেপ ("নাল সকেট"); } this.socket = সকেট; চেষ্টা করুন {out = new DataOutputStream (socket.getOutputStream ()); } catch (IOException e) {throw new NetworkException ("আউটপুট স্ট্রিম অ্যাক্সেস করা যায়নি।", ই); } চেষ্টা করুন {in = new DataInputStream (socket.getInputStream ()); } catch (IOException e) {throw new NetworkException ("ইনপুট স্ট্রিম অ্যাক্সেস করা যায়নি।", ই); } থ্রেড = নতুন থ্রেড (এই); thread.start (); } /*** অন্য পক্ষের সাথে যোগাযোগ থাকা অবস্থায় বার্তাগুলি পড়ে। */ @Override public void run () {while (! Socket.isClosed ()) {try {int identifier; বাইট বাইট; সিঙ্ক্রোনাইজড (readLock) {identifier = in.readInt (); int দৈর্ঘ্য = in.readInt (); যদি (দৈর্ঘ্য> 0) {বাইট = নতুন বাইট [দৈর্ঘ্য]; in.readFully (বাইট, 0, বাইট। দৈর্ঘ্য); } অন্য {চালিয়ে যান; }} সুইচ (শনাক্তকারী) {কেস আইডেন্টিফায়ার। আন্তর্জাতিক: স্ট্রিং কমান্ড = নতুন স্ট্রিং (বাইট); if (command.equals ("disconnect")) {if (! socket.isClosed ()) {System.out.println ("ডিসকানেকশন প্যাকেট পাওয়া গেছে।"); চেষ্টা করুন {close (); } ধরা (NetworkException e) {return; }}} বিরতি; কেস আইডেন্টিফায়ার। বিরতি; ডিফল্ট: System.out.println ("অচেনা তথ্য প্রাপ্ত হয়েছে।"); }} ধরা (SocketException e) {if (! e.getMessage ()। সমান ("সকেট বন্ধ")) {e.printStackTrace (); }} ধরা (IOException e) {e.printStackTrace (); }}} /*** অন্য পক্ষকে ডেটা পাঠায়। * * m প্যারাম ডেটা ডেটা পাঠানোর জন্য। * rowsথ্রো NetworkException যদি আউটপুট স্ট্রীমে লেখা ব্যর্থ হয়। * rowsথ্রো IllegalStateException যদি সংযোগ বন্ধ হয়ে যায় তাহলে ডেটা লেখার চেষ্টা করা হয়। * rowsথ্রু IllegalArgumentException যদি পাঠানোর তথ্য শূন্য হয়। * rowsথ্রো অসমর্থিত অপারেশন ব্যতিক্রম যদি অসমর্থিত ডেটা টাইপ পাঠানোর চেষ্টা করা হয়। */ পাবলিক ভয়েড সেন্ড (অবজেক্ট ডেটা) NetworkException নিক্ষেপ করে {যদি (socket.isClosed ()) {নতুন IllegalStateException নিক্ষেপ করে ("ডেটা পাঠানো হয়নি, সংযোগ বন্ধ আছে"); } if (data == null) {নতুন IllegalArgumentException নিক্ষেপ ("নাল ডেটা"); } int শনাক্তকারী; বাইট বাইট; যদি (স্ট্রিং এর ডাটা ইন্সট্যান্স) {identifier = Identifier. TEXT; বাইট = ((স্ট্রিং) ডেটা).getBytes (); } অন্যথায় {নতুন UnsupportedOperationException নিক্ষেপ করুন ("অসমর্থিত ডেটা টাইপ:" + data.getClass ()); } চেষ্টা করুন {synchronized (writeLock) {out.writeInt (identifier); out.writeInt (বাইট দৈর্ঘ্য); out.write (বাইট); out.flush (); }} ধরা (IOException e) {নতুন NetworkException নিক্ষেপ করুন ("ডেটা পাঠানো যায়নি।", ই); }} /*** অন্য পক্ষের সাথে সংযোগ বিচ্ছিন্ন করার বার্তা পাঠায় এবং বন্ধ করে দেয়। */ public void close () নিক্ষেপ NetworkException {if (socket.isClosed ()) {throw new IllegalStateException ("সংযোগ ইতিমধ্যেই বন্ধ।"); } চেষ্টা করুন {বাইট বার্তা = "সংযোগ বিচ্ছিন্ন".getBytes (); সিঙ্ক্রোনাইজড (writeLock) {out.writeInt (Identifier. INTERNAL); out.writeInt (message.length); out.write (বার্তা); out.flush (); }} catch (IOException e) {System.out.println ("সংযোগ বিচ্ছিন্ন বার্তা পাঠানো যায়নি।"); } চেষ্টা করুন {synchronized (writeLock) {out.close (); }} ধরা (IOException e) {নতুন NetworkException নিক্ষেপ ("সংযোগ বন্ধ করার সময় ত্রুটি।", ই); } পরিশেষে {thread.interrupt (); }} /*** অন্য পক্ষের সাথে সংযোগটি জীবিত কিনা তা প্রদান করে। * * - সংযোগটি জীবিত থাকলে সত্য ফিরে আসুন। মিথ্যা, অন্যথায়। */ পাবলিক বুলিয়ান isConnected () {return! socket.isClosed (); }}

Identifier.java

/** * ক্লাসে {@code Identifier} রয়েছে যা over inklink Connection} দ্বারা ব্যবহৃত ধ্রুবকগুলিকে নেটওয়ার্কের মাধ্যমে পাঠানো ডেটার সিরিয়ালাইজিং এবং ডিসেরিয়ালাইজ করার জন্য ব্যবহার করে। * * - ভার্সন 1.0 * - সংযোগ দেখুন * / পাবলিক ফাইনাল ক্লাস আইডেন্টিফায়ার { / ** * ইন্টারনাল মেসেজের জন্য আইডেন্টিফায়ার। */ পাবলিক স্ট্যাটিক ফাইনাল int ইন্টার্নাল = 1; /*** পাঠ্য বার্তার জন্য শনাক্তকারী। */ পাবলিক স্ট্যাটিক ফাইনাল int টেক্সট = 2; }

NetworkException.java

/*** ক্লাস {@code NetworkException} নেটওয়ার্ক সম্পর্কিত একটি ত্রুটি নির্দেশ করে। * / পাবলিক ক্লাস NetworkException ব্যতিক্রম প্রসারিত করে { / *** তার বার্তা হিসেবে {@code null} দিয়ে একটি {@code NetworkException} গঠন করে। * / public NetworkException () {} / *** নির্দিষ্ট বার্তা সহ একটি {@code NetworkException} গঠন করে। * * mপ্যারাম বার্তা ত্রুটি বর্ণনা করার জন্য একটি বার্তা। */ পাবলিক NetworkException (স্ট্রিং বার্তা) {সুপার (বার্তা); } /*** নির্দিষ্ট বার্তা এবং কারণ সহ একটি {@code NetworkException} গঠন করে। * * mপ্যারাম বার্তা ত্রুটি বর্ণনা করার জন্য একটি বার্তা। * mparam কারণ ত্রুটির একটি কারণ। */ পাবলিক NetworkException (স্ট্রিং বার্তা, নিক্ষেপযোগ্য কারণ) {সুপার (বার্তা, কারণ); } /*** নির্দিষ্ট কারণ সহ একটি {@code NetworkException} গঠন করে। * * mপরম = ত্রুটির কারণ। */ পাবলিক NetworkException (নিক্ষেপযোগ্য কারণ) {সুপার (কারণ); }}

UsageExample.java

/*** ক্লাস {@code UsageExample} {@link Server} এবং {@link Client} এর ব্যবহার দেখায়। এই উদাহরণগুলি * {@link থ্রেড#ঘুম (দীর্ঘ)} ব্যবহার করে প্রতিটি সেগমেন্ট কার্যকর করা হয়েছে তা নিশ্চিত করার জন্য কারণ দ্রুত শুরু এবং বন্ধ করার ফলে কিছু * সেগমেন্ট এক্সিকিউট হয় না। * * sionversion 1.0 * -see Server * -see Client */ public class UsageExample {public static void main (String args) নিক্ষেপ ব্যতিক্রম {String host = "localhost"; int পোর্ট = 10430; সার্ভার সার্ভার = নতুন সার্ভার (হোস্ট, পোর্ট); ক্লায়েন্ট ক্লায়েন্ট = নতুন ক্লায়েন্ট (হোস্ট, পোর্ট); Thread.sleep (100L); client.send ("হ্যালো।"); server.broadcast ("আরে, বন্ধু!"); Thread.sleep (100L); server.disconnect (server.getConnections () [0]); // অথবা client.close () ক্লায়েন্ট-সাইড সার্ভার থেকে সংযোগ বিচ্ছিন্ন করতে। }}

প্রস্তাবিত: