PHP Professional এবং Zend Certified PHP Engineer (ZCPE ) Course এ সীমিত সংখ্যক আসন বাকি আছে। আগ্রহীদেরকে অতিসত্বর মাসুদ আলম স্যার এর সাথে যোগাযোগ করার জন্য অনুরোধ করা যাচ্ছে। স্যার এর মোবাইল নম্বর : ০১৭২২ ৮১ ৭৫ ৯১

Socket programming কি এবং PHP তে এটি কিভাবে কাজ করে?

Socket কি?

php socket programming

php socket programming

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

সকেট হল ইউনিক্স ও উইন্ডোজভিত্তিক অপারেটিং সিস্টেমগুলোর অন্যতম মূল অংশ। এর কারণেই সফটওয়্যার নির্মাতারা সহজে নেটওয়ার্ক নির্ভর প্রোগ্রাম তৈরী করতে পারছে। প্রতিটি প্রোগ্রামের জন্য আলাদা নেটওয়ার্ক সংযোগের পরিবর্তে ডেভেলপাররা শুধু সকেটকে যুক্ত করে প্রোগ্রাম তৈরি করছে। এই সকেট বিভিন্ন প্রোগ্রামকে নেটওয়ার্ক ব্যবহারের জন্য অপারেটিং সিস্টেমের বিল্ট-ইন কমান্ড ব্যবহারের সুযোগ করে দেয়। কারণ তারা একাধিক নেটওয়ার্ক প্রোটোকল যেমনঃ এইচটিটিপি(HTTP), এফটিপি(FTP), টেলনেট ইত্যাদি ব্যবহার করে থাকে। একই সাথে একাধিক সকেট ওপেন হতে পারে।

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

Socket Programming এর জন্য কি ধরনের socket ব্যবহার করা হয়?

Socket Programming এর জন্য দুই ধরনের socket ব্যবহার করা হয়:

    • TCP

TCP হচ্ছে কানেকশন ওরিয়েন্টেড প্রোটকল । অর্থাৎ ডাটা ট্রান্সফার এর জন্য আগে একে অপরের সাথে সাথে কানেক্ট হয়ে নিবে এবং যতক্ষণ কানেক্টেড থাকবে ততক্ষণ স্ট্রিমের মাধ্যমে ডাটা ট্রান্সফার করবে ।

    • UDP

UDP হচ্ছে কানেকশন লেস প্রোটকল । মানে ডাটা ট্রান্সফার এর জন্য আগে থেকেই কানেক্টেড হয়ে থাকতে হয় না ।ডাটা ট্রান্সফার এর সময় কানেক্ট হয়ে ডাটা ট্রান্সফার করে ।

দুইটা সিস্টেম একে ওপরের সাথে যোগাযোগের জন্য একটা হবে Client আর একটা হবে Host । Host wait করতে থাকে কোন Client তার সাথে Connect হওয়ার জন্য । এবং একবার কানেক্ট হলে একে ওপরের সাথে ডাটা ট্রান্সফার করতে পারবে ।

PHP Sockets

PHP Sockets

Socket Programming দিয়ে কিভাবে Socket Server তৈরী করবেন?

Socket Programming দিয়ে কিভাবে server এর সাথে কানেক্ট করা যায় তা ধাপে ধাপে দেখানো হলো :

ধাপ -১: port এবং host সেট

প্রথমে আমরা দুটি variable port এবং host সেট করব :

$host = "127.0.0.1";
$port = 80;
// No Timeout 
set_time_limit(0);

ধাপ ২: সকেট তৈরী

এবার আমরা সকেট তৈরী করব। আর এর জন্য আমরা socket_create() function ব্যবহার করব। আর socket_create() function এ তিনটি Parameter দিতে হবে। প্রথম Parameter টি হবে protocol family অর্থাৎ কোন ip ফ্যামিলি (ipv-4 নাকি ipv-6) দিয়ে socket তৈরী করবেন। দ্বিতীয় parameter এ দিতে হবে communication type . অর্থাৎ যোগাযোগের ধরণ। আর সর্বশেষ parameter টি হবে protocol অর্থাৎ tcp নাকি udp. আর এই প্রত্যেকটি parameter এর জন্য PHP তে built-in constant আছে , চলুন একটা Socket তৈরী করা যাক :

$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");

ধাপ ৩: পোর্ট এবং হোস্ট এর সাথে socket কে bind করা :

এখন আমরা আমাদের তৈরী সকেট রিসোর্স এর সাথে IP address এবং Port Number Bind করব। আর এর জন্য আপনাকে socket_bind() function টি ব্যবহার করতে হবে। এবং আপনার তৈরি socket, host এবং port কে যথাক্রমে parameter হিসেবে দিতে হবে।

$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");

ধাপ ৪: সকেট Listen করা :

socket_bind() function দিয়ে IP এবং পোর্ট সার্ভারের সাথে আবদ্ধ হওয়ার পর ক্লায়েন্টের সাথে সংযুক্ত হওয়ার জন্য অপেক্ষা করা হয়। তারপর পর্যন্ত Listen অপেক্ষা রাখে। আর এর জন্য আপনাকে socket_listen() function টি ব্যবহার করতে হবে। সকেট listen function এ আপনাকে দুটি parameter দিতে হবে , প্রথমটি সকেট কানেকশন এবং দ্বিতীয় পারমিটের হচ্ছে backlog দিতে হবে।

