网络编程/TCP编程/UDP编程/反射/动态代理/枚举

一、网络编程:

1、掌握内容:

A、UDP编程的步骤

接收端:

package liuxiaofan;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class ReceiveDemo {
	public static void main(String[] args) throws IOException {
		//创建接收端的Socket对象
		DatagramSocket ds = new DatagramSocket(12345) ;
		
		//创建接收容器
		//创建字节数组的大小1024或者1024的倍数
		byte[] bys = new byte[1024] ;
		DatagramPacket dp = new DatagramPacket(bys, bys.length);
		
		//调用接收的方法
		ds.receive(dp);//阻塞式方法
		
		//解析数据,将数据展示在控制台
		//获取ip地址
		String ip = dp.getAddress().getHostAddress() ;
		//public byte[] getData() 获取缓冲区中实际的字节数
		//public int getLength()  获取缓冲区中实际的长度
		String s = new String(dp.getData(), 0,dp.getLength()) ;
		
		//展示控制台
		System.out.println("from"+ip+"data is:"+s);
		
		//释放资源
		ds.close();
	}
}

发送端:

package liuxiaofan;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/** 
 *将UDP编程的发送端和接收端优化!
 */
public class SendDemo {
	public static void main(String[] args) throws IOException {
		//创建发送端的Socket对象
		DatagramSocket  ds = new DatagramSocket() ;
		
		//创建数据报包对象
		byte[] bys = "hello,udp,我来了".getBytes() ;
		DatagramPacket dp = new DatagramPacket(bys, bys.length,InetAddress.getByName("192.168.10.1"),12345) ;
	
		//发送数据
		ds.send(dp);
		
		//释放资源
		
		ds.close();
	}
}

 B、TCP的发送端和接收端的开发步骤

     客户端client

package liuxiaofan;
import java.io.OutputStream;
import java.net.Socket;
/**
 *TCP(建立连接通道)编程的客户端的开发步骤
 *1)创建客户端的Socket对象
 *	Socket:就是客户端的Socket
 *		构造方法
 *			public Socket(InetAddress address, int port)
 *			public Socket(String host, int port):创建客户端套接字对象,并且指定端口号和ip文本形式
 *2)获取通道内的输出流对象
 *3)给服务器端写数据 
 *4)释放资源
 *java.net.ConnectException: Connection refused: connect 连接被拒绝
 *不要先运行客户端,客户端的连接需要服务器监听到才能连接
 */
public class ClientDemo {

	public static void main(String[] args) throws Exception {
		//1)创建客户端的Socket对象
		//public Socket(String host, int port)
		Socket s = new Socket("192.168.10.1", 12306) ;
		//2)获取通道内的输出流对象
//		public OutputStream getOutputStream():获取套接字 的输出流
		OutputStream out = s.getOutputStream() ;
		//3)给服务器端写数据 过去
		out.write("hello,Tcp,我来了".getBytes());
		
		//释放资源
		s.close();
	}
}

服务器server

package liuxiaofan;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/** 
 *服务端的开发步骤:
 *	1)创建服务器端的Socket对象
 *	2)监听客户端的连接(阻塞方法)
 *	3)获取通道内的输入流
 *	4)读取数据,显示控制台
 *	5)释放资源

 *ava.net.BindException: Address already in use: JVM_Bind  地址被绑定,因为已经有服务器在监听客户端连接
 */
public class ServerDemo {
	public static void main(String[] args) throws Exception {
		//1)创建服务器端的Socket对象
		//	public ServerSocket(int port) throws IOException创建绑定到特定端口的服务器套接字
		ServerSocket ss = new ServerSocket(12306) ;
		
		
		//2)监听客户端的连接(阻塞方法)
		//public Socket accept():   throws IOException侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞
		//Socket s = ss.accept() ;
	 	3)获取通道内的输入流
		//InputStream getInputStream() 
		
		InputStream in = s.getInputStream() ;
	 	//4)读取数据,显示控制台
		//获取ip文本形式'
		//public InetAddress getInetAddress()
		String ip = s.getInetAddress().getHostAddress() ;
		byte[] bys = new byte[1024] ;
		int len = in.read(bys) ;
		String data = new String(bys, 0, len) ;
		System.out.println("from" +ip +"data is :"+data);
	 	//5)释放资源
		s.close();
		//ss.close(); 服务端可以不关闭
		
	}
}

C、如何利用多线程运用网络编程!

D、TCPUPD的区别


二、反射(重点)

通过包名.类名方式获取该类对应的字节码文件对象/类对象:

1、反射的概念:
  反射就是通过获取class字节码文件对象/Class的类对象,
  获取该字节码文件对象中的成员变量,构造方法,和成员方法
 
 2、Field: 简称成员变量 (Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。
           反射的字段可能是一个类(静态)字段或实例字段。)
    Constructor:简称构造方法:提供关于类的单个构造方法的信息以及对它的访问权限。
    Method:简称成员方法:类或接口上单独某个方法(以及如何访问该方法)的信息
 
 面试题:                 
   如何获取class字节码文件对象/Class的类对象
   三种方式来获取这个class字节码文件对象:
   1)Object中的getClass()
   2)任何数据类型的静态属性class  
   3)Class类中的方法:
     forName(String className)

     forName("类路径") 

开发中使用第三种方式,forName方法中的参数是一个String类型,以后可以用字符串类型数据作为配置文件!

3、通过字节码文件对象获取构造方法并使用.

   通过反射获取构造方法并使用

   通过反射获取成员变量,并使用

三、动态代理

代理: 在程序的执行过程中,通过一个类Proxy和接口invacationHandler(处理程序)实现动态代理。


 Proxy类中的方法创建动态代理类对象:

 public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h) 最终会调用 InvocationHandler的方法--->InvocationHandler Object invoke(Object proxy,Method method,Object[] args)

参数1:loader:类加载器 public ClassLoader getClassLoader() 参数2:public Class<?>[]

  getInterfaces()

四、枚举enum


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值