socket命令


1、創建

resource socket_create (int $domain ,int $type ,int $protocol )

創建並返回套接字資源,也稱為通信端點。典型的網絡連接由2個套接字組成,一個執行客戶端角色,另一個執行服務器的角色。


 

參數

domain

domain參數指定套接字使用的協議族。

可用的地址/協議族
描述
AF_INET 基於IPv4 Internet協議。TCP和UDP是該協議族的常見協議。
AF_INET6 IPv6基於Internet的協議。TCP和UDP是該協議族的常見協議。
AF_UNIX 本地通訊協議族 高效率和低開銷使它成為一種很好的IPC(進程間通信)形式。

type

type參數選擇套接字使用的通信類型。

可用套接字類型
類型 描述
SOCK_STREAM 提供順序,可靠,全雙工,基於連接的字節流。可以支持帶外數據傳輸機制。TCP協議基於此套接字類型。
SOCK_DGRAM 支持數據報(無連接,固定最大長度不可靠的消息)。UDP協議基於此套接字類型。
SOCK_SEQPACKET 為固定最大長度的數據報提供順序可靠的基於雙向連接的數據傳輸路徑; 每個讀取呼叫都需要消費者讀取整個數據包。
SOCK_RAW 提供原始網絡協議訪問。這種特殊類型的套接字可以用來手動構造任何類型的協議。此套接字類型的常見用途是執行ICMP請求(如ping)。
SOCK_RDM 提供不保證訂購的可靠數據報層。這很可能在您的操作系統上未實現。

protocol

protocol參數設置domain在返回的套接字上進行通信時指定的特定協議。可以使用getprotobyname()通過名稱檢索正確的值。如果希望的協議是TCP,或者UDP是相應的常量 SOL_TCPSOL_UDP 也可以使用。

常用協議
名稱 描述
ICMP 互聯網控制消息協議主要由網關和主機用來報告數據報通信中的錯誤。“ping”命令(在大多數現代操作系統中存在)是ICMP的示例應用程序。
UDP 用戶數據報協議是具有固定記錄長度的無連接,不可靠的協議。由於這些方面,UDP需要最小量的協議開銷。
TCP 傳輸控制協議是一種可靠的基於連接的面向流的全雙工協議。TCP保證按照發送順序接收所有數據包。如果任何數據包在通信過程中丟失,TCP將自動重傳數據包,直到目標主機確認該數據包。由於可靠性和性能原因,TCP實現本身決定了底層數據報通信層的適當八位字節邊界。因此,TCP應用程序必須允許部分記錄傳輸的可能性。

 


返回值

socket_create()在成功或FALSE錯誤時返回套接字資源。實際的錯誤代碼可以通過調用 socket_last_error()來檢索 。此錯誤代碼可能會傳遞給 socket_strerror()以獲取錯誤的文本說明。


例子 

$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

2、綁定

描述

bool socket_bind (resource $socketstring $address [,int $port= 0 ])

將名稱給定義address到由socket描述的套接字socket。這必須在使用socket_connect() 或socket_listen()建立連接之前完成。

參數

socket

使用socket_create()創建的有效套接字資源。

address

如果套接字是AF_INET家族,則 address是以虛線符號表示的IP(例如127.0.0.1)。

如果套接字是AF_UNIX系列,則 address是Unix域套接字的路徑(例如/tmp/my.sock)。

port (可選的)

port參數僅在綁定AF_INET套接字時使用,並指定要在其上偵聽連接的端口。


返回值

返回TRUE成功或FALSE失敗。

可以使用socket_last_error()檢索錯誤代碼。該代碼可能會傳遞給socket_strerror()以獲取錯誤的文本解釋。


例子

$host = '127.0.0.1';//ip地址
$port = '2204';//端口號
$backlog = 10;//最大連接數
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket, $backlog);

3、連接

描述

bool socket_connect (resource $socket ,string $address [,int $port= 0 ])

參數

socket

address

address參數是在點分表示法表示的IPv4地址(例如127.0.0.1)如果 socketAF_INET,有效的IPv6地址(例如:: 1)如果啟用IPv6支持和socketAF_INET6 或Unix域套接字的路徑名,如果套接字家庭是 AF_UNIX

port

port參數僅用於連接到一個AF_INET或一個 AF_INET6套接字時必須使用,並指定要在其上進行連接的遠程主機上的端口。


返回值

返回TRUE成功或FALSE失敗。可以使用socket_last_error()檢索錯誤代碼 。該代碼可能會傳遞給 socket_strerror()以獲取錯誤的文本解釋。

例子


$socket = socket_create(AF_INET,SOCK_DGRAM,SOL_UDP);
socket_connect($socket,'127.0.0.1',2204);

 4、監聽

說明

bool socket_listen ( resource $socket [, int $backlog = 0 ] )

socket_create( ) 函數創建一個套接字,然后通過 socket_bing( ) 函數進行綁定剛創建的套接字,通過此函數進行監聽!

socket_listen( ) 僅限用於 SOCK_STREAM(流式套接字)或者 SOCK_SEQPACKET(通常用於非網絡協議,例如X.25,或是廣播協議AX.25);


參數

scoket

通過scoket_create( ) 函數創建的 socket;

backlog

最多積壓的傳入連接將排隊等待處理。如果一個連接請求到達隊列的完整的客戶端可能會收到一個錯誤的econnrefused,指示或如果底層協議支持重傳請求可能被忽視,重試可能會成功。

注:
傳遞給待定參數的最大數量取決於底層平台。在Linux上,它默默地截斷somaxconn。在Win32中,如果通過somaxconn,基礎服務程序 socket 將積壓到最大化的合理值。在這個平台上沒有標准的規定來查找實際的積壓值。


返回值

成功時返回 TRUE, 或者在失敗時返回 FALSE。錯誤代碼可以檢索與socket_last_error()。這個代碼可以通過socket_strerror()得到錯誤的文本解釋。

 

 

 

待補充。。。


免責聲明!

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



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