Curl和Socket的區別

2021-09-22 12:31:54 字數 3595 閱讀 6353

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 協議 對應於網路層,同樣解決資料在網路中的傳輸。傳輸...