反射与网络编程总结

1,什么是反射:

反射是指在程序运行时动态地获取一个类方法、属性、父类、接口等,并且可以在运行时调用对象的方法或者改变对象的属性值。

2,反射机制相关类

  • Class:表示一个类或接口,获取类信息的方法

  • Method:表示类的方法,获取方法信息的方法

  • Field:表示类的成员变量,获取变量信息的方法

  • Constructor:获取构造方法信息的方法

3,反射的步骤

  1. 获取 Class 对象

    • 类名.class

    • 对象.getClass()

    • Class.forName("类的完全限定名")

  2. 获取getField(),getConstructor(),getMethod()

4,网络编程三要素

  • IP地址

    是网络中设备的唯一标识

  1. IPv4:点分十进制法

  2. IPv6:采用128bit地址长度,每16个字节一组,分成8组十六进制数

  • 端口

    设备上应用程序的唯一标识

    取值范围是0 - 65535

  • 协议

    TCP协议和UDP协议

5,基于UDP的方式进行网络传输

  • 无连接的,不可靠的数据库传输

  • 数据不安全,缺乏校验

  • 效率高

  • 发送:音乐、视频、大文件数据使用UDP

6,UDP通信的步骤

  • 发送方

  1. 创建DatagramSocket

  2. 创建DatagramPacket(数据,长度,目标主机地址,目标主机端口号)

  3. 调用socket对象的send(数据报对象)

  4. 关闭

public static void main(String[] args) throws IOException {
        Scanner scanner=new Scanner(System.in);
        DatagramSocket ds=new DatagramSocket();
        while (true){
            System.out.println("请输入内容:");
            String msg= scanner.next();
            byte[] date=msg.getBytes();
            DatagramPacket dp=new DatagramPacket(date, date.length,new InetSocketAddress("localhost",10088));
            ds.send(dp);
            if ("bye".equals(msg)){
                System.out.println("结束了");
                break;
            }
        }
        ds.close();
    }
  • 接收方

  1. 创建DatagramSocket(端口),指定监听的端口

  2. 创建DatagramPacket(当作容器的字节数组,长度)

  3. 调用socket对象的receive(数据报对象)

  4. 显示数据....

  5. 关闭

public static void main(String[] args) throws IOException {
        DatagramSocket ds=new DatagramSocket(10088);
        while (true){
            byte[] tmp=new byte[1024];
            DatagramPacket dp=new DatagramPacket(tmp, tmp.length);
            ds.receive(dp);
            String str=new String(dp.getData(),0, dp.getLength());
            System.out.println(str);
            if (str.equals("bye")){
                System.out.println("over");
                break;
            }
        }
        ds.close();
    }

7,基于TCP的方式进行网络传输

  • 面向连接,可靠的数据传输

  • 数据安全,有校验

  • 速度慢

  • 对数据要求比较高的传输使用TCP

8,TCP通信的步骤

  • 客户端:

  1. 创建Socket(目标主机地址,端口号)

  2. 封装socket的输出字节流得到缓冲字节流

  3. 使用缓冲字节流写入数据

  4. 清空缓存

  5. 关闭socket

public static void main(String[] args) throws IOException {
        Scanner scanner=new Scanner(System.in);
        Socket socket=new Socket("192.168.0.128",12306);
        PrintWriter pw=null;
        while (true){
            System.out.println("输入一句话");
            String msg=scanner.next();
             pw=new PrintWriter(socket.getOutputStream());
            pw.println(msg);
            pw.flush();
            if ("bye".equals(msg)){
                System.out.println("结束了");
                break;
            }
            System.out.println("客户端发送成功");

        }
        pw.close();
        socket.close();
    }
  • 服务端:

  1. 创建ServerSocket(监听的端口)

  2. 使用serverSocket.accept()得到一个Socket对象

  3. 封装socket的输入字节流得到缓冲字节流

  4. 读取数据

  5. 关闭socket

public static void main(String[] args) throws IOException {
        ServerSocket serverSocket=new ServerSocket(12316);
        //阻塞式接受
        Socket socket=serverSocket.accept();
        //数据在socket的输入流 ,将字节流转成带缓冲区的字符流
        BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String msg=null;
        while (true){
            msg=br.readLine();
            System.out.println("服务端收到:"+socket.getInetAddress()+"消息"+msg);
            if ("bye".equals(msg)){
                System.out.println("结束了");
                break;
            }
        }
        br.close();
        serverSocket.close();
        socket.close();
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值