中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php能不能實現socket通信

發布時間:2023-02-09 14:04:56 來源:億速云 閱讀:157 作者:iii 欄目:編程語言

這篇文章主要介紹了php能不能實現socket通信的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇php能不能實現socket通信文章都會有所收獲,下面我們一起來看看吧。

php能實現socket通信,其實現方法:1、在客戶端創建“socketsocket_create();”并向服務器請求連接“socket_connect();”;2、在服務端創建“socketsocket_create();”并綁定IP和端口號“socket_bind();”;3、通過“socket_wirte();socket_read”讀客戶端的消息或給客戶端寫消息即可。

1 背景介紹

目標:我希望通過套接字的TCP傳輸來搭建一個服務器,這個服務器的作用是:接受多個客戶端的連接并完成他們的相互通信。比如客戶端A,客戶端B同時連接到服務器S,客戶端A向服務器S發送消息,服務器S會將A的消息轉發給B,同理,B的消息也可以通過S被轉發到A。這樣就實現了客戶端A和客戶端B之間的相互通信
本次我們只實現客戶端與服務器之間連接并通信,暫時沒有寫服務器的轉發功能。

2 TCP的簡單介紹

2.1 TCP的“三次握手”

TCP的三次握手可以確保服務器和客戶端之間可以正常通信。三次握手的過程:至于這個過程的解釋,可以點擊下面的鏈接來查看。
php能不能實現socket通信

2.2 IP和PORT

服務器需要有一個IP,TCP通信時,還需要提供一個端口號。
客服端需要有一個IP,TCP通信時,也需要提供一個端口號。

個人理解:IP就是地址,可以理解為一個房子,當你需要建立通信的時候,首先肯定得相互知道這個房子在哪里才可以吧,要不然我們得信息發送到哪里呢?
PORT端口,端口號可以理解為這個房子的一個門,我們需要指定一個門,將消息從這個門里面傳送進去或者從這個門接受消息。

2.2 客戶端與服務器簡要通信的過程

2.2.1 php部分相關函數

客戶端:

  1. 創建socketsocket_create();

  2. 向服務器請求連接socket_connect();

  3. 給服務器發送消息/接受服務器消息socket_wirte(); / socket_read();

  4. 關閉socketsocket_close();

服務器:

  • 創建socketsocket_create();

  • 綁定IP和端口號socket_bind();

  • 監聽IP和端口號(0.0.0.0表示任意IP)socket_listen();

  • 阻塞等待客服端的連接socket_accept();

  • 讀客戶端的消息/給客戶端寫消息socket_wirte(); / socket_read();

  • 關閉socketsocket_close();

2.2.2 簡要通信過程

  1. 服務器創建socket,并綁定IP和PORT,然后進入監聽狀態等待客服端發起連接。

  • 客戶端創建socket,對指定服務器IP和PORT進行連接。

  • 服務器接受客服端發起的連接。

  • 雙方可以互相發送數據

  • 雙方關閉socket。

AB創建socket創建socket,設置允許訪問IP和PORT監聽某個(或所有)IP和某個端口,并進入阻塞等待客戶端向指定服務器IP/PORT發起connet接受客戶端A的connet雙方已經建立連接發送信息發送信息通信結束后A,B同時關閉socketAB

這就是一個簡要的通信過程,至于想要循環發送或者異常檢測就是一些細節方面的東西了。

3 開始實踐

3.1 PHP安裝及環境配置
  1. 安裝PHP。在這里我是直接安裝了XAMPP,這個軟件自行幫我安裝了PHP。如果是第一次使用php語言,可以直接百度安裝PHP,也可以安裝XAMPP。

  2. 系統環境配置。在運行程序的時候,我是通過cmd進行運行的,所以需要對系統環境變量進行配置。配置過程請參考:鏈接:PHP環境變量配置。

  3. 檢查php指令是否可以運行。完成1、2兩個步驟之后,運行cmd,并執行命令php -v ,運行完成之后會顯示PHP的版本號。php能不能實現socket通信

3.2 客戶端程序

3.2.1 寫程序

  1. 新建一個文件夾socket,在該文件夾下新建文本文檔并改名為client.php NOTE:我的文件夾建在桌面上

  2. 打開client.php NOTE:如果你平時沒有php的編輯器,這個時候可以直接用記事本打開client.php

  3. 寫入程序 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
