php的socket通訊(二)

2022-02-05 03:32:05 字數 3821 閱讀 7564

案例一:**詳解

// 設定一些基本的變數

$host = "192.168.1.99";

$port = 1234;

// 設定超時時間

set_time_limit(0);

// 建立乙個socket

$socket = socket_create(af_inet, sock_stream, 0) or die("could not createsocket\n");

//繫結socket到埠

$result = socket_bind($socket, $host, $port) or die("could not bind tosocket\n");

// 開始監聽鏈結

$result = socket_listen($socket, 3) or die("could not set up socketlistener\n");

// accept incoming connections

// 另乙個socket來處理通訊

$spawn = socket_accept($socket) or die("could not accept incomingconnection\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之間的數字),前提是這個埠未被使用.

[copy to clipboard]

php code:

// 設定兩個變數

$host = "192.168.1.99";

$port = 1234;

2.在伺服器端可以使用set_time_out()

函式來確保php在等待客戶端連線時不會超時.

[copy to clipboard]

php code:

// 超時時間

set_time_limit(0);

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

[copy to clipboard]

php code:

// 建立socket

$socket = socket_create(af_inet, sock_stream, 0) or die("could not create

socket\n");

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

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

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

[copy to clipboard]

php code:

// 建立 socket

$socket = socket_create(af_inet, sock_dgram, 0) or die("could not create

socket\n");

[copy to clipboard]

php code:

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

$result = socket_bind($socket, $host, $port) or die("could not bind to

socket\n");

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

[copy to clipboard]

php code:

// 開始監聽連線

$result = socket_listen($socket, 3) or die("could not set up socket

listener\n");

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

[copy to clipboard]

php code:

//接受請求鏈結

// 呼叫子socket 處理資訊

$spawn = socket_accept($socket) or die("could not accept incoming

connection\n");

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

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

[copy to clipboard]

php code:

// 讀取客戶端輸入

$input = socket_read($spawn, 1024) or die("could not read input\n");

?>

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

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

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

[copy to clipboard]

php code:

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

$output = strrev($input) . "\n";

socket_write($spawn, $output, strlen ($output)) or die("could not write

output\n");

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

[copy to clipboard]

php code:

// 關閉 sockets

socket_close($spawn);

socket_close($socket);

php簡單實現socket通訊

socket通訊的原理在這裡就不說了,它的用途還是比較廣泛的,我們可以使用 socket 來做乙個 api介面出來,也可以使用 socket 來實現兩個程式之間的通訊,我們來研究一下在 php開發 中如何實現socket通訊。由於socket服務端的 要監聽埠,等待接收請求,所以 php在做 soc...

socket網路通訊《二》

socket網路通訊 本文注意基於socket來分析tcp連線建立過程。先回顧一下tcp連線建立過程 主機a執行的是tcp客戶端程式,主機b執行的是tcp伺服器程式,最初兩端tcp程序處於closed態,a主動開啟連線,對應客戶端connect函式發起連線,b被動接受連線,對應於伺服器listen函...

php 例項說明 socket通訊機制

一.socket是什麼 什麼是socket 所謂socket通常也稱作 套接字 用於描述ip位址和埠,是乙個通訊鏈的控制代碼。應用程式通常通過 套接字 向網路發出請求或者應答網路請求。說白了就是一種通訊機制。它類似於銀行,電信啊這些部分的 客服部門。你打 的時候,那邊會分配置乙個人回答你的問題,客服...