Java DatagramSocket এবং SOCKS5 UDP রিলে
Java UDP সকেটের কেন SOCKS5 UDP বাস্তবায়ন দরকার তা বুঝুন, এমনকি যখন TCP সংযোগ ইতিমধ্যেই SOCKS ব্যবহার করে।
আপনার Java HTTP অনুরোধ SOCKS-এর মাধ্যমে কাজ করে, তবুও UDP বৈশিষ্ট্য এখনও সরাসরি ট্রাফিক পাঠায় বা ব্যর্থ হয়। JVM-এর SOCKS বৈশিষ্ট্য সেট করা DatagramSocket-কে SOCKS5 UDP বাস্তবায়ন দেয় না।
DatagramSocket API নেটওয়ার্ক এন্ডপয়েন্টে ঠিকানাকৃত ডেটাগ্রাম পাঠায় ও গ্রহণ করে। এর connect() পদ্ধতি সেই সকেটের জন্য একটি পিয়ার নির্বাচন করে। এটি পিয়ারের সাথে SOCKS আলোচনা করে না।
SOCKS5 UDP পথে অতিরিক্ত কাজ থাকে
SOCKS5 একটি TCP নিয়ন্ত্রণ সংযোগের উপর প্রতিষ্ঠিত UDP অ্যাসোসিয়েশন সংজ্ঞায়িত করে। এরপর ক্লায়েন্ট প্রক্সি সরবরাহ করা রিলে ঠিকানার সাথে এনক্যাপসুলেটেড ডেটাগ্রাম বিনিময় করে। প্রতিটি এনক্যাপসুলেটেড বার্তা তার গন্তব্য চিহ্নিত করে। ক্লায়েন্ট বাস্তবায়নকে সেই ফ্রেমিং এবং নিয়ন্ত্রণ সংযোগের জীবনকাল পরিচালনা করতে হয়।
একটি সাধারণ UDP সকেট প্রক্সির TCP শোনার পোর্টে নির্দেশ করলে সেই ধাপগুলি এড়িয়ে যায়। আপনার অ্যাপ্লিকেশনের কাঁচা ডেটাগ্রাম সেই ঠিকানায় পাঠানো অ্যাসোসিয়েশনের বিকল্প নয়।
এমন একটি লাইব্রেরি বা অ্যাপ্লিকেশন বৈশিষ্ট্য বেছে নিন যা স্পষ্টভাবে SOCKS5 UDP রিলে সমর্থন করে, এবং সার্ভারও তা সমর্থন করে তা নিশ্চিত করুন। SOCKS সমর্থনের বিজ্ঞাপন দেওয়া লাইব্রেরি কেবল TCP CONNECT বাস্তবায়ন করতে পারে। প্রোটোকল স্পেসিফিকেশন কমান্ডগুলিকে আলাদা করে।
UDP রিলেরও একটি ব্যবহারযোগ্য পথ দরকার
প্রক্সিতে সফল TCP সংযোগ কেবল নিয়ন্ত্রণ পথ প্রতিষ্ঠা করে। ফায়ারওয়াল বা NAT আচরণ রিলেতে পাঠানো ডেটাগ্রামে এখনও হস্তক্ষেপ করতে পারে। অ্যাপ্লিকেশন গন্তব্য অফলাইন বলে সিদ্ধান্তে পৌঁছানোর আগে ফেরত দেওয়া রিলে এন্ডপয়েন্ট এবং যেকোনো রিলে ত্রুটি সংগ্রহ করুন।
পরিশেষে, SOCKS পরিবহন সমর্থন UDP-তে ডেলিভারি নিশ্চয়তা যোগ করে না। পথ পরিবর্তনের পরেও আপনার অ্যাপ্লিকেশনের নিজস্ব টাইমআউট, ক্ষতি পরিচালনা এবং বার্তার আকারের সীমাবদ্ধতা প্রযোজ্য থাকে।