?>
  1. 程序編寫完畢,大家可以直接復制過去,或者直接下載。NOTE:程序直接運行會報錯,我們需要指定一個端口號,請繼續看下節,如何運行程序。

3.2.2 程序執行

  1. 獲取程序。通過上節,我們已經有一個簡單的客服端程序,下載請點擊。

  2. 查找有效端口。因為我們現在沒有服務器,所以需要借助別人提供的服務器地址及端口進行調試。
    操作步驟:
    1.點擊這里打開網頁
    2.頁面的下方找到:122.114.122.174:xxxxx
    3.將xxxxx部分替換到程序中的第二行并保存
    網頁操作:
    php能不能實現socket通信
    程序操作:
    php能不能實現socket通信

  3. 打開cmd。如果沒有配置PHP的環境變量請查看:3.1 PHP安裝及環境配置

  4. 執行命令cd desktop/socket。目的是為了到socket文件夾,根據自己文件夾位置填寫相關路徑。

  5. 執行客戶端程序php client.php。這個時候如果報錯PHP Fatal error,請查看點擊查看解決方法
    php能不能實現socket通信
    最后,我們可以看到網頁里面接收到了信息。
    NOTE:執行程序后,如果不打印CONNECTED,等待一段時間,發現返回ERROR CONNET。這個是因為我們的端口號過期了(只能使用3分鐘),重新返回網頁刷新并修改到程序中即可如不能正確運行,請留言!

3.3 本地服務器及客服端程序

如果不想自己敲,請直接點此下載并跳轉:3.3.3 程序執行。

3.3.1 寫程序/服務器

  1. 新建一個文件夾socket(如有,請忽略),在該文件夾下新建文本文檔并改名為server.php NOTE:我的文件夾建在桌面上

  2. 打開server.php NOTE:如果你平時沒有php的編輯器,這個時候可以直接用記事本打開server.php

  3. 寫入程序 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
?>
3.3.2 寫程序/客戶端
  1. 打開文件夾socket(server.php所在文件夾),在該文件夾下新建文本文檔并改名為client.php(如有,請打開直接修改程序即可) NOTE:我的文件夾建在桌面上

  2. 打開client.php NOTE:如果你平時沒有php的編輯器,這個時候可以直接用記事本打開client.php

  3. 寫入程序 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
?>
3.3.3 程序執行
  1. 獲取程序。通過上節,我們已經有一個本地客服端程序和一個服務器程序,下載請點擊

  2. 打開cmd。如果沒有配置PHP的環境變量請查看:3.1

  3. 執行命令cd desktop/socket。注意:這個路徑需要根據自己實際情況填寫,直接下載的應該是cd desktop/simple-socket-php/local-client-server主要目的是為了找到server.php所在的文件夾,根據自己文件夾位置填寫相應路徑。

  4. 執行服務器程序php server.php。我們發現cmd卡住了,這個時候在等待客戶端連接進來。這個時候如果報錯PHP Fatal error,請查看點擊查看解決方法(如果想強制退出進程按下Ctrl+C
    php能不能實現socket通信

  5. 再打開一個cmd

  6. 執行命令cd desktop/socket。注意:這個路徑需要根據自己實際情況填寫,直接下載的應該是cd desktop/simple-socket-php/local-client-server主要目的是為了找到client.php所在的文件夾,根據自己文件夾位置填寫相應路徑。

  7. 執行客戶端程序php client.php。(如果想強制退出進程按下Ctrl+C
    php能不能實現socket通信
    如果服務器沒有反應,請按下Ctrl+C結束進程,重新按照順序(先在一個CMD執行server.php,再在另一個CMD執行client.php)執行程序。

關于“php能不能實現socket通信”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“php能不能實現socket通信”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东城区| 正阳县| 秦安县| 仁化县| 万源市| 久治县| 尼玛县| 申扎县| 连平县| 新丰县| 林甸县| 邯郸县| 广安市| 台前县| 德惠市| 弥渡县| 义乌市| 会宁县| 珠海市| 隆尧县| 太和县| 宜昌市| 南丰县| 江西省| 顺平县| 平武县| 项城市| 彩票| 淮滨县| 当涂县| 高清| 福贡县| 姜堰市| 准格尔旗| 工布江达县| 惠来县| 平定县| 诸城市| 岑巩县| 达尔| 尚志市|