十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
現(xiàn)在的PYTHON很火,但是我們的PHP也不錯(cuò)!主要是看有沒(méi)有去挖掘它,去在phper中開(kāi)更多的腦洞,有時(shí)學(xué)習(xí)框架學(xué)累的時(shí)候,不妨寫寫腳本。或許能幫助自己更好的了解PHP。
這里我們就不闡述Socket(套接字)是什么了,這里我們使用常見(jiàn)的C(client)/S(server)模式。
作為服務(wù)器端,它的操作socket流程如下:
下面是Server.php的代碼
socket_create()函數(shù)是用來(lái)創(chuàng)建一個(gè)socket資源,它有三個(gè)參數(shù),第一個(gè)參數(shù)指的是協(xié)議族,其中AF_INET指的是使用ipv4的協(xié)議族,第二個(gè)參數(shù)是指使用的通信類型,SOCK_STREAM指的是流模式。流模式對(duì)應(yīng)的是可靠連接,也就是tcp連接方式。第三個(gè)指的是選用哪一種連接方式,要是tcp就是用SOL_TCP.要是udp就使用SOL_UDP。
對(duì)于socket_listen,第一個(gè)參數(shù)是要監(jiān)聽(tīng)的套接字,第二個(gè)是可允許的隊(duì)列數(shù)目,即允許有多少個(gè)人連接。但在使用前得先綁定一個(gè)ip地址和端口
上面的php代碼,監(jiān)聽(tīng)本地環(huán)路地址‘127.0.0.1’的1993端口,只要有連接請(qǐng)求發(fā)送到1993端口,便與客戶端建立tcp連接,之后便是發(fā)送信息到客戶端,發(fā)送完消息之后便關(guān)閉連接。里面的flag為計(jì)數(shù)標(biāo)志變量,當(dāng)$flag為5的時(shí)候,停止建立連接。
PS:socket_strerror(socket_last_error($sock))返回的是對(duì)應(yīng)套接字產(chǎn)生錯(cuò)誤的原因,編碼是根據(jù)操作系統(tǒng)所使用的語(yǔ)言,我這里是windows的中文系統(tǒng),所以返回的是gbk編碼!
接下來(lái)是client.php操作socket的流程。
下面是代碼:
上面的代碼使用socket_connect()連接到正在監(jiān)聽(tīng)的服務(wù)器端口1993,連接后,通過(guò)socket_read()從連接后的套接字讀取內(nèi)容!返回的由于是字符串類型,可以直接打印!
之后我們先運(yùn)行server.php,因?yàn)槠湄?fù)責(zé)監(jiān)聽(tīng)指定端口和發(fā)送信息。
倘若我們先運(yùn)行client.php,那我們便會(huì)發(fā)現(xiàn)返回這樣的錯(cuò)誤!
錯(cuò)誤一:服務(wù)端沒(méi)有在監(jiān)聽(tīng)
返回錯(cuò)誤:由于目標(biāo)計(jì)算機(jī)積極拒絕,無(wú)法連接
錯(cuò)誤二:端口已經(jīng)被綁定了使用了,也就是你第二次運(yùn)行了server.php
返回錯(cuò)誤:通常每個(gè)套接字地址(協(xié)議/網(wǎng)絡(luò)地址/端口)只允許一次
所以在我們測(cè)試前,最好先查看一下,端口是否被占用!
netstat -an | find "端口號(hào)"正確的運(yùn)行次序以及結(jié)果如下,先運(yùn)行server.php
只需要php server.php即可!
可以看到?jīng)]運(yùn)行server.php前,本地127.0.0.1沒(méi)有監(jiān)聽(tīng)1993端口,但是一運(yùn)行之后,服務(wù)端便在1993端口進(jìn)行監(jiān)聽(tīng)。
之后運(yùn)行client.php
客戶端接收到來(lái)自服務(wù)端的信息,而服務(wù)端則進(jìn)行計(jì)數(shù),記錄自己發(fā)送的次數(shù)!
這個(gè)簡(jiǎn)單的例子可以為之后的socket應(yīng)用打下一些基礎(chǔ),最常見(jiàn)的如聊天工具,然后到游戲之類的!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。