बाइंड सॉकेट
समारोह बाँध एक विशेष पते और बंदरगाह के लिए एक सॉकेट बाध्य करने के लिए इस्तेमाल किया जा सकता। कनेक्ट फ़ंक्शन के समान इसे एक sockaddr_in संरचना की आवश्यकता है।
त्वरित उदाहरण
if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
echo "Socket created \n";
// Bind the source address
if(!socket_bind($sock, "127.0.0.1" , 5000))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not bind socket : [$errorcode] $errormsg \n");
}
echo "Socket bind OK \n";
अब जब कि बाँध किया जाता है, सॉकेट बनाने के लिए अपने समय के कनेक्शन के लिए सुनो। हम किसी विशेष आईपी पते और एक निश्चित पोर्ट नंबर पर सॉकेट बांधते हैं। ऐसा करके हम यह सुनिश्चित करते हैं कि इस पोर्ट नंबर की ओर निर्देशित सभी आने वाले डेटा इस एप्लिकेशन द्वारा प्राप्त किए जाएंगे।
इससे यह स्पष्ट हो जाता है कि आपके पास एक ही बंदरगाह से 2 सॉकेट बाध्य नहीं हो सकते हैं। इस नियम के अपवाद हैं लेकिन हम इसे किसी अन्य लेख में देखेंगे।
कनेक्शन
एक बंदरगाह अगली बात हम क्या करने की जरूरत कनेक्शन के लिए सुन रहा है करने के लिए एक सॉकेट बंधन के बाद के लिए सुनो। इसके लिए हमें सॉकेट को सुनने के मोड में रखना होगा। फंक्शन socket_listen
सॉकेट को सुनने मोड में रखने के लिए प्रयोग किया जाता है। बांधने के बाद बस निम्नलिखित पंक्ति जोड़ें।
//listen
socket_listen ($sock , 10)
फ़ंक्शन socket_listen का दूसरा पैरामीटर बैकलॉग कहा जाता है। यह आने वाले कनेक्शनों की संख्या को नियंत्रित करता है जिन्हें "प्रतीक्षा" रखा जाता है यदि प्रोग्राम पहले से व्यस्त है। तो 10 निर्दिष्ट करके, इसका मतलब है कि यदि 10 कनेक्शन पहले ही संसाधित होने की प्रतीक्षा कर रहे हैं, तो 11 वें कनेक्शन अनुरोध को खारिज कर दिया जाएगा। Socket_accept की जांच के बाद यह अधिक स्पष्ट होगा।
अब नए कनेक्शन को स्वीकार करने का मुख्य हिस्सा आता है।
स्वीकार कनेक्शन
समारोह socket_accept
इस के लिए प्रयोग किया जाता है।
if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
echo "Socket created \n";
// Bind the source address
if(!socket_bind($sock, "127.0.0.1" , 5000))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not bind socket : [$errorcode] $errormsg \n");
}
echo "Socket bind OK \n";
if(!socket_listen ($sock , 10))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not listen on socket : [$errorcode] $errormsg \n");
}
echo "Socket listen OK \n";
echo "Waiting for incoming connections... \n";
//Accept incoming connection - This is a blocking call
$client = socket_accept($sock);
//display information about the client who is connected
if(socket_getpeername($client , $address , $port))
{
echo "Client $address : $port is now connected to us.";
}
socket_close($client);
socket_close($sock);
आउटपुट
कार्यक्रम चलाएं। यह $ php /var/www/server.php सॉकेट बनाया सॉकेट ठीक सॉकेट सुनने ठीक इनकमिंग कनेक्शन के लिए प्रतीक्षा कर बाँध ...
तो अब इस कार्यक्रम के बंदरगाह 5000 पर इनकमिंग कनेक्शन के लिए प्रतीक्षा कर रहा है दिखाना चाहिए। इस कार्यक्रम को बंद न करें, इसे चलते रहें। अब ग्राहक इस पोर्ट पर उससे जुड़ सकता है। हम परीक्षण के लिए टेलनेट क्लाइंट का उपयोग करेंगे। टर्मिनल खोलें और यह तुरंत $ टेलनेट स्थानीय होस्ट 5000 कोशिश कर रहा 127.0.0.1 ... स्थानीय होस्ट से कनेक्ट किया गया दिखाएगा टाइप $ टेलनेट स्थानीय होस्ट 5000
। एस्केप कैरेक्टर '^]' है। कनेक्शन विदेशी मेजबान द्वारा बंद कर दिया गया।
और सर्वर आउटपुट क्लाइंट 127.0.0.1: 36689 अब हमारे साथ कनेक्ट होगा।
तो हम देख सकते हैं कि क्लाइंट सर्वर से जुड़ा हुआ है। उपर्युक्त चरणों का प्रयास करें जब तक कि आप इसे सही काम नहीं कर लेते।
नोट
socket_getpeername समारोह ग्राहक जो एक विशेष सॉकेट के माध्यम से सर्वर से कनेक्ट है के बारे में जानकारी प्राप्त करने के लिए प्रयोग किया जाता है।
कैसे यह मेरे सोप कॉल की लाइव सामग्री प्राप्त करने में मदद मिलेगी? –
इस पर बेहतर स्पष्टीकरण के लिए आप PHP संदर्भ का पालन कर सकते हैं। http://php.net/manual/en/function.http-get-request-body.php –
@NavnishBardwaj आपके द्वारा पोस्ट किया गया कोड "टाइमआउट" और/या में "एसओएपी रिपॉन्स स्ट्रीमिंग" से कैसे संबंधित है "मध्यान्तर"? जो मैं अब देखता हूं वह समस्या का समाधान नहीं करता है और केवल प्रश्न का उत्तर नहीं है। कृपया बताएं कि समस्या के लिए आपका कोड उपयोगी क्यों है। –