接收方
MulticastSocket ms=new MulticastSocket(5000);
InetAddress group=InetAddress.getByName("225.0.0.1");
ms.joinGroup(group);
byte[] buffer=new byte[8192];
DatagramPacket packet=new DatagramPacket(buffer,buffer.length);
Thread t=new Thread(()->{
while(true){
ms.receive(packet);
String received=new String(packet.getData(),0,packet.getLength());
System.out.println(received);
}
});
t.start();
t.join();
发送方
MulticastSocket ms = new MulticastSocket(5001);
Scanner sc = new Scanner(System.in);
InetAddress group = InetAddress.getByName("225.0.0.1");
Random r = new Random();
while (true) {
int kk=r.nextInt(100);
byte[] content = ("str_" + r.nextInt(10000)).getBytes();
DatagramPacket packet = new DatagramPacket(content, content.length, group, 5000);
ms.send(packet);
if(kk<30) break;
}
ms.close();
sc.close();
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WdjpW6WI-1650078834614)(E:\lanou\java\note\picture\image-20220413152551684.png)]
Class类
- getName():String 获取类的名称
- getFields()获取所有public的属性列表
- clz.getField(name) 获取指定名称的public属性,如果名称不存在或者不允许访问则NoSuchFieldException
- getDeclaredFields()获取所有自身定义的属性,包括 private属性
- clz.getDeclaredField(name) 获取指定名称的当前类自定义的属性,如果名称不存在则NoSuchFieldException
- getMethods和getDeclaredMethods获取方法
- getMethod和getDeclaredMethod两个方法获取指定名称的方法,参数有2部分,第一部分为方法名称String类型,第二部分为方法参数类型列表
Class...
- getMethod和getDeclaredMethod两个方法获取指定名称的方法,参数有2部分,第一部分为方法名称String类型,第二部分为方法参数类型列表
- newInstance()通过使用无参构造器构建一个当前类的对象
- getConstructors()获取所有public类型的构造器
- getConstructor(Class…)获取指定类型参数的构造器
- getDeclaredConstructors()获取所有的构造器,无视范围约束
- getDeclaredConstructor(Class…)获取指定类型参数的构造器,无视范围约束
创建实例
通过反射机制生成对象
1、使用Class对象的newInstance方法创建Class类对应类的对象
Class<?> clz=String.class;
Object str=clz.newInstance(); //使用String类中的无参构造器构建一个String类型的对象
2、使用Class对象获取当前类中所定义的构造器,再使用Constructor对象的newInstance方法创建对象。可以使用指定的构造器
//实际上就是使用new String("abc")构建一个string类型的对象
Class<?> clz=String.class;
Constructor constructor=clz.getConstructor(String.class);
Object obj=constructor.newInstance("abc");
获取Class对象的方法
1、通过对象的getClass方法获取Class对象
2、使用.class的语法
3、使用Class类中的静态方法Class.forName
4、使用TYPE语法获取,用于获取原生数据类型Boolean.TYPE
5、使用类加载器的方法loadClass