黑馬程式設計師——Java學習筆記之⑦——“網路程式設計”
1、網路模型圖解:
2、網路通訊要素:
①IP地址:(本機預設Ip地址127.0.0.1,即本地迴環地址)不易記憶,可用主機名:localhost,封裝為InetAddress類。
②埠號:其實是一臺主機上每個應用程式的標識。沒有封裝物件,有效埠:0-65535,其中0-1024為系統佔用或保留埠。
③傳輸協議:其實是通訊規則。包括TCP和UDP兩種,其特點如下:
TCP:(打電話,實時通訊,下載) 建立連線,形成傳輸資料的通道; 在連線中進行大資料量傳輸; 通過三次握手完成連線,是可靠的; 必須建立連線,效率會稍低。
UDP:(視訊會議、網路聊天等) 將資料及源和目的封裝成資料包,不需要建立連線;每個資料包的大小限制在64k內;面向無連線,所以不可靠;不需要建立連線,速度快。
④Socket:為網路服務提供的一種機制。網路通訊通過通訊方兩端的Socket通訊,資料在Socket之間通過IO傳輸。
3、InetAddress.getLocalHost(); 用來獲取本機名和IP地址。
getHostAddress(); 用來獲取主機的IP地址。
getHostName(); 用來獲取主機名。
InetAddress.getByName( String str); 獲取某個網址的IP地址和主機名。
注意:在網上,一定能獲得別的主機的IP地址,但是不一定能獲取到別的主機上的主機名。
以下為一些獲取上述網路通訊要素的操作示例:
4、通過UDP傳輸方式傳送和接收資料:
傳送方程式設計思路和步驟:
①建立udpsocket服務(傳送端點的建立)
DatagramSocket ds = new DatagramSocket();
②提供資料,並將資料封裝到資料包中
byte[] data = "UDP Test!".getBytes();
DatagramPacket dp = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.1.101"),10000);
③通過socket服務的傳送功能,將資料包發出去
ds.send(dp);
④關閉資源
ds.close();
程式設計示例如下:
接收方程式設計思路和步驟:
①建立udpsocket服務。通常會監聽一個埠,其實就是給這個接收端網路應用程式定義數字標識,明確該接收哪些資料,方便程式處理。
DatagramSocket ds = new DatagramSocket(10000);
②定義一個資料包,用於儲存接收到的位元組資料,並用資料包物件中的方法提取包中的資料和各種資訊。
byte[] buff = new byte[1024];
DatagramPacket dp = new DatagramPacket(buff,buff.length);
③通過socket服務的receive方法,將接收到的資料存入已定義好的資料包中。
ds.receive(dp);
④通過資料包物件的特有功能,將這些不同的資料取出。列印在控制檯上。
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(),0,dp.getLength());
//int port = dp.getPort(); 得到傳送端傳送資料的埠號。
⑤關閉資源
ds.close();
程式設計示例如下:
5、通過TCP傳輸方式傳送和接收資料:
客戶端程式設計思路和步驟:
①建立Socket服務,並指定要連線主機的地址和埠
Socket s = new Socket("192.168.1.101",13000);
②獲取socket流中的輸出流,傳送資料
OutputStream out = s.getOutputStream();
out.write("TCP Test!".getBytes());
③傳送完資料後關閉客戶端資源。
s.close();
伺服器端程式設計思路和步驟:
①通過ServerSocket建立socket服務,並監聽一個埠
ServerSocket ss = new ServerSocket(13000);
②通過ServerSocket的accept方法,獲取連線過來的客戶端物件。
Socket s = ss.accept();//阻塞式方法,總是在等待來自客戶端的連線請求
③客戶端如果發過來資料,那麼伺服器端要使用對應的客戶端物件,並獲取到該客戶端物件的讀取流,並列印在控制檯上。
InputStream in = s.getInputStream();
byte[] buff = new byte[1024];
int len = in.read(buff);
System.out.println(new String(buff,0,len));
④關閉與客戶端的連線。注:不用關閉伺服器,因為伺服器端總是在等待客戶端連線。
s.close();
TCP傳輸協議應用示例如下:
6、在應用TCP傳輸協議,在客戶端和伺服器端互相傳送檔案時,如果將某個特定的字串(例如:“over”)作為檔案輸出流結束的標記的話,可能會發生異常。這種情況就是,如果檔案中某一行的內容就是“over”,那麼檔案傳送就會停止,這就是所說的異常情況。要解決這種情況就是,在檔案傳輸完畢後,使用shutdownOutput()關閉客戶端輸出流,相當於給流中加入了一個結束標記-1。這樣就能避免這種異常情況的發生。應用示例如下:
7、URL相關:
String getFile(); 獲取此 URL 的檔名。
String getHost() ; 獲取此 URL 的主機名(如果適用)。
String getPath() ; 獲取此 URL 的路徑部分。
int getPort() ; 獲取此 URL 的埠號。
String getProtocol() ; 獲取此 URL 的協議名稱。
String getQuery(); 獲取此 URL 的查詢部分。
URLConnection conn = url.openConnection(); //建立連線,不用再定義socket了
URL應用示例如下:
----------- android培訓、java培訓、期待與您交流! ------------
相關文章
- 黑馬程式設計師——Java學習筆記之⑧——“Java新技術”程式設計師Java筆記
- 黑馬程式設計師---學習筆記3:進位制程式設計師筆記
- 黑馬程式設計師java筆記之一-----Map集合程式設計師Java筆記
- 黑馬程式設計師前端學習之路程式設計師前端
- 黑馬程式設計師-Java概述程式設計師Java
- 黑馬程式設計師程式設計師
- java程式設計師程式設計筆試基礎學習Java程式設計師筆試
- 黑馬程式設計師——Java高新技術---反射程式設計師Java反射
- Java學習筆記--網路程式設計SocketJava筆記程式設計
- 好程式設計師Java學習路線之集程式設計師Java
- 黑馬程式設計師_Java高新技術之列舉程式設計師Java
- 網路程式設計學習筆記程式設計筆記
- Java程式設計師學習Rust程式設計 - infoworldJava程式設計師Rust
- 黑馬程式設計師Java培訓和Android培訓:程式設計基礎程式設計師JavaAndroid
- 黑馬程式設計師——型別轉換程式設計師型別
- 好程式設計師學習筆記:函式程式設計師筆記函式
- 好程式設計師web前端培訓分享JavaScript學習筆記之設計模式程式設計師Web前端JavaScript筆記設計模式
- 【黑馬程式設計師濟南中心】java基礎-陣列程式設計師Java陣列
- Node.js 設計模式 學習筆記 之 流程式設計Node.js設計模式筆記程式設計
- 黑馬程式設計師第七天程式設計師
- 瘋狂Java程式設計師的基本素養學習筆記Java程式設計師筆記
- 好程式設計師Java學習路線之SpringMVC之基本配置程式設計師JavaSpringMVC
- 好程式設計師Java學習路線之MySQL的執行計劃程式設計師JavaMySql
- 程式設計師必看的書之Java程式設計師程式設計師Java
- 寫給Java程式設計師學習路線圖Java程式設計師
- 好程式設計師Java學習路線分享MyBatis之基本使用程式設計師JavaMyBatis
- 好程式設計師大資料學習路線分享Map學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線分享Actor學習筆記程式設計師大資料筆記
- 雲端計算學習路線教程程式碼筆記:Shell程式設計筆記程式設計
- 程式設計之美複習筆記程式設計筆記
- 四. 文字程式設計--Windows程式設計課程學習筆記程式設計Windows筆記
- 黑馬程式設計師--java高新技術 25--列舉,反射程式設計師Java反射
- 程式設計學習筆記之訊息地圖程式設計筆記地圖
- 系統程式設計學習筆記程式設計筆記
- 好程式設計師教程分析Vue學習筆記五程式設計師Vue筆記
- 好程式設計師Java學習路線分享MyBatis之Spring整合程式設計師JavaMyBatisSpring
- 好程式設計師Java學習路線分享SpringMVC之MVC概述程式設計師JavaSpringMVC
- 好程式設計師Java學習路線JSP物件程式設計師JavaJS物件