PHP Socket 程式設計 簡單示例

2021-04-25 08:47:19 字數 4654 閱讀 3774

讓我們以乙個簡單的例子開始---乙個接收輸入字串,處理並返回這個字串到客戶端的tcp服務.下面是相應的**:

php **:

<?

// 設定一些基本的變數

$host 

= "192.168.1.99"

; $port 

= 1234

; // 設定超時時間

set_time_limit(0

); // 建立乙個socket

$socket 

= socket_create

(af_inet

, sock_stream, 0

) or die(

"could not create

socket/n"

); //繫結socket到埠

$result 

= socket_bind

($socket

, $host

, $port

) or die(

"could not bind to

socket/n"

); // 開始監聽鏈結

$result 

= socket_listen

($socket, 3

) or die(

"could not set up socket

listener/n"

); // accept incoming connections

// 另乙個socket來處理通訊

$spawn 

= socket_accept

($socket

) or die(

"could not accept incoming

connection/n"

); // 獲得客戶端的輸入

$input 

= socket_read

($spawn

, 1024

) or die(

"could not read input/n"

); // 清空輸入字串

$input 

= trim

($input

); //處理客戶端輸入並返回結果

$output 

= strrev

($input

) . 

"/n"

; socket_write

($spawn

, $output

, strlen 

($output

)) or die(

"could not write

output/n"

); // 關閉sockets

socket_close

($spawn

); socket_close

($socket

); ?>

下面是其每一步驟的詳細說明:

1.第一步是建立兩個變數來儲存socket執行的伺服器的ip位址和埠.你可以設定為你自己的伺服器和埠(這個埠可以是1到65535之間的數字),前提是這個埠未被使用.

php **:

<?

// 設定兩個變數

$host 

= "192.168.1.99"

; $port 

= 1234

; ?>

2.在伺服器端可以使用set_time_out()函式來確保php在等待客戶端連線時不會超時.

php **:

<?

// 超時時間

set_time_limit(0

); ?>

3.在前面的基礎上,現在該使用socket_creat()函式建立乙個socket了---這個函式返回乙個socket控制代碼,這個控制代碼將用在以後所有的函式中.

php **:

<?

// 建立socket

$socket 

= socket_create

(af_inet

, sock_stream, 0

) or die(

"could not create

socket/n"

); ?>

第乙個引數"af_inet"用來指定網域名稱;

第二個引數"sock_strem"告訴函式將建立乙個什麼型別的socket(在這個例子中是tcp型別)

因此,如果你想建立乙個udp socket的話,你可以使用如下的**:

php **:

<?

// 建立 socket

$socket 

= socket_create

(af_inet

, sock_dgram, 0

) or die(

"could not create

socket/n"

); ?>

php **:

<?

// 繫結 socket to 指定位址和埠

$result 

= socket_bind

($socket

, $host

, $port

) or die(

"could not bind to

socket/n"

); ?>

5.當socket被建立好並繫結到乙個埠後,就可以開始監聽外部的連線了.php允許你由socket_listen()函式來開始乙個監聽,同時你可以指定乙個數字(在這個例子中就是第二個引數:3)

php **:

<?

// 開始監聽連線

$result 

= socket_listen

($socket, 3

) or die(

"could not set up socket

listener/n"

); ?>

6.到現在,你的伺服器除了等待來自客戶端的連線請求外基本上什麼也沒有做.一旦乙個客戶端的連線被收到,socket_assept()函式便開始起作用了,它接收連線請求並呼叫另乙個子socket來處理客戶端--伺服器間的資訊.

php **:

<?

//接受請求鏈結

// 呼叫子socket 處理資訊

$spawn 

= socket_accept

($socket

) or die(

"could not accept incoming

connection/n"

); ?>

這個子socket現在就可以被隨後的客戶端--伺服器通訊所用了.

7.當乙個連線被建立後,伺服器就會等待客戶端傳送一些輸入資訊,這寫資訊可以由socket_read()函式來獲得,並把它賦值給php的$input變數.

php **:

<?

// 讀取客戶端輸入

$input 

= socket_read

($spawn

, 1024

) or die(

"could not read input/n"

); ?>

socker_read的第而箇引數用以指定讀入的位元組數,你可以通過它來限制從客戶端獲取資料的大小.

注意:socket_read函式會一直讀取殼戶端資料,直到遇見/n,/t或者/0字元.php指令碼把這寫字元看做是輸入的結束符.

8.現在伺服器必須處理這些由客戶端發來是資料(在這個例子中的處理僅僅包含資料的輸入和回傳到客戶端).這部分可以由socket_write()函式來完成(使得由通訊socket發回乙個資料流到客戶端成為可能)

php **:

<?

// 處理客戶端輸入並返回資料

$output 

= strrev

($input

) . 

"/n"

; socket_write

($spawn

, $output

, strlen 

($output

)) or die(

"could not write

output/n"

); ?>

9.一旦輸出被返回到客戶端,父/子socket都應通過socket_close()函式來終止

php **:

<?

// 關閉 sockets

socket_close

($spawn

); socket_close

($socket

); ?>

PHP SOCKET程式設計!

server.php php 確保在連線客戶端時不會超時 set time limit 0 設定ip和埠號 address 伺服器自己的ip port 埠號 建立乙個socket if sock socket create af inet sock stream sol tcp 0 繫結到socke...

php socket程式設計通訊

我們程式設計就是按這個順序的,請看下面的圖 建立乙個連線 socket socket create af inet,sock stream,sol tcp or die cannot create socket n 繫結socket到埠 result socket bind socket,host,...

PHP Socket 程式設計詳解

最近在做的專案有一項需要耗時任務在後台執行的功能,雖然php並不是非常適合做常駐後台的守護程序,但是由於專案主要 都是基於php實現,如 果執行在後台的守護程序改換別的語言會非常不方便。所以不可避免會涉及到web端和daemon部分的通訊,socket是乙個不錯的方式。socket的英文原義是 孔 ...