前言 :
在 TCP/IP 底層的運作必須處理封包、標頭、格式、交握等的細節,這實在不是什麼好差事,為此Berkeley UNIX提出Socket的概念,將網路連線簡化為資料流(data stream)的概念,這個資料流在客戶端與伺服端各有一個接口(port),而資料流就像是在一個連接兩接口的纜線中傳遞,程式設計人員使用 Socket的概念來撰寫網路連線程式,只要處理主機資訊與連接埠,而不用關心底層的瑣碎運作.
Socket 類別 :
簡而言之,就如同檔案輸出入一樣,Socket將網路連線也視作一種輸出入的動作,資料的傳遞就像是將資料寫入與讀入.
在Java中提供 Socket類別 來支援Socket概念,底下為支援的建構式 :
您可以直接指定主機名稱來建立Socket物件,然而使用InetAddress會比較有效率,在真正進行Socket連線之前,如果在建立InetAddress物件時無法取得主機資訊,則可以提前進行相關的處理. 下面這個程式可以讓您掃描指定主機上所開啟的連接埠(0~1023),這邊指定本機為對象建立Socket連線,如果某個連接埠有開啟,就會建立連線,此時顯示該連接埠開啟的訊息 :
在建立了Socket物件之後,可以取得Socket物件的相關資訊,例如 :
以上的方法由上而下分別為取得Socket連接對象位址、連接對象連接埠、本機連接埠、本機位址.
如果要取過Socket物件接受或輸出資訊,可以使用 getInputStream() 與 getOutputStream() 兩個方法,就如同檔案I/O 一樣,您只要將它當作串流資料來處理即可,至於網路上的資訊是如何交換的,您並不用得知,Java會自動幫您完成相關的協定確認.
下面這個程式模擬Telnet程式,您可以用它來與遠端主機進行「以行為主」的文字或指令溝通,也就是每下一行文字或指令就按Enter鍵,然後程式會將您的指令傳送出去,並顯示遠端主機的回應訊息,為了同時處理遠端主機的回應與本機使用者的輸入,程式使用多執行緒 :
執行結果 : 下面的執行結果是連接至FTP站台的測試,可以輸入簡單的ASCII指令跟FTP站台互動(使用FTP協定指令)
補充說明 :
* Wiki : TCP/IP model :
* Java基本功:Socket Timeout有兩種
在 TCP/IP 底層的運作必須處理封包、標頭、格式、交握等的細節,這實在不是什麼好差事,為此Berkeley UNIX提出Socket的概念,將網路連線簡化為資料流(data stream)的概念,這個資料流在客戶端與伺服端各有一個接口(port),而資料流就像是在一個連接兩接口的纜線中傳遞,程式設計人員使用 Socket的概念來撰寫網路連線程式,只要處理主機資訊與連接埠,而不用關心底層的瑣碎運作.
Socket 類別 :
簡而言之,就如同檔案輸出入一樣,Socket將網路連線也視作一種輸出入的動作,資料的傳遞就像是將資料寫入與讀入.
在Java中提供 Socket類別 來支援Socket概念,底下為支援的建構式 :
您可以直接指定主機名稱來建立Socket物件,然而使用InetAddress會比較有效率,在真正進行Socket連線之前,如果在建立InetAddress物件時無法取得主機資訊,則可以提前進行相關的處理. 下面這個程式可以讓您掃描指定主機上所開啟的連接埠(0~1023),這邊指定本機為對象建立Socket連線,如果某個連接埠有開啟,就會建立連線,此時顯示該連接埠開啟的訊息 :
在建立了Socket物件之後,可以取得Socket物件的相關資訊,例如 :
以上的方法由上而下分別為取得Socket連接對象位址、連接對象連接埠、本機連接埠、本機位址.
如果要取過Socket物件接受或輸出資訊,可以使用 getInputStream() 與 getOutputStream() 兩個方法,就如同檔案I/O 一樣,您只要將它當作串流資料來處理即可,至於網路上的資訊是如何交換的,您並不用得知,Java會自動幫您完成相關的協定確認.
下面這個程式模擬Telnet程式,您可以用它來與遠端主機進行「以行為主」的文字或指令溝通,也就是每下一行文字或指令就按Enter鍵,然後程式會將您的指令傳送出去,並顯示遠端主機的回應訊息,為了同時處理遠端主機的回應與本機使用者的輸入,程式使用多執行緒 :
執行結果 : 下面的執行結果是連接至FTP站台的測試,可以輸入簡單的ASCII指令跟FTP站台互動(使用FTP協定指令)
補充說明 :
* Wiki : TCP/IP model :
* Java基本功:Socket Timeout有兩種
沒有留言:
張貼留言