package org.westos.網絡編程中的UDP編程;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* 網絡編程:
* TCP編程,UDP編程
* 協議:
UDP協議 --->UDP編程
不需要建立連接通道的
數據大小有限制
不可靠連接
執行效率高
TCP協議 ---->TCP編程
需要建立連接通道
數據大小無限制
可靠連接
執行效率低
打電話:看成TCP協議 建立連接通道
發短信:UDP協議 不需要建立連接通道
* */
/**
* InetAddress類:
* 此類表示互聯網協議 (IP) 地址。
* 方法:
* public static InetAddress[] getAllByName(String host)
* 其中host可以是主機名也可以是IP地址的字符串表示形式
* public String getHostName()獲取此 IP 地址的主機名。
* public String getHostAddress()返回 IP 地址字符串(以文本表現形式)。
* */
public class Text1 {
public static void main(String[] args) throws UnknownHostException {
//通過主機名返回一個IP地址對象
InetAddress ip = InetAddress.getByName("DESKTOP-2N4QT71");
//通過ip地址對象獲取IP地址,返回IP地址的字符串表示形式
String ipAddress = ip.getHostAddress();
System.out.println(ipAddress);
//通過IP地址返回ip地址對象
InetAddress ip2 = InetAddress.getByName("192.168.1.105");
//通過ip地址對象獲取主機名,返回字符串
String hostName = ip2.getHostName();
System.out.println(hostName);
}
}
package org.westos.網絡編程中的UDP編程;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* UDP編程:發送端
* 1.使用DatagramScocket創建對象
* 2.創建數據並打包,使用DatagramPacket
* public DatagramPacket(byte[] buf,int length,InetAddress address,int port)
* 這裏需要創建本機的InetAdress類對象,使用主機名或者IP地址的文本形式
* 3.調用發送函數
* 4.關閉資源
* */
public class Text2send {
public static void main(String[] args) throws IOException {
//創建Socket對象,使用的是DategramSoctet類
DatagramSocket ds = new DatagramSocket();
//創建數據並打包,使用DatagramPacket,構造方法如下
// public DatagramPacket(byte[] buf,int length,InetAddress address,int port)
// 構造數據報包,用來將長度爲 length 的包發送到指定主機上的指定端口號。
//構造方法前的準備,所需要傳遞的參數
byte[] by = "這是來自發送端的數據".getBytes();
int len = by.length;
InetAddress add = InetAddress.getByName("DESKTOP-2N4QT71");
int port = 10101;
DatagramPacket dp = new DatagramPacket(by, 0, len, add, port);
//調用發送函數
ds.send(dp);
//關閉資源
ds.close();
}
}
package org.westos.網絡編程中的UDP編程;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* UDP編程:接收端
* 1.創建Socket對象,使用DatagramSocket
* 2.創建一個數據包,作爲接受容器,還是使用DatagramPacket
* 3.調用DatagramSocket類對象接收方法
* 4.解析數據
* 5.將數據打印在控制檯中
* 6.關閉資源
* */
public class Text3receive {
public static void main(String[] args) throws IOException {
//創建Socket對象,還是使用DatagramSocket類,同時傳入端口號,需要與接收端相同
// public DatagramSocket(int port)創建數據報包套接字對象並且將其綁定到本地主機上的指定端口
DatagramSocket ds = new DatagramSocket(10101);
//創建一個數據包,作爲接受容器,還是使用DatagramPacket
//需要爲傳入參數做準備
byte[] by = new byte[1024];
int len = by.length;
DatagramPacket dp = new DatagramPacket(by, len);
//調用DatagramSocket類對象接收方法
ds.receive(dp);
//解析數據
byte[] by2 = dp.getData();
String sendIP = dp.getAddress().getHostAddress();
//將數據打印在控制檯中
String by2str = new String(by2, 0, len);
System.out.println(sendIP);
System.out.println(by2str);
//關閉資源
ds.close();
}
}