2013/12/16

[Java] Web Server撰寫

網路的連線可以分成TCP以及UDP連線,TCP是連線導向且為可靠式,傳送上以每個byte為單位,有重傳機制確保資料可以正確地送到目的IP位址,適合用在傳輸文字、各種檔案、HTTP網路連線等這種不能損失封包的資料上,缺點是較無效率;而UDP則是非連線導向且為不可靠式,傳送上以每個packet為單位,因為不保證資料都能夠送達目的地,沒有重傳機制,速度較快,適合用在傳輸影音串流上,缺點是封包會有損失。

網路的連線可以從Physical layer -> Data Link layer -> Network layer -> Transport layer -> Application layer來探討,舉HTTP這個在user上的application為例子,是透過網路連線,經過電腦的MAC和IP位址,還有IP port number 80,最後透過HTTP的protocol來連線溝通。

2013/12/10

[Android] Bundle Error: java.lang.NullPointerException

使用Eclipse編寫Android程式,撰寫兩個Activity以上之間的切換,常常Activity之間會需要有資料的傳遞,就必須要透過Intent()及Bundle()來完成。

Android的資料傳遞架構如下

2013/12/09

[網際網路] 乙太網路封包格式(MAC Frame Format)

Ethernet (802.3 MAC frame format)

在網路傳輸資料是透過所謂的封包來傳送,封包內包含了目的及來源的MAC位址、IP和Port,才能夠讓資料正確的傳送到目的地。不過整個電腦的網路是利用各種網路拓樸連結在一起,有時候封包間會發生碰撞的問題,可以想像成在單行道上,兩台車都要通過,就會造成堵塞的現象。因此透過CSMA/CD(Carrier Sense Multiple Access with Collision, IEEE 802.3)的設計,訂定出了網路的封包大小最小為64bytes;最大為1518bytes,來避免封包碰撞的現象。

TCP/IP封包為例子,扣掉MAC位址及一些辨識碼[6(DA)+6(SA)+2(Ether type)+4(FCS)=18bytes],因此IP封包的大小為46~1500bytes,所以也常常會看到人家說網路的MTU1500bytes,就是這麼來的。

2013/12/05

[Linux] 常用指令:chmod

在執行Linux的執行檔時,有時候會發現並不能執行,這是因為目前的使用者沒有這個權限。
權限的概念在Linux中很常使用,有分為 user / group / other三種,根據不同的使用者狀態,就會有不同的檔案使用權限( read / write / execute ) 。

要改變使用權限就要使用chmod指令
chmod [options] mode file

-R recursive, i.e. include objects in subdirectories

-rwx 421

[Linux] 常用指令:grep

除了find之外,還有一個類似的指令是grep,這指令主要用來搜尋檔案裡相關的程式碼結果,在trace code的時候都非常的好用。

用法:
grep [-acinv] [--color=auto] 'find things' filename

-d, --directories=ACTION  how to handle directories;
-R, -r, --recursive       equivalent to --directories=recurse
-n, --line-number         print line number with output lines

[Linux] 常用指令:find

在Linux中常常會需要尋找檔案,這時候就要利用find這個指令來達成。

用法:
find [PATH] [option] [action]

-type [bcdpflsD] 搜尋檔案的類型為 TYPE 的,類型主要有:一般正規檔案 (f), 裝置檔案 (b, c), 目錄 (d), 連結檔 (l), socket (s), 及 FIFO (p) 等屬性。

-iname filename 不限大小寫

-exec command 將搜尋結果執行command動作

2013/11/29

[OpenVPN GUI] Server及Client設定

OpenVPN GUI是一套簡單好操作的設定軟體,來讓電腦可以透過虛擬的VPN網域來上網。對於常出差的朋友們來說,能夠利用VPN來上一些被擋掉的網站,也是挺方便的!

OpenVPN的下載網址
注意下載的時候要注意電腦是32位元還是64位元的系統,如果是64位元建議到以下網站下載
http://openvpn.se/download.html
另一個下載地址
http://openvpn.net/

