php socket通訊的基礎知識php socket create

來源:互聯網
上載者:User
轉自:http://www.byz5.com/html/234/6/6521/1.htm

迷人而又讓人容易懵懂的通訊端(Sockets)。Sockets在PHP中是沒有充實哄騙的功能。今天你將瞥見產生1個能使用用戶端串連的辦事器,並在 用戶端使用socket進行串連,辦事器端將具體的處置懲罰資訊發送給用戶端。

當你瞥見完備的socket過程,那麼你將會在往後的程式研發中使用它。這個辦事器是1個能讓你串連的HTTP辦事器,用戶端是1個Web瀏覽器,這是一 個單一的 用戶端/辦事器 的關係。

Socket 基礎

PHP使用Berkley的socket庫來建立它的串連。你可以懂得socket只不過是1個數值布局。你使用這個socket數值布局去開始1個用戶端和辦事器之間的會話。這個辦事器是一直在監聽準備產生1個新的會話。當1個用戶端串連辦事器,它就開啟辦事器進行中監聽的1個連接埠進行會話。這時,辦事器端接受用戶端的串連請求,那麼就進行一次迴圈。此刻這個用戶端就可以興許發送資訊到辦事器,辦事器也能發送資訊給用戶端。

產生1個Socket,你需要3個變數:1個協議、1個socket類型和1個福士協議類型 。產生1個socket有三種協議供選擇,接續看底下的內容來 擷取具體的協議內容。

定義1個福士的協議類型是進行串連1個必不可少的元素。底下的表咱們看看有那些福士的協議類型。

表一:協議

名兒/常量描述

AF_INET這是大多數用來產生socket的協議,使用TCP或UDP來傳輸 ,用在IPv4的地址

AF_INET6與上面類似,不過是來用在IPv6的地址

AF_UNIX本地協議,使用在Unix和Linux 系 統上,它很少使用,一般都是當用戶端和辦事器在同一台及其上的時辰使用

表二:Socket類型

名兒/常量描述

SOCK_STREAM這個協議是按照順序的、可靠的、數值完備的基於位元組流的串連 。這是1個使用最多的socket類型,這個socket是使用 TCP 來進行傳輸。

SOCK_DGRAM這個協議是不需連線的、固定長度的傳輸調用。該協議是不可靠的,使用UDP 來進行它的串連。

SOCK_SEQPACKET這個協議是雙線路的、可靠的串連,發送固定長度的數值包進行傳輸。必須把這個包完備的接受才氣進行讀取。

SOCK_RAW這個socket類型提供單一的收集訪問,這個socket類型使用ICMP福士協議。(ping、traceroute使用該協 議)

SOCK_RDM這個類型是很少使用的,在大部分的作業系統上沒有實現,它是提供給數值鏈路層使用,不保證數值包的順序

表三:福士協議

名兒/常量描述

ICMP互連網控制訊息協議,首要使用在網關和主機上,用來檢查收集狀態和報告錯誤資訊

UDP 使用者數值報文協議,它是1個無串連,不可靠的傳輸協議

TCP 傳輸控制通訊協定,這是1個使用最多的可靠的福士協議,它能保證數值包可以興許到達接受者那兒,如果在傳輸過程中發生錯誤,那麼它將重新發送出錯數值包。

此刻你懂得了產生1個socket的3個元素,那麼咱們就在php中使用socket_create()函數來產生1個socket。這個 socket_create()函數需要3個參數:1個協議、1個socket類型、1個福士協議。socket_create()函數運行成功歸回1個 包含socket的資源類型,如果沒有成功則歸回false。

Resourece socket_create(int protocol, int socketType, int commonProtocol);

Socket函數

函數名描述

socket_accept()接受1個Socket串連

socket_bind()把socket綁定在1個IP地址和連接埠上

socket_clear_error()清除socket的錯誤或者最後的錯誤碼

socket_關上()關閉1個socket資源

socket_connect()開始1個socket串連

socket_create_listen()在指定連接埠開啟1個socket監聽

socket_create_pair()產生一對沒有區另外socket到1個數組裡

socket_create()產生1個socket,至關於產生1個socket的數值布局

socket_get_option()擷取socket選項

socket_getpeername()擷取長途類似主機的ip地址

socket_getsockname()擷取本地socket的ip地址

socket_iovec_add()添加1個新的向量到1個分離/彙總的數組

socket_iovec_alloc()這個函數建立1個可以興許發送接收讀寫的iovec數值布局

socket_iovec_delete()刪除1個已指派的iovec

socket_iovec_fetch()歸回指定的iovec資源的數值

socket_iovec_free()釋放1個iovec資源

socket_iovec_set()配備布置iovec的數值新值

socket_last_error()擷取時下socket的最後錯誤碼

socket_listen()監聽由指定socket的所有串連

socket_read()讀取指定長度的數值

socket_readv()讀取從分離/彙總數組過來的數值

socket_recv()從socket裡結束數值到緩衝

socket_recvfrom()接受數值從指定的socket,如果沒有指定則預設時下socket

socket_recvmsg()從iovec裡接受訊息

socket_select()多路選擇

socket_send()這個函數發送數值到已串連的socket

socket_sendmsg()發送訊息到socket

socket_sendto()發送訊息到指定地址的socket

socket_set_block()在socket裡配備布置為塊標準樣式

socket_set_nonblock()socket裡配備布置為非塊標準樣式

socket_set_option()配備布置socket選項

socket_shutdown()這個函數許可你關閉讀、寫、或者指定的socket

socket_strerror()歸回指定錯誤號碼的具體錯誤

socket_write()寫數值到socket緩衝

socket_writev()寫數值到分離/彙總數組

以上所有的函數都是PHP中關於socket的,使用這些函數,你必須把你的socket開啟,如果你沒有開啟,請編輯你的php.ini檔案,去失底下這行前面的注釋:

extension=php_sockets.dll

如果你沒有辦法去失注釋,那麼請使用底下的代碼來載入擴充庫: if(!extension_loaded(‘sockets’)) { if(strtoupper(substr(PHP_OS, 3)) == “WIN”) { dl(‘php_sockets.dll’); } else { dl(‘sockets.so’); } }

*如果你不懂得你的socket是不是開啟,那麼你可以使用phpinfo()函數來確定socket是不是開啟。你經由過程查看phpinfo資訊瞭解 socket是不是開啟。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.