JAVA基础知识点21-网络编程、IP、端口、统一资源定位符(URL)、协议、套接字、UDP、反射

 IP、端口:

IP: 定义节点
   IPV4 : 4个字节  32位
   IPV6 : 8个字节
   192.168.0.0~192.168.255.255 供组织内部使用的IP
   127.0.0.1 本地IP
   localhost 本地

   IP 与 域名:
   DNS|域名解析器

   InetAddress


端口:区分软件
   2个字节 0~65535之间的整数表示端口号
   8000的端口号为预留端口号
   常见的端口号:
       80: http
       8080: tomcat
       3306: mysql
       1521: oracle

    同一协议下端口号不能冲突

    InetSocketAddress :  此类实现IP套接字地址(IP地址+端口号)它也可以是一对(主机名+端口号),


URL:统一资源定位符
协议: 合同 规范

 统一资源定位符(URL):

URL : 统一资源定位符
     互联网的三大基石:  http  html  url

http://www.baidu.com:80/index.html?username=zhangsan&password=123#a
    URL 的组成:
        协议:http
        域名:/www.baidu.com
        端口号: 默认80
        访问的资源:index.html
        请求参数:username=zhangsan&password=123
        锚链接..a

    URL : 类URL表示统一资源定位符,指向万维网上的“资源”的指针。
public class URLDemo02 {
    public static void main(String[] args) throws MalformedURLException {

        //URL(String spec) 从 String表示创建 URL对象。
        //URL(String protocol, String host, int port, String file) 创建 URL从指定对象 protocol , host , port号和 file 。
        URL url = new URL("http://www.baidu.com:80/haha/index.html?username=zhangsan&password=123#a");
        System.out.println(url);

        System.out.println("协议:"+url.getProtocol());
        System.out.println("域名"+url.getHost());
        System.out.println("端口"+url.getPort());
        System.out.println("访问资源"+url.getFile());
        System.out.println("访问资源"+url.getPath());
        System.out.println("请求参数"+url.getQuery());
        System.out.println("锚点:"+url.getRef());
    }
}

 运行截图:

协议、套接字:

协议:
    传输层协议: UDP TCP
    UDP : 写信|邮递包裹  非面向连接   不安全  协议简单,开销小效率高   只管写只管发送  一般不超过60k
    TCP : 打电话  面向连接  安全  协议复杂,效率低  基于3此握手  没有大小限制的

SOCKET 套接字
    相当于传输层为应用层开辟小口子
    通过套接字进行传输数据
    不同协议下Socket实现不同
    面向Socket编程

    DatagramSocket   定义发送端|接收端
    DatagramPacket   打包

UDP 实现基本流程:-->发送端
    发送端与接收端两端是平等的,数据基于字节数组传输

1.定义发送端 DatagramSocket(int port)
2.准备数据
3.打包
4.发送  send(DatagramPacket)
5.关闭
public class UDPDemo04 {
    public static void main(String[] args) throws IOException {
        System.out.println("-----------------发送端------------------");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要发送的内容:");
        String s = sc.next();
        //1.定义发送端 DatagramSocket(int port)
        DatagramSocket send = new DatagramSocket(8888);
        //2.准备数据
        byte[] arr = s.getBytes();
        //3.打包
        //DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)
        DatagramPacket packet = new DatagramPacket(arr,0,arr.length,new InetSocketAddress("localhost",9999));
        //4.发送  send(DatagramPacket)
        send.send(packet);
        //5.关闭
        send.close();
    }
}

UDP:

UDP 实现基本流程:-->接收端

1.定义接收端 DatagramSocket(int port)
2.打包准备接收数据
3.接收 receive(DatagramPacket)
4.处理数据
5.关闭
public class UDPDemo05 {
    public static void main(String[] args) throws Exception{
        System.out.println("-----------------接收端------------------");
        OutputStream os = new BufferedOutputStream(new FileOutputStream("D:/001.txt"));
        //1.定义接收端 DatagramSocket(int port)
        DatagramSocket rec = new DatagramSocket(9999);
        //2.打包准备接收数据
         byte[] arr = new byte[1024];
         //接收数据的包裹
        DatagramPacket packet = new DatagramPacket(arr,0,arr.length);
        //3.接收 receive(DatagramPacket)
        rec.receive(packet);

        //4.处理数据
         byte[] datas = packet.getData();
         int len = packet.getLength();
        System.out.println("接收数据个数"+len);
        System.out.println("接收数据"+datas.length);
        System.out.println(new String(datas,0,len));

        //5.关闭
        rec.close();

    }
}

 反射:

反射:
    JAVA有着一个非常突出的动态相关机制:Reflection。

    Java反射机制,可以实现以下功能:
        ①在运行时判断任意一个对象所属的类;
        ②在运行时构造任意一个类的对象;
        ③在运行时判断任意一个类所具有的成员变量和方法;
        ④在运行时调用任意一个对象的方法;
        ⑤生成动态代理;

    反射的源头:
        Class对象用来表示任意一个正在运行期间的java类或者接口
        Class对象是不需要手动创建,在类加载到内存之后就存在的jvm构建的
        Class对象是唯一的,不会变的,不需要手动创建的
        Class对象中包含着这个类的所有内容
        如果能够获取一个类型的Class对象,就能够做任何事情!!!!

    注意: 发生在程序运行期间的行为
如何获取反射的源头:
            1.类名.class
            2.Class.forName(权限定名)  -->推荐
            3.对象.getClass()
获取构造器

构造器<T> getConstructor(类<?>... parameterTypes) 返回一个 构造器对象,该对象反映此 类对象所表示的类的指定公共构造函数。
构造器<?>[] getConstructors() 返回一个包含 构造器对象的数组, 构造器对象反映了此 类对象所表示的类的所有公共构造函数。
构造器<T> getDeclaredConstructor(类<?>... parameterTypes) 返回一个 构造器对象,该对象反映此 类对象所表示的类或接口的指定构造函数。
构造器<?>[] getDeclaredConstructors() 返回 构造器对象的数组, 构造器对象反映由此 类对象表示的类声明的所有构造函数。

创建对象
    1.通过Class类的newInstance调用某一个类型的空构造为对象出现初始化信息创建对象  -->弃用
    2.调用构造器类型的newInstance方法,创建对象的时候指定调用当前的 构造器为对象初始化信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值