原因是因為一開始架設的時候採用http://openvpn.net/下載的檔案,在32位元的電腦上架client沒有問題,但是64位元的server端一直架不起來,發現Error訊息如下


Wed Nov 27 19:03:25 2013 CreateFile failed on TAP device: \\.\Global\{498541F0-8CBD-4231-8F00-F9F4F2152179}.tap
Wed Nov 27 19:03:25 2013 All TAP-Win32 adapters on this system are currently in use.
Wed Nov 27 19:03:25 2013 Exiting

會發現OpenVPN建立的虛擬網卡TAP device架不起來,Google一下才知道是位元版本有問題,因此64位元的作業系統請按這裡下載,避免OpenVPN架設失敗。


2013/11/28

[jQuery] Object和Array的不同及應用

寫網頁常常會需要在表格中列出大量相似的資料,這時候array和object就很好用。

array與一般的程式語言相同,擁有index及value,只要輸入index值,就可以得到存放在array之中的value;而object也類似,但不同的點在於,object有所謂的key及value,可以自己定義存放在object中的value的key是什麼,輸入這個key就可以得到相對應的值。


2013/11/22

[JAVA] Socket網路server/client文字傳輸程式

想要練習對程式語言的各種應用熟悉程度,像是檔案I/O、執行緒、網路Socket還有程式介面,最快速的方式就是寫一個類似MSN的文字傳輸程式。既可以綜合練習到以上的部分,還可以藉由撰寫的過程中,更加了解程式語言。

JAVA也不例外,物件程式導向的程式語言,筆者對此一直還懵懵懂懂,但透過撰寫這個程式,對於類別架構、Socket還有AWT(Abstract Window Toolkit)物件的應用,更有不同的心得。


2013/11/18

[Wi-Fi] IEEE 802.11 a/b/g/n/ac 有什麼差別?

在市面上的行動通訊產品,常常會看到IEEE 802.11 a/b/g/n 或者 IEEE 802.11 ac的規格,但這幾種規格到底有什麼差異呢?

Wi-Fi使用的radio frequency頻段為2.4GHz或者5GHz,簡單整理成下表:
Protocol
Frequency
Max PHY Rate
Inside
Outside
Legacy
2.4-2.5GHz
2Mbps
-
-
802.11a
5.15-5.35GHz
5.47-5.725GHz
5.725-5.875GHz
54Mbps
30m
45m
802.11b
2.4-2.5GHz
11Mbps
30m
100m
802.11g
2.4-2.5GHz
54Mbps
30m
100m
802.11n
2.4 / 5GHz
150Mbps(40MHz * 1MIMO)
600Mbps(40MHz * 4MIMO)
70m
250m
802.11ac
5GHz
200Mbps(40MHz * 1MIMO)
433.3Mbps(80MHz * 1MIMO)
866.7Mbps(160MHz * 1MIMO)
35m


其中 IEEE 802.11b/g 為2.4GHz的RF頻段,802.11g為802.11b的升級版,最大PHY rate從11Mbps提升到了54Mbps;IEEE 802.11a為5GHz頻段,最大PHY rate為54Mbps。所使用的channel頻寬都是20MHz。

2013/11/15

[Iperf] 簡單測試網路效能

想要測試無線網路、有線網路的效能,可以簡單透過iperf這個工具來測試。
可以從Iperf下載iperf到電腦,windows / linux / Mac都可以使用。

設定的方式,首先先確認兩台測試的電腦在同一個區域網段之下或者能夠透過預設閘道或路由器去連線到不同網域的電腦。可以用ping來測試兩台電腦之間的連線。

iperf 簡介
--------------------------------------------------------
-s    server 模式
-c    client 模式
-w    TCP windows設定
-t    測試總時間(秒)
-i    每隔幾秒show速度在cmd視窗上
--------------------------------------------------------