JAVA 網路程式設計 IO & 網路組合程式設計
阿新 • • 發佈:2019-01-30
JAVA 網路程式設計 IO & 網路組合程式設計
// 網路程式設計
// IO & 網路 組合程式設計
// 網路模型:
// OSI模型:開放系統互聯(Open System Interconnection)
// 網路七層:
// ① 物理層:
// 定義了網線,網絡卡等硬體裝置的介面規範,通過傳輸位元流(資料:位元 bit),
// 將資料 1 、0 數模轉換 電流強弱 傳送資料 , 將 電流強弱 模數轉換資料 1 、 0
// 接收資料
// ② 資料鏈路層
// 通過交換機,在不同主機間,利用主機的MAC地址(網絡卡地址)將底層資料(幀)進行封裝
// 與解封裝
// ③ 網路層
// 通過路由器,在不同主機間,利用IP地址,將底層資料進行封裝與解封裝
// ④ 傳輸層
// 定義協議與埠,將下層資料(段)進行分段、傳輸、重組
// ⑤ 會話層
// 主機間建立起可以通訊的通道
// ⑥ 表示層
// 對傳輸的資料進行解釋(加密解密 | 加壓解壓), 進行 機器語言和人文語言之間的相互轉換
// ⑦ 應用層
// 實體語言(FTP : 資料下載 WEB : 網頁互動 應用 : 具體應用功能)
// 1.主機至網路層 - 物理層、 資料鏈路層
// 2.國際層 - 網路層
// 3.傳輸層 - 傳輸層
// 4.應用層 - 會話層、 表示層、 應用層
// 域名
// http:// www|news|sports.sina.com.cn
// 字首: 代表主機伺服器(www以全球資訊網指定的服務標準搭建的伺服器)
// 主體: 域名主體,可以自定義
// 字尾: 公司性質(com 商業模式企業 edu教育 net服務 org組織 cn中國 hk香港)
// 域名解析
// hosts 檔案 -- ip 與 域名 對應關係
// DNS服務 -- 指向指定的DNS伺服器(帶有IP域名解析的伺服器)
// 請求寬頻供應商 -- 進行DNS伺服器解析
public class Net02{
public static void main(String[] args) throws UnknownHostException{
// 獲取主機ip
//
InetAddress ia = InetAdress.getLocalHost();
System.out.println(ia);
String ip = ia.getHostAdress();
System.out.println(ip);
String local = ia.getHostName();
System.out.println(local);
// 通過ip 地址獲取伺服器地址資訊
// 區域網: getHostName 可以通過hosts 檔案配置,預設值同getHostAddress
InetAddress byName = InetAddress.getByName("填寫ip地址");
// 根據byName可以獲取到 他的主機名, 和 主機地址
System.out.println(byName.getHostName() + ":" + byName.getHostAddress());
// 廣域網
InetAddress[] ads = InetAddress.getAllByName("baidu.com");
for(int i = 0; i < ads.length;i++){
System.out.println(ads[i].getHostName() + ":" + ads[i].getHostAddress());
}
}
}
二、模仿資訊傳送和資訊接受
傳送方
// 資訊傳送方
public class MessageSend{
public static void main(String[] args) throws IOException,InterruptedException{
// ① 建立傳送方Socket
// Socket所需要條件 ip 埠
DatagramSocket sender = new DatagramSocket();
// ② 將資料封包為資料報包
byte[] data = "傳送方發來的賀電".getByte();
// 傳送方報包: 資料byte[] 資料長度接受方的地址(IP) 接收方的埠號
DatagramPacket packet = new DatagramPacket(data,data.lenth,localhost,20000);
System.out.println("資料傳送中");
// 傳送資料
sender.send(packet);
// System.out.println("傳送完成");
sender.clost();
}
}
接收方
// 接收方
public class MessageReceve{
public static void main(String[] args) throws IOException{
System.out.println("接收方開始接受資料....");
// ① 建立接收方Socket(注意: 接收方一定要明確埠號)
DatagramSocket recevier = new DatagramSocket(20000);
// ② 生成儲存報文的資料容器
// 注意: 接受方接受資料的容器大小應該大於等於傳送方一次傳送資料報包的大小
// 且容器大小有上額限定
byte[] buf = new byte[1024];
// ③ 通過對應的資料包物件接受資料
DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
// 注: 阻塞狀態等待發送方發來的資料
recevier.receive(packet);
// ④ 應用接收到的資料 ( 資訊均儲存在接收方的報包物件中)
System.out.println("IP" + packet.getAddress().getHostAddress());
System.out.println("埠" + packet.getPort());
byte[] data = packet.getData();
System.out.println(new String(data));
// 關閉服務
recevier.close();
}
}