『壹』 網頁游戲能用php做後端開發嗎
PHP配合swoole應該是可以實現的多線程的。
swoole是PHP的協程高性能網路通信引擎,提供了多種通信協議的網路服務叢燃寬器和客戶端模塊。包括:
TCP/UDP/UnixSocket伺服器Http/WebSocket/Http2.0伺服器端非同步/同步TCP/UDP網路客戶端非同步MySQL非同步RedisAsyncTask毫秒定時器非同步文件讀寫非同步DNS查詢Http客戶端除了非同步IO的支持之外,為多進程的模式設計了多個並發數據結構和IPC通信機制,可以大滲亮大簡化多進程並發編程的工作。其中包括了:
並發原子計數器並發HashTable內存通道Channel鎖Lock進程間通信IPC可以廣泛應用於互聯網、移動通信、企段檔業軟體、網路游戲、物聯網、車聯網、智能家庭等領域。
其中戰旗直播,虎牙直播。都用到了swoole開發。
『貳』 PHP編程語言中的socket是什麼東西
HP使用Berkley的socket庫來創建它的連接。你可以知道socket只不過是一個數據結構。你使用這個socket數據結構去開始一個客戶端和伺服器之間的會話。這個伺服器是一直在監聽准備產生一個新的會話。當一個客戶端連接伺服器,它就打開伺服器正在進行監聽的一個埠進行會話。這時,伺服器端接受客戶端的連接請求,那麼就進行一次循環。現在這個客戶端就能夠發送信息到伺服器,伺服器也能發送信息給客戶端。產生一個Socket,你需要三個變數:一個協議、一個socket類型和一個公共協議類型。產生一個socket有三種協議供選擇,繼續看下面的內容來獲取詳細的協議內容。定義一個公共的協議類型是進行連接一個必不可少的元素。下面的表我們看看有那些公共的協議類型。表一:協議名字/常量描述AF_INET這是大多數用來產生socket的協議,使用TCP或UDP來傳輸,用在IPv4的地址AF_INET6與上面類似,不過是來用在IPv6的地址AF_UNIX本地協議,使用在Unix和Linux系統上,它很少使用,一般都是當客戶端和伺服器在同一台及其上的時候使用表二:Socket類型名字/常量描述SOCK_STREAM這個協議是按照順序的、可靠的、數據完整的基於位元組流的連接。這是一個使用最多的socket類型,這個socket是使用TCP來進行傳輸。SOCK_DGRAM這個協議是無連接的、固定長度的傳輸調用。該協議是不可靠的,使用UDP來進行它的連接。SOCK_SEQPACKET這個協議是雙線路的、可靠的連接,發送固定長度的數據包進行傳輸。必須把這個包完整的接受才能進行讀取。SOCK_RAW這個socket類型提供單一的網路訪問,這個socket類型使用ICMP公共協議。(ping、traceroute使用該協議)SOCK_RDM這個類型是很少使用的,在大部分的操作系統上沒有實現,它是提供給數據鏈路層使用,不保證數據包的順序表三:公共協議名字/常量描述ICMP互聯網控制消息協議,主要使用在網關和主機上,用來檢查網路狀況和報告錯誤信息UDP用戶數據報文協議,它是一個無連接,不可靠的傳輸協議TCP傳輸控制協議,這是一個使用最多的可靠的公共協議,它能保證數據包能夠到達接受者那兒,如果在傳輸過程中發生錯誤,那麼它將重新發送出錯數據包。現在你知道了產生一個socket的三個元素,那麼我們就在php中使用socket_create()函數來產生一個socket。這個socket_create()函數需要三個參數:一個協議、一個socket類型、一個公共協議。socket_create()函數運行成功返回一個包含socket的資源類型,如果沒有成功則返回false。Resourecesocket_create(intprotocol,intsocketType,intcommonProtocol);現在你產生一個socket,然後呢?php提供了幾個操縱socket的函數。你能夠綁定socket到一個IP,監聽一個socket的通信,接受一個socket;現在我們來看一個例子,了解函數是如何產生、接受和監聽一個socket。上面這個例子產生一個你自己的伺服器端。例子第一行,$commonProtocol=getprotobyname(「tcp」);使用公共協議名字來獲取一個協議類型。在這里使用的是TCP公共協議,如果你想使用UDP或者ICMP協議,那麼你應該把getprotobyname()函數的參數改為「udp」或「icmp」。還有一個可選的法是不使用getprotobyname()函數而是指定SOL_TCP或SOL_UDP在socket_create()函數中。$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);例子的第二行是產生一個socket並且返回一個socket資源的實例。在你有了一個socket資源的實例以後,你就必須把socket綁定到一個IP地址和某一個埠上。socket_bind($socket,『localhost』,1337);在這里你綁定socket到本地計算機(127.0.0.1)和綁定socket到你的1337埠。然後你就需要監聽所有進來的socket連接。socket_listen($socket);在第四行以後,你就需要了解所有的socket函數和他們的使用。表四:Socket函數函數名描述socket_accept()接受一個Socket連接socket_bind()把socket綁定在一個IP地址和埠上socket_clear_error()清除socket的錯誤或者最後的錯誤代碼socket_close()關閉一個socket資源socket_connect()開始一個socket連接socket_create_listen()在指定埠打開一個socket監聽socket_create_pair()產生一對沒有區別的socket到一個數組里socket_create()產生一個socket,相當於產生一個socket的數據結構socket_get_option()獲取socket選項socket_getpeername()獲取遠程類似主機的ip地址socket_getsockname()獲取本地socket的ip地址socket_iovec_add()添加一個新的向量到一個分散/聚合的數組socket_iovec_alloc()這個函數創建一個能夠發送接收讀寫的iovec數據結構socket_iovec_delete()刪除一個已經分配的iovecsocket_iovec_fetch()返回指定的iovec資源的數據socket_iovec_free()釋放一個iovec資源socket_iovec_set()設置iovec的數據新值socket_last_error()獲取當前socket的最後錯誤代碼socket_listen()監聽由指定socket的所有連接socket_read()讀取指定長度的數據socket_readv()讀取從分散/聚合數組過來的數據socket_recv()從socket里結束數據到緩存socket_recvfrom()接受數據從指定的socket,如果沒有指定則默認當前socketsocket_recvmsg()從iovec里接受消息socket_select()多路選擇socket_send()這個函數發送數據到已連接的socketsocket_sendmsg()發送消息到socketsocket_sendto()發送消息到指定地址的socketsocket_set_block()在socket里設置為塊模式socket_set_nonblock()socket里設置為非塊模式socket_set_option()設置socket選項socket_shutdown()這個函數允許你關閉讀、寫、或者指定的socketsocket_strerror()返回指定錯誤號的詳細錯誤socket_write()寫數據到socket緩存socket_writev()寫數據到分散/聚合數組(注:函數介紹刪減了部分原文內容,函數詳細使用建議參考英文原文,或者參考PHP手冊)以上所有的函數都是PHP中關於socket的,使用這些函數,你必須把你的socket打開,如果你沒有打開,請編輯你的php.ini文件,去掉下面這行前面的注釋:extension=php_sockets.dll如果你無法去掉注釋,那麼請使用下面的代碼來載入擴展庫:如果你不知道你的socket是否打開,那麼你可以使用phpinfo()函數來確定socket是否打開。你通過查看phpinfo信息了解socket是否打開。如下圖:查看phpinfo()關於socket的信息◆產生一個伺服器現在我們把第一個例子進行完善。你需要監聽一個指定的socket並且處理用戶的連接。你應該使用你的命令提示符來運行這個例子。理由是因為這里將產生一個伺服器,而不是一個Web頁面。如果你嘗試使用Web瀏覽器來運行這個腳本,那麼很有可能它會超過30秒的限時。你可以使用下面的代碼來設置一個無限的運行時間,但是還是建議使用命令提示符來運行。set_time_limit(0);在你的命令提示符中對這個腳本進行簡單測試:Php.exeexample01_server.php如果你沒有在系統的環境變數中設置php解釋器的路徑,那麼你將需要給php.exe指定詳細的路徑。當你運行這個伺服器端的時候,你能夠通過遠程登陸(telnet)的方式連接到埠1337來測試這個伺服器。如下圖:上面的伺服器端有三個問題:1.它不能接受多個連接。2.它只完成唯一的一個命令。3.你不能通過Web瀏覽器連接這個伺服器。這個第一個問題比較容易解決,你可以使用一個應用程序去每次都連接到伺服器。但是後面的問題是你需要使用一個Web頁面去連接這個伺服器,這個比較困難。你可以讓你的伺服器接受連接,然後些數據到客戶端(如果它一定要寫的話),關閉連接並且等待下一個連接。在上一個代碼的基礎上再改進,產生下面的代碼來做你的新伺服器端:這個伺服器端要做什麼呢?它初始化一個socket並且打開一個緩存收發數據。它等待連接,一旦產生一個連接,它將列印「Socketconnected」在伺服器端的屏幕上。這個伺服器檢查緩沖區,如果緩沖區里有數據,它將把數據發送到連接過來的計算機。然後它發送這個數據的接受信息,一旦它接受了信息,就把信息保存到數據里,並且讓連接的計算機知道這些信息,最後關閉連接。當連接關閉後,伺服器又開始處理下一次連接。(翻譯的爛,附上原文)Thisiswhattheserverdoes..Thenitwaitsforaconnection.「Socketconnected」.;ifthereis,..,,andthenclosestheconnection.Aftertheconnectionisclosed,.◆產生一個客戶端處理第二個問題是很容易的。你需要產生一個php頁連接一個socket,發送一些數據進它的緩存並處理它。然後你又個處理後的數據在還頓,你能夠發送你的數據到伺服器。在另外一台客戶端連接,它將處理那些數據。.,,andprocessit..Whenanotherclientconnects,.下面的例子示範了使用socket:這個例子的代碼演示了客戶端連接到伺服器。客戶端讀取數據。如果這是第一時間到達這個循環的首次連接,這個伺服器將發送「NODATA」返回給客戶端。如果情況發生了,這個客戶端在連接之上。客戶端發送它的數據到伺服器,數據發送給伺服器,客戶端等待響應。一旦接受到響應,那麼它將把響應寫到屏幕上。
『叄』 如何開放伺服器1024~65536埠
眾所周知,計算機之間通信是通過埠進行的,例如你訪問一個網站時,Windows就會在本機開一個埠(例如1025埠),然後去連接遠方網站伺服器的一個埠,別人訪問你時也是如此。默認狀態下,Windows會在你的電腦上打開許多服務埠,黑客常常利用這些埠來實施入侵,因此掌握埠方面的知識,是安全上網必備的技能。
一、常用埠及其分類
電腦在Internet上相互通信需要使用TCP/IP協議,根據TCP/IP協議規定,電腦有256×256(65536)個埠,這些埠可分為TCP埠和UDP埠兩種。如果按照埠號劃分,它們又可以分為以下兩大類:
1.系統保留埠(從0到1023)
這些埠不允許你使用,它們都有確切的定義,對應著網際網路上常見的一些服務,每一個打開的此類埠,都代表一個系統服務,例如80埠就代表Web服務。21對應著FTP,25對應著SMTP、110對應著POP3等。
2.動態埠(從1024到65535)
當你需要與別人通信時,Windows會從1024起,在本機上分配一個動態埠,如果1024埠未關閉,再需要埠時就會分配1025埠供你使用,依此類推。
但是有個別的系統服務會綁定在1024到49151的埠上,例如3389埠(遠程終端服務)。從49152到65535這一段埠,通常沒有捆綁系統服務,允許Windows動態分配給你使用。
二、如何查看本機開放了哪些埠
在默認狀態下,Windows會打開很多「服務埠」,如果你想查看本機打開了哪些埠、有哪些電腦正在與本機連接,可以使用以下兩種方法。
1.利用netstat命令
Windows提供了netstat命令,能夠顯示當前的 TCP/IP 網路連接情況,注意:只有安裝了TCP/IP協議,才能使用netstat命令。
操作方法:單擊「開始→程序→附件→命令提示符」,進入DOS窗口,輸入命令 netstat -na 回車,於是就會顯示本機連接情況及打開的埠。其中Local Address代表本機IP地址和打開的埠號,Foreign Address是遠程計算機IP地址和埠號,State表明當前TCP的連接狀態,圖中LISTENING是監聽狀態,表明本機正在打開135埠監聽,等待遠程電腦的連接。
如果你在DOS窗口中輸入了netstat -nab命令,還將顯示每個連接都是由哪些程序創建的。上圖2中本機在135埠監聽,就是由svchost.exe程序創建的,該程序一共調用了5個組件(WS2_32.dll、RPCRT4.dll、rpcss.dll、svchost.exe、ADVAPI32.dll)來完成創建工作。如果你發現本機打開了可疑的埠,就可以用該命令察看它調用了哪些組件,然後再檢查各組件的創建時間和修改時間,如果發現異常,就可能是中了木馬。
2.使用埠監視類軟體
與netstat命令類似,埠監視類軟體也能查看本機打開了哪些埠,這類軟體非常多,著名的有Tcpview、Port Reporter、綠鷹PC萬能精靈、網路埠查看器等,推薦你上網時啟動Tcpview,密切監視本機埠連接情況,這樣就能嚴防非法連接,確保自己的網路安全。
三、關閉本機不用的埠
默認情況下Windows有很多埠是開放的,一旦你上網,黑客可以通過這些埠連上你的電腦,因此你應該封閉這些埠。主要有:TCP139、445、593、1025 埠和 UDP123、137、138、445、1900埠、一些流行病毒的後門埠(如 TCP 2513、2745、3127、6129 埠),以及遠程服務訪問埠3389。關閉的方法是:
①137、138、139、445埠:它們都是為共享而開放的,你應該禁止別人共享你的機器,所以要把這些埠全部關閉,方法是:單擊「開始→控制面板→系統→硬體→設備管理器」,單擊「查看」菜單下的「顯示隱藏的設備」,雙擊「非即插即用驅動程序」,找到並雙擊NetBios over Tcpip,在打開的「NetBios over Tcpip屬性」窗口中,單擊選中「常規」標簽下的「不要使用這個設備(停用)」,單擊「確定」按鈕後重新啟動後即可。
②關閉UDP123埠:單擊「開始→設置→控制面板」,雙擊「管理工具→服務」,停止Windows Time服務即可。關閉UDP 123埠,可以防範某些蠕蟲病毒。
③關閉UDP1900埠:在控制面板中雙擊「管理工具→服務」,停止SSDP Discovery Service 服務即可。關閉這個埠,可以防範DDoS攻擊。
④其他埠:你可以用網路防火牆來關閉,或者在「控制面板」中,雙擊「管理工具→本地安全策略」,選中「IP 安全策略,在本地計算機」,創建 IP 安全策略來關閉。
四、重定向本機默認埠,保護系統安全
如果本機的默認埠不能關閉,你應該將它「重定向」。把該埠重定向到另一個地址,這樣即可隱藏公認的默認埠,降低受破壞機率,保護系統安全。
例如你的電腦上開放了遠程終端服務(Terminal Server)埠(默認是3389),可以將它重定向到另一個埠(例如1234),方法是:
1.在本機上(伺服器端)修改
定位到下列兩個注冊表項,將其中的 PortNumber,全部改成自定義的埠(例如1234)即可:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]
2.在客戶端上修改
依次單擊「開始→程序→附件→通訊→遠程桌面連接」,打開「遠程桌面連接」窗口,單擊「選項」按鈕擴展窗口,填寫完相關參數後,單擊「常規」下的「另存為」按鈕,將該連接參數導出為.rdp文件。用記事本打開該文件,在文件最後添加一行:server port:i:1234 (這里填寫你伺服器自定義的埠)。以後,直接雙擊這個.rdp 文件即可連接到伺服器的這個自定義埠了。
當然不會
『肆』 請教一下 php 如何測試SMTP埠是否能正常連通
<?php
/**需要擴展模塊extension=php_sockets.dll
*Filenameserver.php
*伺服器端代碼
*
*@authorguisu.huang
*@since2012-04-11
*
*/
//確保在連接客戶端時不會超時
set_time_limit(0);
//設置IP和埠號
$address="127.0.0.1";
$port=2046;//調試的時候,可以多換埠來測試程序!
/**
*創建一個SOCKET
*AF_INET=是ipv4如果用ipv6,則參數為AF_INET6
*SOCK_STREAM為socket的tcp類型,如果是UDP則使用SOCK_DGRAM
*/
$sock=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)ordie("socket_create()失敗的原因是:".socket_strerror(socket_last_error())."/n");
//阻塞模式
socket_set_block($sock)ordie("socket_set_block()失敗的原因是:".socket_strerror(socket_last_error())."/n");
//綁定到socket埠
$result=socket_bind($sock,$address,$port)ordie("socket_bind()失敗的原因是:".socket_strerror(socket_last_error())."/n");
//開始監聽
$result=socket_listen($sock,4)ordie("socket_listen()失敗的原因是:".socket_strerror(socket_last_error())."/n");
echo"OK Bindingthesocketon$address:$port...";
echo"OK Nowreadytoacceptconnections. Listeningonthesocket... ";
do{//neverstopthedaemon
//它接收連接請求並調用一個子連接Socket來處理客戶端和伺服器間的信息
$msgsock=socket_accept($sock)ordie("socket_accept()failed:reason:".socket_strerror(socket_last_error())."/n");
//讀取客戶端數據
echo"Readclientdata ";
//socket_read函數會一直讀取客戶端數據,直到遇見 , 或者 字元.PHP腳本把這寫字元看做是輸入的結束符.
$buf=socket_read($msgsock,8192);
echo"Receivedmsg:$buf ";
//數據傳送向客戶端寫入返回結果
$msg="welcome ";
socket_write($msgsock,$msg,strlen($msg))ordie("socket_write()failed:reason:".socket_strerror(socket_last_error())."/n");
//一旦輸出被返回到客戶端,父/子socket都應通過socket_close($msgsock)函數來終止
socket_close($msgsock);
}while(true);
socket_close($sock);
『伍』 網頁編程入門應該首先學些什麼
網頁編程入門應該首先學html和asp這兩種語言代碼。
1、html相關知識
①據了解,html屬於靜態代碼,是網頁編程的基礎。至於靜態代碼,因伺服器不需要解析而只用於布局效果;
②還有javascript、css這兩種靜態代碼,前者用於實現某些特效,而後者則是樣式語言;
③以上三種語言組合起來,可以設計出美妙的網頁效果。
2、asp相關知識
①另外,asp屬於動態代碼,是為了能快速入門的。至於動態代碼,因伺服器需要解析而可用於資料庫操作;
②還有php、jsp這兩種動態代碼,和html有著很好的兼容性,基本學會掌握以後就可以去找工作了;
③當然,開發工具、資料庫和伺服器這三個部分得根據學的動態語言來選擇,比如動態語言和資料庫可以選擇asp和access或php和mySQL等。
(5)phptcpudp擴展閱讀
網頁編程的相關原理
1、網路模型(網路結構原理和工作原理的描述)
①OSI參考模型:七層;
②Internet網路模型:四層;
③網路協議:指定層上進行數據交換的規則;
④Internet的網路層協議:IP協議、DNS協議(輔助協議);
⑤Internet的傳輸層協議:TCP協議、UDP協議。
2、套接字(應用程序和網路協議的介面)
①Java Sockets:Java應用程序和網路協議的介面,提供若干個類的定義。Java應用程序利用這些類繼承網路協議的行為,實現網路通信;
②TCP Sockets:使用TCP協議實現可靠的網路通信;
③UDP Sockets:使用UDP協議實現效率較高的網路通信。
3、數據包(按照一定規則整合的數據集合)
①組包:指按照協議把零散的數據或報文按照組合起來,實際應用中,比如在C++編程中,往往定義一種新的數據類型用來存儲數據包的結構;
②數據包傳送:指數據包的電氣物理傳輸;
③解包:指接收端對接收的數據進行解析,獲得有用信息和數據。