天天看點

URLConnection和Socket和HttpClient的差別

一、URL通信和Socket的差別。

       利用socket進行通信時,在伺服器端運作一個socket通信程式。伺服器端不停地監聽某個端口,等待客戶的連接配接申請,接到申請後建立連接配接并進行通信,是以,在socket通信方式中,伺服器是主動等待連接配接通信的到來。

       利用URL進行通信時,在伺服器端常駐一個CGI程式,但它一直處于休眠狀态。隻有在用戶端要求建立連接配接時才被激活,然後與使用者進行通信。是以,在URL 通信方式中,伺服器是被動等待連接配接通信的到來。

       由于URL通信和socket通信的方式不同,是以,它們有各自的特點。

       利用socket進行通信時,伺服器端的程式可以打開多個線程與多個客戶進行通信,還可以通過伺服器使各個客戶之間進行通信。這種方式比較靈活,适用于一些較複雜的通信,但是伺服器端的程式必須始終處于運作狀态以監聽端口。

       利用 URL進行通信時,伺服器端的程式隻能與一個客戶進行通信,形式比較單一。但是它不需要伺服器端的CGI程式一直處于運作狀态,隻是在有客戶申請時才被激活。是以,這種方式比較适用于客戶機的浏覽器與伺服器之間的通信。

    總之,Socket是底層實作,協定你要自己去寫,不局限于http,可以是任何協定。而類似HttpClient, FtpClient,URLConnetcion之類的,是對專屬協定的封裝,當然由于部分實作原理,你可能無法完全控制連接配接操作,比如setTimeout這個參數。

二、URLConnection和HttpClient的差別。

       首先:在 JDK 的 java.net 包中已經提供了通路 HTTP 協定的基本功能:HttpURLConnection。但是對于大部分應用程式來說,JDK 庫本身提供的功能還不夠豐富和靈活。

       例如在Android中,AndroidSDK中內建了Apache的HttpClient子產品,用來提供高效的、最新的、功能豐富的支援 HTTP 協定工具包,并且它支援 HTTP 協定最新的版本和建議。使用HttpClient可以快速開發出功能強大的Http程式。

其次:HttpClient是個很不錯的開源架構,封裝了通路http的請求頭,參數,内容體,響應等等,

       HttpURLConnection是java的标準類,什麼都沒封裝,用起來太原始,不友善,比如重通路的自定義,以及一些進階功能等。HttpClient就是一個增強版的HttpURLConnection,HttpURLConnection可以做的事情HttpClient全部可以做;HttpURLConnection沒有提供的有些功能,HttpClient也提供了,但它隻是關注于如何發送請求、接收響應,以及管理HTTP連接配接。