主動式與被動式FTP 差別

28 October 2010

FTP是一個特殊的protocol之一,

其他的protocol,如:http、pop3、....等等之類的,

都只需要1個connection、1個port。

但是FTP則不是,FTP需要2個connection、2個port。

一個是Command connection / port,用來傳遞client與FTP Server之間的command。(通常設在port 21)

另一個是Data connection / port,是用來傳遞資料的。(通常設在port 20)


一般的人都會認為關掉20、21port,FTP Server就會無法運作,

從某種角度來說,這樣的觀念是正確的,但是其實是錯誤的觀念!!

但這是在傳統式模式FTP的條件下,這樣的觀念才是正確的。

FTP主要分成兩種模式:
1.主動式(POST)
2.被動式(PASV)

傳統的FTP是採用主動式的模式進行連線,

底下為主動式FTP運作圖



1. client端會開啟一個大於1024port ( port x )對FTP Server的port 21進行connection

2. FTP Server會回應client端的connection,告知Client端收到連線了

3. FTP Server的port 20會主動和 Client端的port 1025(port x+1)進行連線(進行資料傳輸)


4. Client會回應Server端的連線。

看完步驟說明,大家會發現一個問題,

一開始client端會開啟兩個port,

port x (connection port)和port x+1 (data port)

在connection port沒有甚麼問題存在,

問題出在data port,

因為client端並不是自己建立一個connection,而是自行開啟一個port等待FTP Server連線進來

這很有可能被Client端的防火牆過濾掉



因此為了解決FTP連線到Client端被過濾掉的問題,所以發展出另一種連線模式

就是被動式模式

被動式模式不管是command  connection或是data connection都是由client端建立的

底下為運作圖



1. 首先,client端會開啟一個大於1024port ( port x )對FTP Server的port 21進行connection

2. FTP Server會回應client端的connection,並告知Client端,Server開啟了port 1200等待資料連線

3. Client端的port 1026會和FTP Server的port 1200進行資料連線

4. Server會回應Client端的連線。




使用了被動模式,解決了client端的問題,

可是相反的,也把這些問題帶給了server。





至於要用哪種模式,是由client端決定的,

client端會在command connection時發出POST或PASV的命令

但是server可以決定是否支援這些模式。



read more »


android multiple language

27 October 2010

android 多國語系開發!

android multiple language

只要將/res/values資料夾名稱改成您要支援的語系名稱

這裡假設,我們要有英文和中文的內容

那麼就在/res/values名稱改成/res/values-en,

然後再複製/res/values/,然後一樣改成values-zh-rTW


且將其底下的string.xml的內容改成該語系的內容。

android將會自動幫您判斷要呈現甚麼語言。

至於有支援什麼語系,可以去底下這網站上觀看ISO 639-1 Code

http://www.loc.gov/standards/iso639-2/php/code_list.php







read more »


Drawable (hdpi,ldpi,mdpi) 的分別

26 October 2010


Drawable (hdpi,ldpi,mdpi)的分別。

自從android 2.0.1版以後,只要新增project,

你會發現res/drawable資料夾變成!

/res/drawable-hdpi   【WVGA (480x800),FWVGA (480x854)】
/res/drawable-mdpi  【HVGA (320x480)】
/res/drawable-ldpi    【QVGA (240x320)】

大概知道是用來做mutilple screen的,但是沒有太care,

我通常都會把這三個通通刪掉,然後改成員先的/res/drawable(壞習慣,別學)

結果剛剛發現如果同張圖分別放在三個不同的資料夾

你會發現讀進來的圖檔大小都會不一樣喔!!!

太讓我surpriesed!!

我以為還要定義一個supports-screens的xml檔案

這些資料夾名稱的設置才會有用!






btw如果你跟我做法一樣,是三個刪掉,變成一個,

那麼預設值讀進來的圖大小會是以/res/drawable-mdpi為主

















read more »