1. Properties:集合属性列表
Properties类表示一组持久的属性。 ----称为"属性集合列表"
Properties可以保存到流中或从流中加载。
属性列表中的每个键及其对应的值都是一个字符串。
后缀名.properties的配置文件(属性配置文件)
(必须在src下面创建,类路径下)
传统的配置:xx.txt文件(普通文本文件)
java.util.Properties没有泛型
继承Hashtable<K,V>,最终实现接口Map<K,V>
构造方法:Properties() :创建空的属性列表
能够使用Map的功能
put(K k,V v):添加键值对
Set <K> keySet():获取所有的键的集合
V get(K k) :通过键获取值
public class Test {
public static void main(String[] args) throws Exception {
//读取当前src下面的配置文件 class.properties---->配置文件内容加载到属性集合列表中
//要通过类的字节码文件获取---获取类加载器
//1)获取当前类的字节码文件对象
Class c = Test.class ;
//2)通过当前类的字节码文件对象获取类加载器
//public ClassLoader getClassLoader()
ClassLoader classLoader = c.getClassLoader();
//3) public static InputStream getSystemResourceAsStream(String name) //参数:配置文件名称
//通过类加载器获取当前配置文件所在的资源的字节输入流对象
InputStream inputStream = classLoader.getResourceAsStream("class.properties");
//4)创建空的属性集合列表
Properties prop = new Properties( );
System.out.println(prop);
//load(InputStream in)
prop.load(inputStream);
//获取key和value
Set<String> set = prop.stringPropertyNames() ;
for(String key:set){
Object value = prop.get(key) ;
System.out.println(key+"="+value);
}
System.out.println(prop);
}
}
2. 网络编程
网络—>基于一种协议,能够实现计算机和计算机之间的通信
协议—>依赖于"网络模型"
两种协议
UDP传输协议
TCP传输协议
网络编程的三要素
ip地址
A类
前面一个是网络号段,后面三个是主机号段
B类
前面两个是网络号段,后面两个是主机号段
C类
一般说的是私人ip地址
前面三个号段为网络号段,后面一个是主机号段端口
0-65535
0-1024:属于保留端口,不要指定这些范围内的端口协议
Udp传输协议
1)不需要建立连接通道—>不同步,安全性低,效率高
2)属于一种不可靠连接
3)传输文件大小有限制,不超过64kb(数据包DategramPackage 的方式)
TCP传输协议
1)需要建立通道—>同步,安全性高
2)属于可靠连接
3)传输的大小没有限制,相对Udp来说优秀一些
2.1 网络编程
网络编程也叫Socker编程
无论UDP还是TCP最终都是要通过数据传输(流),两端都需要socket(流的"套接字")对象
socket编程特点:
1)两端都需要有Socket对象(发送端和接收端)
2)发送端(客户端)需要有ip地址以及绑定端口
3)接收端(服务器端)需要绑定发送端的端口
2.2 java.net.InetAddress:代表互联网ip地址对象
Jdk提供的api文档有这样一个类:
java.net.InetAddress 互联网协议的Ip地址的表示,不是String是InetAddress类型
一个类如果没有构造方法,如何创建当前类实例呢?
这个类一定要静态的公共访问法---->返回值类型是自己类本身,方法的底层一定有该类对象的
常用的功能:
public static InetAddress getByName(String host)throws UnknownHostException
通过主机名称获取ip地址对象,参数可以指定你自己电脑上的ip地址字符串(ip4地址)或者是计算机的主机名称
public String getHostAddress():获取ip地址字符串形式
public String getHostName():获取当前ip地址对象的主机名
public class InetAddressDemo{
public static void main(String[] args) {
//public static InetAddress getByName(String host)throws UnknownHostException
//通过主机名获取ip地址对象.参数可以是自己电脑的主机名或者ip地址字符串(ip4地址)
InetAddress inetAddress = InetAddress.getByName("主机名称或者IP地址");
//public String getHostAddress():获取ip地址字符串形式
//public String getHostName():获取当前ip地址对象的主机名
System.out.println(inetAddress.getHostAddress());
System.out.println(inetAddress.getHostName());
}
}
2.3 UDP发送端和接收端代码实现
/*
Udp协议 ---->数据包的形式发送 (发送和接收端的数据传输)
发送端的代码步骤
1)创建发送端的Socket对象
2)创建数据报包对象
3)使用发送的端的socket对象调用发送方法发送数据报包
4)释放资源
*/
public class UDPSend{
public static void main(String args[]) throws Exception {
//创建发送端的Socket对象
//DatagramSocket 用于发送和接收数据报数据包的套接字
//public DatagramSocket()throws SocketException
DatagramSocket ds = new DategramSocket();
//创建数据报包对象
//DatagramPacket:数据报包,用于udp里面数据传输
//public DatagramPacket(byte[] buf, 用于发送的数据---字符串---转换成字节数组
//int length, 数据长度
//InetAddress address, ip地址对象
//int port) 端口号
DatagramPacket dp = new DatagramPacket(
"hello,UDP我来了".getBytes(),
"hello,UDP我来了".getBytes().length,
InetAddress.getByName("192.168.x.x"),
11111);
//3)使用发送的端的socket对象调用发送方法发送数据报包
//public void send(DatagramPacket p) throws IOException:发送端的socket对象发送数据报包
ds.send(dp);
//4)释放资源
ds.close();
}
}
/*
UDP接收端代码实现
1)创建接收端的Socket对象
2)创建一个接收容器(数据报包DatagramPacket)(字节数组长度1024个长度或者它的整数倍),自定义字节缓冲区,将数据报包放进去
3)接收端的socket对象,接收数据报包
4)解析接收容器中的真实的缓冲区的字节数组以及实际长度---->转换成字符串(发送端实际发来的内容)
5)展示发送的ip地址以及发送的内容
*/
public class UDPReceiver{
public static void main(String[] args) throws Exception {
//1)创建接收端的Socket对象,指定绑定的端口号
//public DatagramSocket(int port) throws SocketException
DatagramSocket ds = new DatagramSocket(11111);
//2)创建一个接收容器(数据报包DatagramPacket)(字节数组长度1024个长度或者它的整数倍)
//自定义字节缓冲区,将数据报包放进去
//public DatagramPacket(byte[] buf, 参数1:用于保存传入数据报的缓冲区。
//int length) 参数2:要读取的字节数。
byte[] bytes = new byte[1024] ;
int length = bytes.length ;
DatagramPacket dp = new DatagramPacket(bytes,length);
//3)接收端的socket对象,接收数据报包
//底层会将的发送端的内容填充到这个数据报包的缓冲区中
//public void receive(DatagramPacket p) throws IOException
ds.receive(dp);
//4)填充进去之后,从数据报包的缓冲区中解析实际的内容
//public byte[] getData():获取缓冲区中真实的字节数组
//public int getLength():返回接收的真实字节数 的长度
byte[] bytes2 = dp.getData();
int length2 = dp.getLength();
//转换成字符串
String receiverStr = new String(bytes2,0,length2);
//5)展示ip地址(发送端的)以及现在接收的内容
//数据报包---public InetAddress getAddress() 获取ip地址对象
//InetAddress ---->String getHostAddress() ip地址字符串
String ip = dp.getAddress().getHostAddress();
System.out.println("接收到ip为" + ip + "发来的一条消息,内容为:" + receiverStr);
//接收端释放资源
ds.close(); //在真实场景中,接收端不关闭的
}
}
2.4 TCP客户端和服务器端代码实现
/*
TCP协议方式, 客户端和服务器端的传输
客户端要发送的数据的步骤
1)创建TCP协议 客户端的Socket对象,指定ip地址以及端口
2)从客户端所在的通道获取的字节数出流对象
3)写数据过去
4)关闭客户端资源
*/
public class TcpClient {
public static