PS:本文是自己學習Java網路編程過程中記錄的筆記,算是對學過的內容進行一下總結。 網路編程基礎知識
URL(Uniform Resource Locater)統一資源定位器,表示網路中資源的位置。(可以是一個檔案或目錄,也可以是一個資料庫)
URL常見格式如下:傳輸協議://主機名稱:連接埠號碼:檔案名稱(例如——http://192.168.1.110:80/Index.html),其中參數的說明如下:
傳輸協議是指擷取資源的方式,如http、ftp、tftp和telent等;
主機名稱可以是IP地址,也可以是主機網域名稱;
連接埠號碼對應不同的網路服務(http協議預設的連接埠號碼是80);
檔案名稱是資源檔的完整路徑(相對於伺服器所指定訪問的預設根目錄的相對路徑)
關於檔案路徑的描述:假設某個檔案的絕對路徑為E:\Demo\Eclipse\NET\URL\URLdemo1\output.html,表示為"E:\\Demo\\Eclipse\\NET\\URL\\URLdemo1\\output.html",(逸出字元)注意分隔字元為"\\"(Windows)。注意Java所啟動並執行平台,不同的系統(如Windows和Linux)分隔字元不同,在Windows下為\,在Linux下為/。 Socket編程
Java支援基於流的通訊(stream-basedcommunication)和基於包的通訊(packet-basedcommunication)。基於流的通訊使用TCP,基於包的通訊使用UDP,java中通過建立通訊端(socket)來進行網路通訊。 伺服器通訊端(server socket)
下面的語句建立一個伺服器通訊端,並將它附加到一個連接埠上:
<span style="font-family:Courier New;font-size:14px;">ServerSocketserversocket = new ServerSocket(port);</span>
如果企圖在已經使用的連接埠上建立伺服器通訊端,會導致java.net.BindException異常。
建立伺服器通訊端之後,伺服器使用下面的語句監聽串連:
<span style="font-family:Courier New;font-size:14px;">Socket socket =serversocket.accept();</span>
用戶端通訊端(socket)
用戶端執行下面的語句,請求與伺服器進行串連:
<span style="font-family:Courier New;font-size:14px;">Socketsocket = new Socket(serverName, port);</span>
上面的語句開啟一個通訊端,使用戶端程式能夠與伺服器進行通訊,其中serverName是伺服器的主機名稱或IP地址。如果找不到指定的主機,Socket構造方法會拋出異常java.net.UnknownHostException。 通過通訊端進行資料轉送
通過調用通訊端對象的 getInputStream() 和 getOutputStream() 方法,來擷取輸入/輸出流。InputStream 流和 OutputStream 流用來讀取或寫入位元組,可以使用DataInputStream、DataOutputStream、BufferedReader 和 PrintWriter 來封裝 InputStream 和 OutputStream,以讀取基礎資料型別 (Elementary Data Type)和字串。 InetAddress類
InetAddress代表IP地址,它有兩個子類:Inet4Address、Inet6Address,分別代表IPv4和IPv6地址。該類沒有提供建構函式,只能通過它提供的兩個靜態方法來擷取InetAddress執行個體。
<span style="font-family:Courier New;font-size:14px;">getByName(String host);//根據提供的主機名稱,擷取對應的InetAddress執行個體getByAddress(byte[] addr);//根據提供的IP地址,擷取對應的InetAddress執行個體</span>
在伺服器程式中使用 InetAddress 類來擷取用戶端的主機名稱和IP地址。在伺服器程式中通過以下語句可以得到與用戶端相串連的通訊端的一個InetAddress執行個體:
<span style="font-family:Courier New;font-size:14px;">InetAddressinetAddress = socket.getInetAddress();</span>
還可以使用 InetAddress 類的靜態方法 getByName() 通過主機名稱或IP地址建立一個 InetAddress 執行個體。
<span style="font-family:Courier New;font-size:14px;">InetAddressinetAddress = InetAddress.getByName(“Jack”);</span>
使用URLDecoder和URLEncoder
當URL地址裡包含非西歐字元(比如中文字元)的字串時,系統會將這些非西歐字串轉換application/x-www-form-urlencoded MIME字串。
URLDecoder 類包含一個 decode(Strings, String enc) 靜態方法,完成從 ...MIME 到一般字元串的轉換。(解碼)
URLEncoder 類包含一個 encode(Strings, String enc) 靜態方法,完成從一般字元串到 ...MIME的轉換。(編碼) MIME(MultipurposeInternet Mail Extensions)多用途互連網郵件擴充類型,是設定某種副檔名的檔案用哪一種應用程式來開啟的方式類型,當該副檔名檔案被訪問的時候,瀏覽器會自動使用指定應用程式來開啟。