編輯:關於Android編程
0、在認識HTTP前先認識URL
在我們認識HTTP之前,有必要先弄清楚URL的組成,例如:
http://www.******.com/china/index.htm
它的含義如下:
1. http://:代表超文本轉移協議,通知****.com服務器顯示Web頁,通常不用輸入;
2. www:代表一個Web(萬維網)服務器;
3.****.com/:這是裝有網頁的服務器的域名,或站點服務器的名稱;
4.China/:為該服務器上的子目錄,就好像我們的文件夾;
5.Index.htm:index.htm是文件夾中的一個HTML文件(網頁)。
1、什麼是HTTP
HTTP協議是一種應用層協議,HTTP是HyperTextTransfer Protocol(超文本傳輸協議)的英文縮寫。HTTP可以通過傳輸層的TCP協議在客戶端和服務器之間傳輸數據。HTTP協議主要用於Web浏覽器和Web服務器之間的數據交換。我們在使用IE或Firefox浏覽網頁或下載Web資源時,通過在地址欄中輸入,開頭的4個字母http就相當於通知浏覽器使用HTTP協議來和host所確定的服務器進行通訊。
HTTP/1.0
這是第一個在通訊中指定版本號的 HTTP協議版本,至今仍被廣泛采用,特別是在代理服務器中。
HTTP/1.1
當前版本。持久連接被默認采用,並能很好地配合代理服務器工作。還支持以管道方式在同時發送多個請求,以便降低線路負載,提高傳輸速度。
2、HTTP工作方式
HTTP協議采用了請求/響應的工作方式。基於HTTP1.0協議的客戶端在每次向服務器發出請求後,服務器就會向客戶端返回響應消息(包括請求是否正確以及所請求的數據),在確認客戶端已經收到響應消息後,服務端就會關閉網絡連接(其實是關閉TCP連接)。在這個數據傳輸過程中,並不保存任何歷史信息和狀態信息,因此,HTTP協議也被認為是無狀態的協議,圖1描繪了HTTP1.0協議的通訊過程。


<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PHN0cm9uZz4zPC9zdHJvbmc+PHN0cm9uZz6hojwvc3Ryb25nPjxzdHJvbmc+SFRUUDwvc3Ryb25nPjxzdHJvbmc+z+zTpsLrPC9zdHJvbmc+PC9wPgo8cD4KMXh4OtDFz6LP7NOmwOCjrLHtyr6908rVtb3H68fzsqLH0rzM0Pi0psDtPC9wPgo8cD4KMnh4OrSmwO2zybmmz+zTpsDgo6yx7cq+tq/X97G7s8m5pr3TytWhosDtveK6zb3Tytw8L3A+CjxwPgozeHg61ti2qM/yz+zTpsDgo6zOqsHLzeqzyda4tqi1xLav1/ejrLHY0Ou908rcvfjSu7K9tKbA7TwvcD4KPHA+CjR4eDq/zbuntsu07c7zo6y/zbunx+vH87D8uqzT77eotO3O87vy1d/Kx7K7xNzV/ci31rTQ0DwvcD4KPHA+CjV4eDq3/s7xtsu07c7zo6y3/s7xxveyu8Tc1f3It9a00NDSu7j21f3It7XEx+vH8zwvcD4KPHA+IDwvcD4KPHA+PHN0cm9uZz40PC9zdHJvbmc+PHN0cm9uZz6hojwvc3Ryb25nPjxzdHJvbmc+SFRUUDwvc3Ryb25nPjxzdHJvbmc+tcTH68fzzOXT67vYuLTM5Twvc3Ryb25nPjwvcD4KPGltZyBzcmM9"/uploadfile/Collfiles/20140628/2014062808512620.jpg" alt="\">

5、兩種HTTP通信
(1)HttpURLConnection
(2)HttpClientURLConnection
下面舉例說明第一種HttpURLConnection
private class DownThread extends Thread
{
// 當前線程的下載位置
private int startPos;
// 定義當前線程負責下載的文件大小
private int currentPartSize;
// 當前線程需要下載的文件塊
private RandomAccessFile currentPart;
// 定義已經該線程已下載的字節數
public int length;
public DownThread(int startPos, int currentPartSize,
RandomAccessFile currentPart)
{
this.startPos = startPos;
this.currentPartSize = currentPartSize;
this.currentPart = currentPart;
}
@Override
public void run()
{
try
{
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url
.openConnection();
conn.setConnectTimeout(5 * 1000);
conn.setRequestMethod("GET");
conn.setRequestProperty(
"Accept",
"image/gif, image/jpeg, image/pjpeg, image/pjpeg, "
+ "application/x-shockwave-flash, application/xaml+xml, "
+ "application/vnd.ms-xpsdocument, application/x-ms-xbap, "
+ "application/x-ms-application, application/vnd.ms-excel, "
+ "application/vnd.ms-powerpoint, application/msword, */*");
conn.setRequestProperty("Accept-Language", "zh-CN");
conn.setRequestProperty("Charset", "UTF-8");
InputStream inStream = conn.getInputStream();
// 跳過startPos個字節,表明該線程只下載自己負責哪部分文件。
inStream.skip(this.startPos);
byte[] buffer = new byte[1024];
int hasRead = 0;
// 讀取網絡數據,並寫入本地文件
while (length < currentPartSize
&& (hasRead = inStream.read(buffer)) > 0)
{
currentPart.write(buffer, 0, hasRead);
// 累計該線程下載的總大小
length += hasRead;
}
currentPart.close();
inStream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
swift版QQ音樂播放器(二)
一 完善部分的QQ音樂效果圖二 需要完善點1 歌曲的切換和暫停播放2 歌曲當前播放時間和歌曲總時間的更新3 進度條的處理4 歌手頭像處理5 頭像動畫效果6 歌詞的進度顯示
android 圖片選擇器 圖片預覽
需求:近段時間公司有要求寫一個類似於微信發送圖片時,用來選擇照片的一個圖片浏覽器,本來想在網上找一個直接拿來用,找尋無果,只能自己寫了。相信有很多網頁也有這
Android基礎入門教程——2.4.9 GridView(網格視圖)的基本使用
1.相關屬性:下面是GridView中的一些屬性: android:columnWidth:設置列的寬度 android:gravity:組件對其方式 and
Android 2D繪圖解析之 Canvas,Paint
【Android 2D繪圖解析】系列文章將全面介紹Android繪圖相關,這篇簡單介紹下如何利用Android API進行一些簡單圖形的繪制,繪圖的前提是需要繼承自Vie