亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

PHP 網(wǎng)絡編程小白系列 —— Socket 編程入門

DevWiki / 2870人閱讀

摘要:在這個時刻,服務程序被驚醒并且為客戶提供服務對客戶的請求作出適當?shù)姆磻?。為了方便這種模型的網(wǎng)絡編程,年代初,由聯(lián)合了其他幾家公司共同制定了一套下的網(wǎng)絡編程接口,即規(guī)范,它不是一種網(wǎng)絡協(xié)議而是一套開放的支持多種協(xié)議的下的網(wǎng)絡編程接口。

這篇文章將會介紹一下 Socket 編程中相關的 PHP 函數(shù),并簡單實現(xiàn)一個 C/S 的交互
Socket 簡介

Socket 的官方解釋:
在網(wǎng)絡編程中最常用的方案便是Client/Server(客戶機/服務器)模型。在這種方案中客戶應用程序向服務器程序請求服務。一個服務程序通常在一個眾所周知的地址監(jiān)聽對服務的請求,也就是說,服務進程一 直處于休眠狀態(tài),直到一個客戶向這個服務的地址提出了連接請求。在這個時刻,服務程序被"驚醒"并且為客戶提供服務-對客戶的請求作出適當?shù)姆磻?。為了方便這種Client/Server模型的網(wǎng)絡編程,90年代初,由Microsoft聯(lián)合了其他幾家公司共同制定了一套WINDOWS下的網(wǎng)絡編程接口,即WindowsSockets規(guī)范,它不是一種網(wǎng)絡協(xié)議,而是一套開放的、支持多種協(xié)議的Windows下的網(wǎng)絡編程接口?,F(xiàn)在的Winsock已經(jīng)基本上實現(xiàn)了與協(xié)議無關,你可以使用Winsock來調(diào)用多種協(xié)議的功能,但較常使用的是TCP/IP協(xié)議。Socket實際在計算機中提供了一個通信端口,可以通過這個端口與任何一個具有Socket接口的計算機通信。應用程序在網(wǎng)絡上傳輸,接收的信息都通過這個Socket接口來實現(xiàn)

我們可以簡單的把 Socket 理解為一個可以連通網(wǎng)絡上不同計算機應用程序之間的管道,把一堆數(shù)據(jù)從管道的 A 端扔進去,則會從管道的 B 端(同時還可以從C、D、E、F……端冒出來)。

注意:我們會在不同語境下使用不同的詞語去修飾 socket,你只需要對它有個概念就好了,因為 socket 本身就沒有真正意義上的實體

Socket 函數(shù)介紹

Socket 通信依次會進行 Socket 創(chuàng)建、 Socket 綁定、Socket 監(jiān)聽、Socket 收發(fā)、Socket 關閉幾個階段,下面我們列舉出 PHP 網(wǎng)絡編程中最常用也是必不可少的幾個常用的函數(shù)進行進一步的說明。

socket_create

TODO : 創(chuàng)建一個新的 socket 資源
函數(shù)原型: resource socket_create ( int $domain , int $type , int $protocol )
它包含三個參數(shù),分別如下:

domain:AF_INET、AF_INET6、AF_UNIX,AF的釋義就 address family,地址族的意思,我們常用的有 ipv4、ipv6

type: SOCK_STREAM、SOCK_DGRAM等,最常用的就是SOCK_STREAM,基于字節(jié)流的SOCKET類型,也是TCP協(xié)議使用的類型

protocol: SOL_TCP、SOL_UDP 這個就是具體使用的傳輸協(xié)議,一般可靠的傳輸我們選擇 TCP,游戲數(shù)據(jù)傳輸我們一般選用 UDP 協(xié)議

socket_bind

TODO : 將創(chuàng)建的 socket 資源綁定到具體的 ip 地址和端口
函數(shù)原型: bool socket_bind ( resource $socket , string $address [, int $port = 0 ] )

它包含三個參數(shù),分別如下:

socket: 使用socket_create創(chuàng)建的 socket 資源,可以認為是 socket 對應的 id

address: ip 地址

port: 監(jiān)聽的端口號,WEB 服務器默認80端口

socket_listen

TODO : 在具體的地址下監(jiān)聽 socket 資源的收發(fā)操作
函數(shù)原型: bool socket_listen ( resource $socket [, int $backlog = 0 ] )

它包含兩個個參數(shù),分別如下:

socket: 使用socket_create創(chuàng)建的socket資源

backlog: 等待處理連接隊列的最大長度

socket_accept

