網路程式設計、常用的通訊協議、Socket套接字程式設計(Socket和ServerSocket)、埠號
網路程式設計:
java語言中,提供了一套統一的程式設計介面。很多細節都已經底層化。
所在,可以進行無痛的網路通訊程式設計。
提供的是Socket套接字技術。
--常用的通訊協議:
(1)TCP/IP:在通訊之前,需要建立連線,通訊之後需要斷開連線,
一般會有一個做為伺服器端,有一個做為客戶端。
主要將通訊模式分成四個層:
1)應用層
2)傳輸層
3)IP層
4)程式設計介面層
(2)UDP: 不需要建立連結,相對來說,開銷比較小,效率高。
--型別:java.net.InetAddress
提供了用於獲取和描述主機和IP的資訊功能
常用方法:
static InetAddress getByName(String host):
返回一個指定字串主機的地址物件
主機名:可以使用IP來描述,還可以使用域名來描述(通常域名會繫結一個IP地址)
String getHostName():
返回用於描述主機的字串名稱
String getHostAddress():
返回用於描述主機的IP地址
static InetAddress getLocalHost():
返回本地主機地址物件
--套接字程式設計:
(1)Socket:
在客戶端使用,連線成功後會獲取一個Socket物件
(2)ServerSocket:
在伺服器端使用建立伺服器端套接字物件,當被連線成功後,
會獲取一個Socket物件。
注意:通訊時使用各自獲取的Socket物件來通訊的。
--程式設計步驟:
1)伺服器物件
2)伺服器等待被連線
3)客戶端連線伺服器(成功與否)
4)客戶端與伺服器進行通訊
5)斷開連線
--埠號:是一個16位的無符號二進位制整數,範圍0~65535。
和IP一起是用來指定一個執行中程式的位置。
所以這麼說:
埠號是執行中程式的唯一識別符號,即
程式執行時,埠號不能碰撞。
通常0~1023是作業系統預定義的埠號,所以我們在
自定義時,應該儘可能的使用1024~65535這個範圍內
的數。
--ServerSocket類的使用:
構造器:
ServerSocket(int port);
建立一個指定埠號的ServerSocket物件
常用方法:
Socket accept():
等待客戶端連線,返回客戶端的Socket物件
void close():
關閉此套接字
InetAddress getInetAddress():
獲取伺服器端的本地地址
int getLocalPort():
獲取伺服器端的埠號
SocketAddress getLocalSocketAddress():
返回此套接字繫結到的端點的地址。
--Socket類的使用:
構造器:
Socket(String host,int port);
向指定主機名和指定埠號的服務傳送請求連線,
連線成功,會獲取Socket物件。
常用方法:
void close():
關閉套接字
InetAddress getInetAddress():
返回套接字所連線伺服器的地址
int getPort():
返回套接字所連線遠端機器的埠號
int getLocalPort():
返回本地的埠
InputStream getInputStream():
獲取輸入流物件,接收遠端機器傳送的資訊
OutputStream getOutputStream():
獲取輸出流物件,向遠端機器傳送資訊
setSoTimeout(int timeout):設定超時時長
在實際應用中,程式可能不想讓執行網路連線、讀取伺服器資料的程序一直阻塞,
而是希望當網路連線、讀取操作超過合理時間之後,
系統自動認為該操作失敗,
這個合理時間就是超時時長
=======================================================================================
補充:
IP地址:32位整數 202.9.128.88
用於唯一地標識網路上的一個通訊實體,
埠:
加入多執行緒:伺服器端應該為每個Socket單獨啟動一個執行緒,
每個執行緒負責與一個客戶端進行通訊,
該執行緒負責讀取從客戶端傳送過來的資料,
並將讀到的資料“廣播”給其他客戶端,
因此,需要在伺服器端使用Map來儲存所有的Socket
URL:統一資源定位器
它是指向網際網路”資源“的指標,
通常情況下,URL可以由協議名、主機名、埠、資源組成
eg: protocol://host:port/resourceName
http://www.crazyit.org/index.php
URLConnection:應用程式和URL之間的通訊連線
程式可以通過URLConnection例項向該URL傳送請求、讀取URL引用的資源
###:如果既要使用輸入流讀取URLConnection響應的內容,
又要使用輸出流傳送請求引數,
則一定要先使用輸出流,再使用輸入流
HttpURLConnection:應用程式與URL之間的HTTP連線
URLPermission工具類:管理HttpURLConnection的許可權問題