php使用berkely的socket庫來建立他的連線,socket是乙個資料結構,你可以通過這個socket來開啟伺服器和客戶端的會話。伺服器端一直處於監聽狀態,當乙個客戶端連線伺服器,他就開啟伺服器端正在監聽的乙個埠進行會話。這時伺服器端接收客戶端的連線請求,那麼就進行一次迴圈。現在這個客戶端就能夠傳送資訊到伺服器,伺服器也可以傳送資訊給客戶端。
產生乙個socket你一共需要三個變數
1、乙個協議
2、乙個socket型別
3、乙個公共協議型別
產生乙個socket有三個協議供選擇
1、af_inet 這個是使用比較廣泛的產生socket的協議,使用tcp或者udp協議傳輸,使用ipv4位址
2、af_inet6 顯而易見哈,同上,不同的是使用ipv6位址
3、af_unix 使用在unix或者linux機器上,這個很少使用,僅在伺服器端和客戶端均為unix或者linux系統上使用。
socket型別
1、sock_stream 這個協議是按照順序的、可靠的、資料完整的基於位元組流的連線。這是乙個使用最多的socket型別,這個socket是使用tcp來進行傳輸。
2、sock_dgram 這個協議是無連線的、固定長度的傳輸呼叫。該協議是不可靠的,使用udp來進行它的連線。
3、sock_seqpacket 這個協議是雙線路的、可靠的連線,傳送固定長度的資料報進行傳輸。必須把這個包完整的接受才能進行讀取。
4、sock_raw 這個socket型別提供單一的網路訪問,這個socket型別使用icmp公共協議。(ping、traceroute使用該協議)
5、sock_rdm 這個型別是很少使用的,在大部分的作業系統上沒有實現,它是提供給資料鏈路層使用,不保證資料報的順序
公共協議型別
1、icmp (internet control message protocol)網際網路控制報文協議,主要用在閘道器和主機上,用來檢測網路狀況和報告錯誤資訊
2、tcp (transmission control protocol) 傳輸控制協議,他是使用最廣泛的協議,他能夠保證資料報到達接收者那裡,如果中途出現錯誤,那麼此協議從新傳送資料報。
3、udp (user datagram protocol)使用者資料報協議,他是無連線的,不可靠的資料傳輸協議。
好啦,你現在知道了產生乙個socke需要三個元素,那麼在php中socket_create()就需要三個引數,乙個協議,乙個socket型別,乙個公共協議。如果建立成功,socket_create()返回乙個socket資源型別,如果不成功,嘿嘿,那你會收到乙個false.
curl 是利用url語法規定來傳輸檔案和資料的工具。他支援http、ftp、telnet。為啥要使用curl呢?
因為,如果我們有時候想靈活的獲取網頁上的內容,例如處理coockies、驗證、表單提交、檔案上傳等等等等。那麼你就需要用到curl,php有著功能強大的curl庫。
php使用curl的選項基本步驟如下
1、初始化
2、引數設定
3、頁面內容獲取或者操作
4、釋放控制代碼
例子
<?php
//初始化curl
$ch = curl_init ();
/** 設定curl
* php手冊對於curl_setopt的解釋為:設定對於curl傳輸的操作
* curl_setopt有三個引數:資源(一般為你建立的curl控制代碼)、操作(你將對這個控制代碼作何操作)、引數(對於這個操作你給出的引數)
*/curl_setopt ( $ch, curlopt_url, "");
curl_setopt ( $ch, curlopt_post, 1 );
/*給出了要post的資料:$post_string,post的資料可以是乙個檔案,
*那麼你需要以@加上檔案的全路徑給出,或者你要post一些資料,
*那麼你可以按照陣列形式給出,或者按照字串給出,
*如果你想按照字串形式給出,請把字串urlencode,嘿嘿
*/curl_setopt ( $ch, curlopt_postfields, $post_string );
/**把curl操作的結果以字串形式 從curl_exec ()返回,而不是直接就輸出了
*/curl_setopt ( $ch, curlopt_returntransfer, true );
//得到操作返回結果
$result = curl_exec ( $ch );
//關閉curl控制代碼
curl_close ( $ch );
因為php的curl有很多操作,要都記住估計很困難,反正偶記不住啦,說些大家可能用的上的吧。
獲取伺服器的一些資訊
<?php
//初始化curl
$ch = curl_init ();
curl_setopt ( $ch, curlopt_url, "");
curl_setopt ( $ch, curlopt_returntransfer, true );
curl_exec($ch);
$info = curl_getinfo($ch);
var_dump($info);
通過上面的例子,你將會獲得如下資訊:
<?php
「url」 //資源網路位址
「content_type」 //內容編碼
「http_code」 //http狀態碼
「header_size」 //header的大小
「request_size」 //請求的大小
「filetime」 //檔案建立時間
「ssl_verify_result」 //ssl驗證結果
「redirect_count」 //跳轉技術
「total_time」 //總耗時
「namelookup_time」 //dns查詢耗時
「connect_time」 //等待連線耗時
「pretransfer_time」 //傳輸前準備耗時
「size_upload」 //上傳資料的大小
「speed_upload」 //上傳速度
「upload_content_length」 //上傳內容的長度
「starttransfer_time」 //開始傳輸的時間
「redirect_time」//重定向耗時
利用curl你還可以做以下操作
如果你沒有這個擴充套件,你需要改一下php.ini檔案,去掉extension=php_curl.dll前面的分號。
好啦,現在我們知道socket和curl是咋回事了,socket是一種資料結構,他可以用來在伺服器和客戶端進行對話。而curl是利用url語法規定來傳輸檔案和資料的規定,支援很多協議,例如ftp,http、telnet等。
RPC和Socket的區別
rpc和socket的區別 rpc remote procedure call,遠端過程呼叫 是建立在socket之上的,出於一種模擬的願望,在一台機器上執行的主程式,可以呼叫另一台機器上準備好的子程式,就像lpc 本地過程呼叫 越底層,越複雜 靈活性越高 效率越高 越上層,抽象封裝的越好 越簡單 ...
TCP IP和Socket的區別
要寫網路程式就必須用socket,這是程式設計師都知道的。而且,面試的時候,我們也會問對方會不會socket程式設計?一般來說,很多人都會說,socket程式設計基本就是listen,accept以及send,write等幾個基本的操作。是的,就跟常見的檔案操作一樣,只要寫過就一定知道。對於網路程式...
HTTP 和 Socket 的區別
要弄明白 http 和 socket 首先要熟悉網路七層 物 數 網 傳 會 表 應,如圖1 如圖1http 協議 超文字傳輸協議,對應於應用層,用於如何封裝資料.tcp udp 協議 傳輸控制協議,對應於傳輸層,主要解決資料在網路中的傳輸。ip 協議 對應於網路層,同樣解決資料在網路中的傳輸。傳輸...