精華區beta Programming 關於我們 聯絡資訊
Socket連接的型式 Socket的連接可以分為三種基本的型式,來反映如何初始化這個連接、 與是什麼連接到本地的Socket,而這三種型式為: ‧客戶端連接(Client connections) ‧聽(Listen connections) ‧伺服端連接(Server connections) 一旦完成客戶端Socket的連接,我們是無法從客戶端連接辨別伺服端連 接的。兩端有一樣的功能和收取事件(event)中相同的資料型態。只有"聽" 是在根本上與其他兩者不同。 客戶端連接(Client connections) 客戶端連接能從本地的客戶端Socket來連接上在遠處的伺服端Socket。而客 戶端連接是由客戶端Socket來做初始的。首先客戶端連接必須敘述它想連接 的伺服端Socket,接著查詢這個伺服端Socket是否存在,然後提出連接的要 求。伺服端Socket不一定會立刻完成這個連接,在伺服端Socket中有一個佇 列(queue)存放客戶端的要求,只有當這個要求從佇列中被取出時才會完成 連接。當伺服端Socket接到客戶端的連接要求時,它會送出一份伺服端Socket 完整的敘述給要與它連接的客戶端Socket,然後這個連接才算完成。 聽(Listen connections) 伺服端Socket並不是位於客戶端中,換句話說,它是被動的型式,它是處於 聽取客戶端要求的"半連接(half connections)狀況"。伺服端Socket是透過一個 佇列來與"聽"做連絡,這個佇列中記錄著來自客戶端的要求。當伺服端Socket 接到一個客戶端的連接的要求時,它會產生一個新的Socket來與客戶端連接。 所以"聽"可以繼續開啟著,來接受客戶端的要求。 伺服端連接(Server connections) 伺服端連接是當"聽"接收到一個客戶端的要求時,由伺服端Socket所產生的。 當伺端接到這個連接的要求時,它會送出一份伺服端Socket的敘述給要與它連 接的客戶端,而當客戶端Socket接收到這份敘述時,這個連接的工作才算建立 與完成。 Socket的敘述 Socket讓你的網路應用程式可以透過網路與其他的系統溝通。每一個Socket可 以被視為在網路連接中的一個端點。它有一個地址來識別 ‧它所處於的系統 ‧它所了解的介面型態 ‧它連接時所使用的埠 要完整的敘述一個Socket連接,你必須提供要連接的兩端的地址。 在你可以產生一個socket連接之前,你必需完整的敘述你所希望的連接。 一些在你應用程式所使用的系統上所提供的資訊是有用的,例如說:你不須要 去敘述本地機器的位址,這個資訊作業系統可以提供。 而一些資訊你必須倚靠你所使與的Socket的型態來提供,客戶端Socket必有它想 連接的伺服端的敘述,"聽"Socket必須有埠來代表它所提供的服務。 一個socket連接端點的完整 敘述必須包括兩端的IP位址和埠號。 主機(host)的敘述 主機就是你跑這個包含Socket的應用程式的系統,你可以用給一個socket這主機 的IP位址的方法,來敘述這個主機。IP位址(IP address)是一個字串,包含四個數 字,每個數字以點(dot)隔開。就像是: 123.197.1.2 。而一個單一的系統可能會提 供一個以上的IP位址。 但IP位址往往不好記,且容易打錯。有一個替代的方法就是使用主機名稱 (host name)。主機名稱就是你常在URL上看到的IP位址的別名。它是以一段字 串來表示,其中包括領域的名稱和服務,就像是:http://www.wSite.com 大部分的intranet會提供這個系統在網際網路的IP位址的主機名稱。在Windows95 和NT的機器,如果沒有主機名稱,你可以自己開一個來對應你的IP位址,你只 要去編輯HOSTS這個檔案就可以了。詳細內容請參閱Microsoft document。 伺服端Socket並不需要去指定一個主機,這個本地機器的IP位址可以由 系統來提供,如果這個本地的系統擁有超過一個以上的IP位址,伺服端會同步的 在所有的IP位址上聽取客戶端的要求。當一個伺服端Socket接到一個連接時,這 個客戶端Socket必須提供其遠端的位址。 客戶端Socket需要遠端機器所提供的IP位址或主機名稱來指定其要連接的主機。 選擇主機名稱或IP位址 大部分的應用程式用主機名稱來指定一個系統,主機名稱容易記且容易檢查印刷 上的錯誤。此外,伺服器可以改變系統或IP位址,但仍使用同一個獨有的主機名稱。 使用主機名稱可以讓客戶端Socket來尋找這個主機名稱的抽象表示法,即使它改變了 IP位址。 如果不知道這個主機的名稱,那客戶端Socket必須用IP位址來只定伺服端系統了。 用IP位址來指定伺服端系統是比較快的。當你提供主機名稱時,Socket必須先搜尋與這 個主機名稱對應的IP位址,然後才能連上伺服端系統。 -- ※ Origin: 鳥窩 (BirdNest.AceArt.Net) ◆ From: dial4.20365189.gcn.net.tw