2014年6月28日 星期六

Stream、Port、Ping、Socket

不知道有沒有人試過在瀏覽器的網址輸入欄中輸入「file:///」後面接上某檔案的路徑,然後按下「Enter」,看看會發生什麼事?........

很多檔案其實都可以用這種方式開啟。



因為這就是Stream與Port的概念。



在電腦中,中央對外溝通是藉由Port。

主機板要跟網路溝通?用Port。

主機板要跟列表機溝通?用Port。

主機板要跟硬碟要資料?用Port。

幾乎每個Port都有特定的工作,(或只能執行特定的工作,或是先佔先贏,程式大多會衝突,很多時候就是因為搶Port、或是對Port的設定沒有彈性。)

打入網址,瀏覽器會從Port編號:8080去跟外界網路溝通;如果打入檔案路徑,可能也是從Port編號:8080,但也可能不是,(我不想探究!Java耶!細問這麼多?)

重點是對電腦的中央來說,這都只是資料藉由Stream傳入或傳出而已,數據機跟網路怎麼處理從中央傳入的資料?中央才不管!(或許可以想像哪天真的把網址傳給硬碟,會發生怎樣有趣的事情呢?硬碟會變成變型金剛?)



但真正的問題是:Stream本身只管檢查自己是否可以傳出或傳入資料,能否建立Stream,這完全不是Stream自己可以控管的。

所以有File類別來檢查「檔案路徑是否存在」,所以有各種硬體管理類別來檢查「特定硬體是否存在」。

Socket就是用來檢查「指定的連線IP是否存在、是否可以進行連線」的類別。

網路連線的第一步就是「檢查IP是否正常、正確、可以連線?我在CMD模式下打入[Ping]+[ IP],會收到怎樣的結果?」,但Stream本身都不具備這些功能,這就是我們需要Socket的原因。

所以要清楚意識到Socket並不是用來進行資料傳輸溝通的主體!Stream才是!

雖然沒有Socket就沒有Stream,沒有Stream、Socket只是好看的工具,但這兩者並沒有絕對的依存關係。(.........講是這樣講,但我也不知道怎麼樣不靠Socket建立網路連線。)



學習使用Java Socket,大部分的新手都是死在這個認知上。

能夠清楚、易懂傳達這個認知的文章.......對不起!沒看過。(我也是別人明明白白講給我聽、甚至試範給我看後,才搞懂這一切。)

2 則留言:

  1. 回覆
    1. 感謝

      不會因為這文沒什麼程式碼跟範例就跳過它

      如果能夠造成實際的幫助 或幫我驗證這樣的「說明」對於新手的成效 我會更感謝

      刪除