1. 程式人生 > >20175120彭宇辰 《Java程序設計》第十一周學習總結

20175120彭宇辰 《Java程序設計》第十一周學習總結

inter chapter local 發送數據包 out 一周 技術 輸出流 必須

教材內容總結

第十三章 Java網絡編程

一、URL類

一個URL對象包含的三個基本信息:協議、地址和資源。

-協議:必須是URL對象所在的Java虛擬機支持的協議,常用的有:Http、Ftp、File協議

-地址:必須是能連接的有效IP地址或域名

-資源:可以是主機上的任何一個文件

1.URL的構造方法

public URL (String spec) throws MalformedURLException
//所包含的資源位默認的資源(主頁)
public URL(String protocol,String host,String file) throws MalformedURLException
//protocol指定協議,host指定地址,file指定資源

2.讀取URL中資源

URL對象調用InputStream openStream()方法返回一個輸入流。

二、InetAddress類

1.地址的表示:域名和IP地址

2.獲取地址

-獲取Internet上主機地址

getByName(String s)//將一個域名或 IP 地址傳遞給該方法的參數 S,獲得一個 InetAddress 對象;
public String getHostName()//獲取InetAddress對象所含的域
public String getHostAddress()//獲取InetAddress對象所含的IP地址

-獲取本地機地址:getLocalHost()

三、套接字

當兩個程序需要通信時,它們可以通過使用Socket類建立套接字對象並連接在一起(端口號和IP地址的組合得出一個網絡套接字)。

1.客戶端套接字

//建立連接到服務器的套接字對象
try { Socket clientSocket = new Socket("http://192.168.0.78",2010);
}  //(IP,端口號)
catch(IOException e) {}

  其中Socket使客戶端連接到服務器,其構造方法是Socket(String host,int port)//host是服務器IP地址,port是端口號

2.服務器端套接字

//建立ServerSocket對象
try{ ServerSocket serverForClient = new ServerSocket(2010);
}//(端口號)
catch(IOException e) {}

  其中ServerSocket使服務器連接到客戶端,其構造方法是ServerSocket(int port)//port與客戶端相同

3.連接過程

-套接字對象clientSocket建立後,調用getInputStream()獲得一個輸入流,輸入流的源與服務器端一個輸出流的目的地相同

-調用getOutputStream()獲得輸出流,其目的地與服務器端一個輸入流的源相同

-建立服務器端ServerSocket對象serverSocket建立後,使用accept()將客戶端套接字與服務器端套接字連接

//使用accept()方法將客戶端和服務器端套接字連接起來
try{ Socket sc = serverForClient.accept();
}
catch(IOException e) {

  PS:accept方法會阻塞線程的執行,直到接收到客戶的呼叫。

4.使用多線程技術

-從套接字連接中讀取數據與從文件中讀取數據有著很大的不同,從文件中讀取數據時,所有的數據都已經在文件中了,而使用套接字連接時,可能在另一端數據發送之前,

就已經開始讀取了。因此,為了防止堵塞線程,服務器端收到一個客戶的套接字後,就應該啟動一個專門為該客戶服務的線程。

-用Socket()創建一個套接字對象,該對象調用public void connect(SocketAddress endpoint) throws IOException與服務器端連接

-使用InetSocketAddress創建一個對象,以使用connect方法

-套接字通信基本原則:

  • 服務器應當啟動一個專門的線程,在該線程中和客戶的套接字建立連接。
  • 由於套接字的輸入流在讀取信息時可能發生阻塞,客戶端和服務器端都需要在一個單獨的線程中讀取信息。

四、UDP數據報

基於UDP通信的基本模式:

  • 將數據打包,稱為數據包(好比將信件裝入信封一樣),然後將數據包發往目的地。
  • 接受別人發來的數據包(好比接收信封一樣),然後查看數據包中的內容。

1.發送數據包

用DatagramPacket的以下兩個構造方法創建待發送的數據包:

DatagramPacket(byte data[],int length,InetAddtress address,int port)//data[]數組存儲的數據
DatagramPack(byte data[],int offset,int length,InetAddtress address,int port)//data數組中offset開始後的length個字節

DatagramSocket類的不帶參數的構造方法

DatagramSocket mail_out-new DatagramSocket();
mail_out.send(data.pack);

2.接受數據包

DatagramSocket(int port)//創建對象,其中參數必須與待接收的數據包的端口號相同
receive(DatagramPacket pack)//負責接收數據包

五、廣播數據報

-A類地址:a<128,則b.c.d表示主機。

-B類地址:128<=a<192,則a.b表示網絡地址,c.d表示主機地址。

-C類地址:a>=192,a.b.c表示網絡地址,d表示主機地址。

-D類地址:224.0.0.0~224.255.255.255是保留地址
要廣播或接收廣播的主機都必須加入到同一個D類地址。

PS:D類地址不是用來你代表位置的,即在網絡上不能使用D類地址去查找計算機。

六、Java遠程調用

1.遠程對象及其代理

-RMI生成一個存根(Stub),並讓其產生的對象作為遠程對象的代理,其字節碼後綴為"_Stub"

-遠程對象必須實現java.rmi包中的Remote接口

代碼量截圖

技術分享圖片

技術分享圖片

碼雲鏈接:https://gitee.com/pyc-1751/chapter_1_of_java.git

20175120彭宇辰 《Java程序設計》第十一周學習總結