php簡單實現socket通訊

2021-07-24 20:24:21 字數 3588 閱讀 3869

socket通訊的原理在這裡就不說了,它的用途還是比較廣泛的,我們可以使用

socket

來做乙個

api介面出來,也可以使用

socket

來實現兩個程式之間的通訊,我們來研究一下在

php開發

中如何實現socket通訊。

由於socket服務端的**要監聽埠,等待接收請求,所以

php在做

socket

服務的時候需要將

php檔案執行在

cmd裡面。

如果要使php檔案可以在

cmd裡面執行,則需要進行如下設定:

1.新增環境變數,名字為

php_home

,值為php

檔案安裝目錄下的

.exe

檔案位址,如

2.修改系統變數

path的值

在path的值裡面新增

php安裝的目錄:如

好了,到這裡我們就配置好了環境變數,下一步我們開啟cmd,想要在裡面執行

php檔案,比如

aaa.php

檔案,則我們寫上這一句話:

phpd:\wamp\www\aaa.php

然後按下回車鍵,好了,我們的php檔案在

cmd裡面執行了,輸出了一句:

這樣的話php檔案能夠成功在

cmd裡面執行,接下來我們來看一下

php怎麼實現

socket

通訊。

1.php製作的

socket

服務端

主要功能是設定socket通訊的

ip位址及埠號,監聽埠,有客戶端連線的話,接收連線請求接收資料,處理並且返回資料。

**如下:

//確保在連線客戶端時不會超時

set_time_limit(0);//設定

ip和埠號

$address = "127.0.0.1";

$port = 2048; //除錯的時候,可以多換埠來測試程式!

/**

* 建立乙個

socket

* af_inet=是

ipv4

如果用ipv6

,則引數為

af_inet6

* sock_stream為

socket

的tcp

型別,如果是

udp則使用

sock_dgram

$sock = socket_create(af_inet, sock_stream, sol_tcp)or die("socket_create() 失敗的原因是

:" . socket_strerror(socket_last_error()) . "/n");//

阻塞模式

socket_set_block($sock)or die("socket_set_block() 失敗的原因是

:" . socket_strerror(socket_last_error()) . "/n");//

繫結到socket埠

$result = socket_bind($sock, $address, $port)or die("socket_bind() 失敗的原因是

:" . socket_strerror(socket_last_error()) . "/n");//

開始監聽

$result = socket_listen($sock, 4)or die("socket_listen() 失敗的原因是

:" . socket_strerror(socket_last_error()) . "/n");echo"ok\nbinding the socket on $address:$port ... ";echo"ok\nnow ready to accept connections.\nlistening on the socket ... \n";dowhile(true);

socket_close($sock);

2.調取

socket

服務的客戶端檔案

客戶端依然是要設定好要訪問伺服器的ip位址及埠號(即上一步驟中的

ip及埠),完了建立乙個

socket

連線,傳送資料到伺服器,接收返回資料。

set_time_limit(0);

$host = "127.0.0.1";

$port = 2048;

$socket = socket_create(af_inet, sock_stream, sol_tcp)or die("could not create socket\n"); // 建立乙個

socket

$connection = socket_connect($socket, $host, $port)or die("could not connet server\n"); // 連線

socket_write($socket, "hello socket")or die("write failed\n"); // 資料傳送 向伺服器傳送訊息while($buff = @socket_read($socket, 1024, php_normal_read)) {

echo("response was:" . $buff . "\n");

socket_close($socket);

3.在cmd

裡面執行服務端**

執行成功,已經在監聽埠了。。。

4.在網頁裡面執行我們的客戶端網頁,來向伺服器互動資料

執行起來,瀏覽器顯示:

cmd裡面的服務端顯示:

這是乙個簡單的socket通訊的測試,至於

socket

接收到什麼資料,怎麼處理資料,返回什麼型別的資料,還需要使用

php來做邏輯了。

epoll實現簡單socket通訊

epoll是常用的socket通訊方式,相比於select和poll來說,效率提公升了不止一點半點 其一 select中socket描述符 檔案描述符 集的資料結構為陣列,poll的檔案描述符集資料結構為鍊錶,無論陣列還是鍊錶,它們都是線性結構,當遍歷時,也只能線性遍歷 而epoll檔案描述符集採用...

簡單Socket通訊

示例程式是同步套接字程式,功能很簡單,只是客戶端發給伺服器一條資訊,伺服器向客戶端返回一條資訊 這裡只是乙個簡單的示例,是乙個最基本的socket程式設計流程,在接下來的文章中,會依次記錄套接字的同步和非同步,以及它們的區別。下面是示例程式的簡單步驟說明 伺服器端 第一步 用指定的埠號和伺服器的ip...

socket 簡單通訊

服務端 1.建立乙個服務端 import socket phone socket.socket 括號內不輸入,預設為family addressfamily.af inet type socketkind.sock stream proto 0 2.為服務端建立ip位址及埠號 phone.bind ...