TODO : 監(jiān)聽之后,接收一個即將來臨的新的連接,如果連接建立成功,將返回一個新的 socket 句柄(你可以理解為子進程,通常父進程用來接收新的連接,子進程負責具體的通信)
函數(shù)原型: resource socket_accept ( resource $socket )

socket: 使用socket_create創(chuàng)建的socket資源

socket_write

TODO : 將指定的數(shù)據(jù)發(fā)送到 對應的 socket 管道
函數(shù)原型: int socket_write ( resource $socket , string $buffer [, int $length ] )

socket: 使用socket_create創(chuàng)建的socket資源

buffer: 寫入到socket資源中的數(shù)據(jù)

length: 控制寫入到socket資源中的buffer的長度,如果長度大于buffer的容量,則取buffer的容量

socket_read

TODO : 獲取傳送的數(shù)據(jù)
函數(shù)原型: int socket_read ( resource $socket , int $length )

socket: 使用socket_create創(chuàng)建的socket資源

length: socket資源中的buffer的長度

socket_close

TODO : 關閉 socket 資源
函數(shù)原型: void socket_close ( resource $socket )

socket: socket_accept或者socket_create產(chǎn)生的資源,不能用于stream資源的關閉

stream_socket_server

由于創(chuàng)建一個SOCKET的流程總是 socket、bind、listen,所以PHP提供了一個非常方便的函數(shù)一次性創(chuàng)建、綁定端口、監(jiān)聽端口

函數(shù)原型: resource stream_socket_server ( string $local_socket [, int &$errno [, string &$errstr [, int $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN [, resource $context ]]]] )

local_socket: 協(xié)議名://地址:端口號

errno: 錯誤碼

errstr: 錯誤信息

flags: 只使用該函數(shù)的部分功能

context: 使用stream_context_create函數(shù)創(chuàng)建的資源流上下文

socket 實現(xiàn) C/S 交互

基于上面的函數(shù)我們可以很方便的去構(gòu)建 socket 通信程序(在這里我希望讀者能多帶帶建立一個目錄比如socket 因為后續(xù)我們還會建立很多文件)我們先編輯一個服務端程序 server.php,如下:


再編輯一個客戶端程序client.php,如下:


然后我們打開終端(命令行)進入文件目錄下依次執(zhí)行:

php server.php
php client.php

運行效果如下:

注意服務器監(jiān)聽時進程是掛起的不能進行其他操作,你可能需要另起一個終端執(zhí)行客戶端程序

Socket 編程入門結(jié)語

本篇文章就是為大家整理了一下 PHP Socket 編程常用的函數(shù)并解釋了一下各自的意義,然后寫了一個簡單的 C/S 交互,希望大家對網(wǎng)絡編程有個比較直觀的認識,下篇文章我會簡單講講進程在網(wǎng)絡編程中的作用,這也是為后面網(wǎng)絡模型的講解打個基礎

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/29118.html

相關文章

  • PHP 網(wǎng)絡編程小白系列 —— 前言

    摘要:這跟國內(nèi)文化學習路徑編程意識都有關系,當然還有一個重要原因就是沒有比較詳盡的資料無從下手,那么通過這系列文章我希望小白能夠走近網(wǎng)絡編程。 我們應該要明白一點:但凡涉及網(wǎng)絡的事務,一定要經(jīng)過網(wǎng)絡的各個層次,PHP程序員可能更多地是在服務端的應用層打交道很少接觸應用層下面的傳輸層、網(wǎng)絡層。這跟國內(nèi) PHP文化、學習路徑、編程意識都有關系,當然還有一個重要原因就是沒有比較詳盡的資料無從下手,...

    walterrwu 評論0 收藏0
  • 從零帶你入門Socket編程

    摘要:網(wǎng)絡編程就是如何在程序中實現(xiàn)兩臺計算機的通信。而網(wǎng)絡編程最終要開發(fā)出來的應用大多數(shù)為支持各種協(xié)議的服務器,比如服務器服務器或者是基于自定義的協(xié)議實現(xiàn)的服務。在開始編碼之前,首先介紹一下協(xié)議棧上圖是我從網(wǎng)絡編程這本書拍下來的。 相信大部分的初中級PHP程序員平時寫的業(yè)務代碼占絕大多數(shù),寫厭了平時的增刪改查,何不體驗體驗網(wǎng)絡編程的魅力呢。 學習網(wǎng)絡編程能夠很好的理解一些底層的網(wǎng)絡通信,比如...

    glumes 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<