Java網絡編程之socket使用小結

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,以讀取基本數據類型和字符串。

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)多用途互聯網郵件擴展類型,是設定某種擴展名文件用哪一種應用程序來打開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動使用指定應用程序來打開。
發佈了37 篇原創文章 · 獲贊 22 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章