$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");

ধাপ ৫: Incoming Connection Accept

Incoming Connection গুলো accept করার জন্য আপনাকে socket_accept() function টি ব্যবহার করতে হবে। এই ফাংশন তৈরি সকেটের মধ্যে ইনকামিং সংযোগ রিকোয়েস্ট করে। ক্লায়েন্ট সকেট থেকে সংযোগ গ্রহণের পরে, এই ফাংশনটি অন্য সকেটের রিসোর্স প্রদান করে যা আসলে সংশ্লিষ্ট ক্লায়েন্ট সকেটের সাথে যোগাযোগের কাজ করে।

$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");

এখানে “$spawn” হল socket resource যা ক্লায়েন্ট সকেটের সাথে যোগাযোগের কাজ করে।

এতক্ষন, আমরা আমাদের সার্ভার সকেট তৈরি করেছি কিন্তু স্ক্রিপ্ট আসলে আসলে কিছুই করে না। এখন আমরা ক্লায়েন্ট সকেট থেকে বার্তা পড়ব এবং তারপর আবার প্রাপ্ত বার্তাটি ক্লায়েন্ট সকেটে ফেরত পাঠাতে পারব।

ধাপ ৬: ক্লায়েন্ট সকেট থেকে Message Read

socket এর message read করার জন্য আপনাকে socket_read() function টি ব্যবহার করতে হবে। এবং দুটি Parameter যথাক্রমে আপনার socket এবং length বলতে হবে।

$input = socket_read($spawn, 1024) or die("Could not read input\n");

ধাপ ৭: Message Reply

$output = "Hello, You send message: ".$input. "\n";

ধাপ ৮: ক্লায়েন্ট সকেটে Message Reply:

client socket এর message reply করার জন্য আপনাকে socket_write() function টি ব্যবহার করতে হবে। এবং তিনটি Parameter যথাক্রমে আপনার socket accept, Output এবং length বলতে হবে।

socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n"); 

Close the socket

socket_close($spawn);
socket_close($socket);

Socket Programming দিয়ে কিভাবে Client Socket তৈরী করবেন?

Socket Programming দিয়ে কিভাবে Client Socket তৈরী করা যায় তা ধাপে ধাপে দেখানো হলো :

Socket Client এর প্রথম দুটি ধাপ Socket Server এর মতোই।

ধাপ -১: port এবং host সেট

$host = "127.0.0.1";
$port = 80;
// No Timeout 
set_time_limit(0);

ধাপ ২: সকেট তৈরী

$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");

ধাপ ৩: সার্ভারের সাথে সংযোগ

সার্ভারের সাথে connect করতে হলে আপনাকে socket_connect() function টি ব্যবহার করতে হবে, এবং parameter হিসেবে যথাক্রমে socket, host এবং port দিতে হবে।

$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");

ধাপ ৪: সার্ভার সকেটে লেখা :

এই ধাপে, ক্লায়েন্ট সকেট ডেটা সার্ভার সকেটে পাঠানো হয়।

socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");

ধাপ ৫: সার্ভার থেকে Message পড়া

// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
echo "Reply From Server  :".$result;

Close the socket

socket_close($socket);

সব কোড একসাথে :

server.php

<?php
// set some variables
$host = "127.0.0.1";
$port = 80;
// don't timeout!
set_time_limit(0);
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
// start listening for connections
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");

// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
// read client input
$input = socket_read($spawn, 1024) or die("Could not read input\n");
// clean up input string
$input = trim($input);
echo "Client Message : ".$input;
// reverse client input and send back
$output = "Hello, You send message: ".$input. "\n";
socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");
// close sockets
socket_close($spawn);
socket_close($socket);

client.php

<?php
$host    = "127.0.0.1";
$port    = 80;
$message = "Hello Server, I'm From Bangladesh";

// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// connect to server
$result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");  
// send string to server
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
// get server response
$result = socket_read ($socket, 1024) or die("Could not read server response\n");
echo "Reply From Server  :".$result;
// close socket
socket_close($socket);

Output

Socket Client Output

Socket Client Output

Masud Alam
আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ৮ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। বিশেষ ভাবে বাংলাদেশের ১০০ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ৫২ জন ই আমার হাতে জেন্ড সার্টিফাইড হয়েছে। বর্তমানে TechBeeo Software Company তে সিইও হিসাবে আছি । পাশাপাশি w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -7 Engineering কোর্স করাই। আর w3programmers.com সাইট টি আমার।
3 comments on “Socket programming কি এবং PHP তে এটি কিভাবে কাজ করে?
  1. wow!!…very nice and important post this for us…..will u make more articles about of “PHP Socket Programming”…….actually I want to learn this programming but did not find proper way…any ways

    thanks a lot for ur awesome post

Leave a Reply

Your email address will not be published. Required fields are marked *