PHP stream_socket_server


stream_socket_server - 創建一個Internet或Unix域服務器套接字

描述

資源 stream_socket_server(字符串local_socket [摘要和錯誤號[,串errstr [摘要標志[,資源環境]]]])

創建指定流或數據報套接字 local_socket。:該類型創建由運輸決定的插座的使用標准URL格式指定 運輸://目標。對於Internet域套接字(AF_INET),如TCP和UDP,該目標的一部分remote_socket參數應該由一個主機名或IP地址,后跟一個冒號和一個端口號。對於Unix域套接字,該目標部分應指向文件系統上的套接字文件。 標志是可被設置為套接字創建標記的任何組合的位掩碼字段。標志的默認值為 STREAM_SERVER_BIND | STREAM_SERVER_LISTEN

注: 對於UDP套接字,必須使用STREAM_SERVER_BIND作為標志參數。

此功能僅創建一個套接字,開始接受連接使用stream_socket_accept() 

如果調用失敗,它將返回FALSE,如果可選 的errnoerrstr 參數是目前他們將被設置為表明發生在系統級實際的系統級錯誤 插座() bind()的,和 聽()調用。如果返回值 錯誤號0和該函數返回FALSE,那就是前發生的錯誤指示bind()的調用。這很可能是由於在初始化插座的問題。請注意,錯誤號和 errstr參數將始終通過引用傳遞。

根據環境的不同,Unix域套接字可能無法使用。可用傳輸列表可以使用檢索 stream_get_transports() 。見 附錄Ñ為bulitin傳輸的列表。

例子 1. Using TCP server sockets

 1 <?php
 2 $socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
 3 if (!$socket) {
 4   echo "$errstr ($errno)<br />\n";
 5 } else {
 6   while ($conn = stream_socket_accept($socket)) {
 7     fwrite($conn, 'The local time is ' . date('n/j/Y g:i a') . "\n");
 8     fclose($conn);
 9   }
10   fclose($socket);
11 }
12 ?>

下面的例子演示了如何作為,可以如圖為例對時間響應查詢的時間服務器在stream_socket_client() 

注: 大多數系統需要root權限以低於1024的端口上創建服務器套接字。

例子 2.

 1 <?php
 2 $socket = stream_socket_server("udp://127.0.0.1:1113", $errno, $errstr, STREAM_SERVER_BIND);
 3 if (!$socket) {
 4     die("$errstr ($errno)");
 5 }
 6 
 7 do {
 8     $pkt = stream_socket_recvfrom($socket, 1, 0, $peer);
 9     echo "$peer\n";
10     stream_socket_sendto($socket, date("D M j H:i:s Y\r\n"), 0, $peer);
11 } while ($pkt !== false);
12 
13 ?>

注: 當指定數字的 IPv6 地址(例如 fe80::1)時必須將 IP 地址放在方括號內。例如 tcp://[fe80::1]:80

也參見在stream_socket_client() , stream_set_blocking() , stream_set_timeout() , 與fgets() , fgetss() fwrite()將, FCLOSE() 的feof() ,和卷曲延伸

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM