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_LISTENphp

注: 對於UDP套接字,必須使用STREAM_SERVER_BIND做爲標誌參數。html

此功能僅建立一個套接字,開始接受鏈接使用stream_socket_accept() 服務器

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

根據環境的不一樣,Unix域套接字可能沒法使用。可用傳輸列表能夠使用檢索 stream_get_transports() 。見 附錄Ñ爲bulitin傳輸的列表。socket

例子 1. Using TCP server socketstcp

 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的端口上建立服務器套接字。url

例子 2.spa

 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]:80code

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

相關文章
相關標籤/搜索