/*
* 網(wǎng)絡(luò)編程:
* 作用:用于解決計(jì)算機(jī)支架的數(shù)據(jù)傳輸問(wèn)題;
* 網(wǎng)絡(luò)通訊的3要素:IP 端口號(hào) 協(xié)議
*
* getLocalHost(); 獲取當(dāng)前主機(jī)的對(duì)象
* getByName("ip或是主機(jī)名") 根據(jù)IP或是主機(jī)名獲取主機(jī)的IP地址對(duì)象
* getHostAddress() 返回一個(gè)IP地址的字符串表示形式
* getHostName() 返回計(jì)算機(jī)的主機(jī)名
* getAllByName() 根據(jù)域名獲取所有的IP地址
*
* 網(wǎng)絡(luò)通信
* 定義:網(wǎng)絡(luò)通信也叫Socket通信,通信的主機(jī)都必須按照Socket,不同的協(xié)議有不同的Socket
* udp協(xié)議下的Socket
* 說(shuō)明:UDP通信部分客戶(hù)端和服務(wù)端
*
* DatagramSocket udp插座服務(wù)
* DatagramPacket 數(shù)據(jù)包類(lèi)
* DatagramPacket(buf, length, address, port)
* buf: 發(fā)送的數(shù)據(jù)內(nèi)容
* length: 發(fā)送的數(shù)據(jù)內(nèi)容的大小
* address:發(fā)送的目的ip地址
* port : 通信的端口號(hào)
*
* 發(fā)送端的步驟:
* 1.建立udp服務(wù)
* 2.準(zhǔn)備服務(wù),把數(shù)據(jù)封裝到數(shù)據(jù)包中發(fā)送,發(fā)送端的數(shù)據(jù)包要帶上ip與端口號(hào);
* 3.調(diào)用udp的服務(wù)發(fā)送數(shù)據(jù):
* 4.關(guān)閉資源;
*
* 注意:
* 每個(gè)網(wǎng)絡(luò)程序都有自己定義的可處理的特定格式的數(shù)據(jù),如果接收到的數(shù)據(jù)不符合指定的格式,那么就會(huì)被當(dāng)成垃圾數(shù)據(jù)丟棄
*
* 廣播地址:
* 在UDP通信中,有一個(gè)IP地址稱(chēng)作為廣播地址,廣播地址就是主機(jī)好為255的地址。
*/
package com.lin.michael;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class Demo01 {
public static void main(String[] args) throws IOException{
//獲取本機(jī)的IP地址對(duì)象
/*InetAddress address = InetAddress.getLocalHost();
System.out.println("主機(jī)名:"+address.getHostName());
System.out.println("IP地址:"+address.getHostAddress());
//獲取網(wǎng)絡(luò)主機(jī)的IP地址對(duì)象,根據(jù)主機(jī)的IP字符串形式或是主機(jī)名獲取到IP地址對(duì)象
InetAddress address1 = InetAddress.getByName("192.168.1.2");
InetAddress[] addressArr = InetAddress.getAllByName("www.baidu.con");
for(InetAddress inetaddress : addressArr){
System.out.println(inetaddress.getHostAddress());
}*/
//1.建立udp服務(wù)
DatagramSocket datagramSocket = new DatagramSocket();
//2.準(zhǔn)備數(shù)據(jù)
String data = "Hello world!";
//3.將數(shù)據(jù)封裝到數(shù)據(jù)包中
DatagramPacket datapramPacket = new DatagramPacket(data.getBytes(),data.getBytes().length,InetAddress.getLocalHost(),9090);
//4.調(diào)用udp服務(wù)發(fā)送數(shù)據(jù)包
datagramSocket.send(datapramPacket);
//5.關(guān)閉資源? 釋放占用的端口號(hào)
datagramSocket.close();
}
}
/*
* 接收端
* 使用步驟:
* 1. 建立udp服務(wù);
* 2.準(zhǔn)備空的數(shù)據(jù)包接收數(shù)據(jù):
* 3.調(diào)用udp的服務(wù)接收數(shù)據(jù)包:
* 4.關(guān)閉資源;
*/
package com.lin.michael;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class Demorecieve {
public static void main(String[] args) throws IOException{
//1.建立udp的服務(wù)并且監(jiān)聽(tīng)端口
DatagramSocket datagramSocket = new DatagramSocket(9090);
//2. 準(zhǔn)備空的數(shù)據(jù)包用于存放數(shù)據(jù)
byte[] buf = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length);
//3.調(diào)用udp服務(wù),接收數(shù)據(jù)并存入到數(shù)據(jù)包中(byte數(shù)組中),recieve在沒(méi)有接到數(shù)據(jù)之前,會(huì)一直等到
datagramSocket.receive(datagramPacket);
//輸出數(shù)據(jù),datagramPacket.getLength()存儲(chǔ)的字節(jié)數(shù)
System.out.println("接收的數(shù)據(jù)是:" + new String(buf,0,datagramPacket.getLength()));
//關(guān)閉資源
datagramSocket.close();
}
}