日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php运行socket服务器,PHP_php简单socket服务器客户端代码实例,本篇文章分享一个简单的socket - phpStudy...

發(fā)布時間:2024/10/12 php 85 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php运行socket服务器,PHP_php简单socket服务器客户端代码实例,本篇文章分享一个简单的socket - phpStudy... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

php簡單socket服務器客戶端代碼實例

本篇文章分享一個簡單的socket示例,用php。實現一個接收輸入字符串,處理并返回這個字符串到客戶端的TCP服務。

產生一個 socket 服務端

/*文件名:socket_server.php*/

// 設置一些基本的變量

$host="127.0.0.1";//Socket運行的服務器的IP地址

$port=1234;//Socket運行的服務器的端口,端口取值為1到65535之間的數字,前提是這個端口未被使用

// 設置超時時間,這里設置為永不超時,確保PHP在等待客戶端連接時不會超時。

set_time_limit(0);

// 創(chuàng)建一個Socket,返回一個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");

// 開始監(jiān)聽外部連接

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

/******到這里,服務器除了等待來自客戶端的連接請求外基本上什么也不做******/

// 另一個Socket來處理服務端與客戶端的通信

$spawn=socket_accept($socket) or die("Could not accept incoming connection\n");

// 讀取客戶端的輸入,當一個連接被建立后,服務器就會等待客戶端發(fā)送一些輸入信息,這些信息可以由socket_read()函數來獲得,并把它賦值給PHP的$input變量

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

//socker_read的第二個參數用以指定讀入的字節(jié)數,你可以通過它來限制從客戶端獲取數據的大小

// 下面這不就不解釋了,不知道的自己面壁去

$input=trim($input);

//處理客戶端輸入并返回結果,當客戶端發(fā)來數據信息后,信息輸出就要靠socket_write()函數來完成

$output=strrev($input) ."\n";//反轉字符串,這里僅僅是為了更好的區(qū)分兩條信息

socket_write($spawn,$output,strlen($output)) or die("Could not write output\n");

// 關閉sockets

socket_close($spawn);

socket_close($socket);

提示:你應該使用你的命令提示符來運行上面這段代碼。理由是因為這里將產生一個服務器,而不是一個Web頁面。如果你嘗試使用Web瀏覽器來運行這個腳本,那么很有可能它會超過30秒的限時。你可以使用下面的代碼來設置一個無限的運行時間,但是還是建議使用命令提示符來運行。

set_time_limit(0);

在你的命令提示符中對這個腳本進行簡單測試:

Php.exe socket_server.php

如果你沒有在系統的環(huán)境變量中設置php解釋器的路徑,那么你將需要給php.exe指定詳細的路徑。當你運行這個服務器端的時候,你能夠通過遠程登陸(telnet)的方式連接到端口1337來測試這個服務器。

上面的服務器端有三個問題:

1. 它不能接受多個連接。

2. 它只完成唯一的一個命令。

3. 你不能通過Web瀏覽器連接這個服務器。

這個第一個問題比較容易解決,你可以使用一個應用程序去每次都連接到服務器。但是后面的問題是你需要使用一個Web頁面去連接這個服務器,這個比較困難。你可以讓你的服務器接受連接,然后些數據到客戶端(如果它一定要寫的話),關閉連接并且等待下一個連接。

在上一個代碼的基礎上再改進,產生下面的代碼來做你的新服務器端:

$commonProtocol = getprotobyname("tcp");

$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);

socket_bind($socket, 'localhost', 1337); //socket_bind() 把socket綁定在一個IP地址和端口上

socket_listen($socket);

$buffer = "NO DATA";

while(true) {

// Accept any connections coming in on this socket

$connection = socket_accept($socket);//socket_accept() 接受一個Socket連接

printf("Socket connected\r\n");

// Check to see if there is anything in the buffer

if($buffer != ""){

printf("Something is in the buffer...sending data...\r\n");

socket_write($connection, $buffer . "\r\n"); //socket_write() 寫數據到socket緩存

printf("Wrote to socket\r\n");

}else {

printf("No Data in the buffer\r\n");

}

// Get the input

while($data = socket_read($connection, 1024, PHP_NORMAL_READ)){//socket_read() 讀取指定長度的數據

$buffer = $data;

socket_write($connection, "Information Received\r\n");

printf("Buffer: " . $buffer . "\r\n");

}

socket_close($connection); //socket_close() 關閉一個socket資源

printf("Closed the socket\r\n\r\n");

}

這個服務器端要做什么呢?它初始化一個socket并且打開一個緩存收發(fā)數據。它等待連接,一旦產生一個連接,它將打印“Socket connected”在服務器端的屏幕上。這個服務器檢查緩沖區(qū),如果緩沖區(qū)里有數據,它將把數據發(fā)送到連接過來的計算機。然后它發(fā)送這個數據的接受信息,一旦它接受了信息,就把信息保存到數據里,并且讓連接的計算機知道這些信息,最后關閉連接。當連接關閉后,服務器又開始處理下一次連接。

產生一個 socket 客戶端

處理第二個問題是很容易的。你需要產生一個php頁連接一個socket,發(fā)送一些數據進它的緩存并處理它。然后你有個處理后的數據在還頓,你能夠發(fā)送你的數據到服務器。在另外一臺客戶端連接,它將處理那些數據。

下面的例子示范了使用socket:

// Create the socket and connect

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

$connection = socket_connect($socket,'localhost', 1337);

while($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)) {

if($buffer == "NO DATA") {

echo("

NO DATA

");

break;

}else{

// Do something with the data in the buffer

echo("

Buffer Data: " . $buffer . "

");

}

}

echo("

Writing to Socket

");

// Write some test data to our socket

if(!socket_write($socket, "SOME DATA\r\n")){

echo("

Write failed

");

}

// Read any response from the socket phpernote.com

while($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)){

echo("

Data sent was: SOME DATA
Response was:" . $buffer . "

");

}

echo("

Done Reading from Socket

");

這個例子的代碼演示了客戶端連接到服務器??蛻舳俗x取數據。如果這是第一時間到達這個循環(huán)的首次連接,這個服務器將發(fā)送“NO DATA”返回給客戶端。如果情況發(fā)生了,這個客戶端在連接之上??蛻舳税l(fā)送它的數據到服務器,數據發(fā)送給服務器,客戶端等待響應。一旦接受到響應,那么它將把響應寫到屏幕上。

相關閱讀:

安全快速修改Mysql數據庫名的5種方法

android編程實現添加文本內容到sqlite表中的方法

js實現的全國省市二級聯動下拉選擇菜單完整實例

安全模式是什么意思?Win10安全模式有什么用途

JS實現的簡潔二級導航菜單雛形效果

JavaScript避免內存泄露及內存管理技巧

win10驅動自動更新關閉解決方法 如何阻止win10驅動自動更新

Mac系統播放器聲道選擇方法圖解

IE8中使用javascript動態(tài)加載CSS的解決方法

ASP.NET顯示農歷時間的方法

javascript實現添加附件功能的方法

CSS 的簡寫【新手必看】

C++設計模式之享元模式

C#控制臺程序中處理2個關閉事件的代碼實例

總結

以上是生活随笔為你收集整理的php运行socket服务器,PHP_php简单socket服务器客户端代码实例,本篇文章分享一个简单的socket - phpStudy...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。