您好,登錄后才能下訂單哦!
這篇文章主要介紹了php能不能實現socket通信的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇php能不能實現socket通信文章都會有所收獲,下面我們一起來看看吧。
php能實現socket通信,其實現方法:1、在客戶端創建“socketsocket_create();”并向服務器請求連接“socket_connect();”;2、在服務端創建“socketsocket_create();”并綁定IP和端口號“socket_bind();”;3、通過“socket_wirte();socket_read”讀客戶端的消息或給客戶端寫消息即可。
目標:我希望通過套接字的TCP傳輸來搭建一個服務器,這個服務器的作用是:接受多個客戶端的連接并完成他們的相互通信。比如客戶端A,客戶端B同時連接到服務器S,客戶端A向服務器S發送消息,服務器S會將A的消息轉發給B,同理,B的消息也可以通過S被轉發到A。這樣就實現了客戶端A和客戶端B之間的相互通信。
本次我們只實現客戶端與服務器之間連接并通信,暫時沒有寫服務器的轉發功能。
TCP的三次握手可以確保服務器和客戶端之間可以正常通信。三次握手的過程:至于這個過程的解釋,可以點擊下面的鏈接來查看。
服務器需要有一個IP,TCP通信時,還需要提供一個端口號。
客服端需要有一個IP,TCP通信時,也需要提供一個端口號。
個人理解:IP就是地址,可以理解為一個房子,當你需要建立通信的時候,首先肯定得相互知道這個房子在哪里才可以吧,要不然我們得信息發送到哪里呢?
PORT端口,端口號可以理解為這個房子的一個門,我們需要指定一個門,將消息從這個門里面傳送進去或者從這個門接受消息。
客戶端:
創建socketsocket_create();
向服務器請求連接socket_connect();
給服務器發送消息/接受服務器消息socket_wirte(); / socket_read();
關閉socketsocket_close();
服務器:
創建socketsocket_create();
綁定IP和端口號socket_bind();
監聽IP和端口號(0.0.0.0表示任意IP)socket_listen();
阻塞等待客服端的連接socket_accept();
讀客戶端的消息/給客戶端寫消息socket_wirte(); / socket_read();
關閉socketsocket_close();
服務器創建socket,并綁定IP和PORT,然后進入監聽狀態等待客服端發起連接。
客戶端創建socket,對指定服務器IP和PORT進行連接。
服務器接受客服端發起的連接。
雙方可以互相發送數據
雙方關閉socket。
這就是一個簡要的通信過程,至于想要循環發送或者異常檢測就是一些細節方面的東西了。
安裝PHP。在這里我是直接安裝了XAMPP,這個軟件自行幫我安裝了PHP。如果是第一次使用php語言,可以直接百度安裝PHP,也可以安裝XAMPP。
系統環境配置。在運行程序的時候,我是通過cmd進行運行的,所以需要對系統環境變量進行配置。配置過程請參考:鏈接:PHP環境變量配置。
檢查php指令是否可以運行。完成1、2兩個步驟之后,運行cmd,并執行命令php -v
,運行完成之后會顯示PHP的版本號。
新建一個文件夾socket,在該文件夾下新建文本文檔并改名為client.php NOTE:我的文件夾建在桌面上
打開client.php NOTE:如果你平時沒有php的編輯器,這個時候可以直接用記事本打開client.php
寫入程序 NOTE:程序我這里直接給出,并給予注釋,大家可以結合2.2通信過程進行理解,如有疑問請留言
<?php
$PORT = 請輸入端口號; //端口號請查看博文:*3.2.2 程序執行*。設置有效端口:
$client = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //創建socket/參數1:代表IPV4/參數2:流傳輸/參數3:TCP/
$result = socket_connect($client, "122.114.122.174", $PORT); //向指定地址/端口發出連接請求,連接結果返回到resule
if($result == false){ //這里我們簡單的對連接結果進行響應/為了Debug方便
echo "ERROR CONNECT\n";
die();
} else {
echo "CONNECTED\n";
}
$data = "Hello World\n"; //建立將要發送的消息
socket_write($client, $data); //將消息發送出去
socket_close($client); //關閉socket
?>
程序編寫完畢,大家可以直接復制過去,或者直接下載。NOTE:程序直接運行會報錯,我們需要指定一個端口號,請繼續看下節,如何運行程序。
獲取程序。通過上節,我們已經有一個簡單的客服端程序,下載請點擊。
查找有效端口。因為我們現在沒有服務器,所以需要借助別人提供的服務器地址及端口進行調試。
操作步驟:
1.點擊這里打開網頁
2.頁面的下方找到:122.114.122.174:xxxxx
3.將xxxxx部分替換到程序中的第二行并保存
網頁操作:
程序操作:
打開cmd。如果沒有配置PHP的環境變量請查看:3.1 PHP安裝及環境配置
執行命令cd desktop/socket
。目的是為了到socket文件夾,根據自己文件夾位置填寫相關路徑。
執行客戶端程序php client.php
。這個時候如果報錯PHP Fatal error,請查看點擊查看解決方法
最后,我們可以看到網頁里面接收到了信息。
NOTE:執行程序后,如果不打印CONNECTED,等待一段時間,發現返回ERROR CONNET。這個是因為我們的端口號過期了(只能使用3分鐘),重新返回網頁刷新并修改到程序中即可。如不能正確運行,請留言!
如果不想自己敲,請直接點此下載并跳轉:3.3.3 程序執行。
新建一個文件夾socket(如有,請忽略),在該文件夾下新建文本文檔并改名為server.php NOTE:我的文件夾建在桌面上
打開server.php NOTE:如果你平時沒有php的編輯器,這個時候可以直接用記事本打開server.php
寫入程序 NOTE:程序我這里直接給出,并給予注釋,大家可以結合2.2通信過程進行理解,如有疑問請留言
<?php
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //創建socket/參數解釋同客服端
socket_bind($server, "0.0.0.0", 12345); //綁定端口和IP/0.0.0.0表示允許任意地址發起連接/12345表示允許12345端口號進行連接
socket_listen($server); //進入監聽
$connection = socket_accept($server); //接受請求并建立連接
$data = socket_read($connection, 1024); //接受數據
echo $data; //打印數據
socket_close($server);//關閉socket
?>
打開文件夾socket(server.php所在文件夾),在該文件夾下新建文本文檔并改名為client.php(如有,請打開直接修改程序即可) NOTE:我的文件夾建在桌面上
打開client.php NOTE:如果你平時沒有php的編輯器,這個時候可以直接用記事本打開client.php
寫入程序 NOTE:程序我這里直接給出,并給予注釋,大家可以結合2.2通信過程進行理解,如有疑問請留言
<?php
$PORT = 12345; //與server端口匹配
$client = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //創建socket/參數1:代表IPV4/參數2:流傳輸/參數3:TCP/
$result = socket_connect($client, "127.0.0.1", $PORT); //向指定地址/端口發出連接請求,連接結果返回到resule/127.0.0.1指本地IP
if($result == false){ //這里我們簡單的對連接結果進行響應/為了Debug方便
echo "ERROR CONNECT\n";
die();
} else {
echo "CONNECTED\n";
}
$data = "Hello World\n"; //建立將要發送的消息
socket_write($client, $data); //將消息發送出去
socket_close($client); //關閉socket
?>
獲取程序。通過上節,我們已經有一個本地客服端程序和一個服務器程序,下載請點擊
打開cmd。如果沒有配置PHP的環境變量請查看:3.1
執行命令cd desktop/socket
。注意:這個路徑需要根據自己實際情況填寫,直接下載的應該是cd desktop/simple-socket-php/local-client-server
主要目的是為了找到server.php所在的文件夾,根據自己文件夾位置填寫相應路徑。
執行服務器程序php server.php
。我們發現cmd卡住了,這個時候在等待客戶端連接進來。這個時候如果報錯PHP Fatal error,請查看點擊查看解決方法(如果想強制退出進程按下Ctrl+C
)
再打開一個cmd。
執行命令cd desktop/socket
。注意:這個路徑需要根據自己實際情況填寫,直接下載的應該是cd desktop/simple-socket-php/local-client-server
主要目的是為了找到client.php所在的文件夾,根據自己文件夾位置填寫相應路徑。
執行客戶端程序php client.php
。(如果想強制退出進程按下Ctrl+C
)
如果服務器沒有反應,請按下Ctrl+C
結束進程,重新按照順序(先在一個CMD執行server.php,再在另一個CMD執行client.php)執行程序。
關于“php能不能實現socket通信”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“php能不能實現socket通信”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。