• 网络编程


    背景: 要想传输东西,首先要定位,你都不知道该传给谁,怎么进行传输,所以需要以下两步

    网络编程中有两个主要的问题

                1)如何准确地定位网络上一台或多台主机:

                         通信双方地址

                   

                  a) IP 地址InetAddress(java的一个类)唯一的标识 Internet 上的计算机 ,一个InetAdress的对象就代表着一个IP地址, 本地回环地址(hostAddress):

                  127.0.0.1 主机名(hostName):localhost 不易记忆

                  b) 端口号标识正在计算机上运行的进程(程序) 不同的进程有不同的端口号 被规定为一个 16 位的整数 0~65535。其中,0~1023被                 预先定义的服务通信占用(如MySql占用端口3306,http占用端口80等)。除非我们需要访问这些特定服务,否则,就应该使用               1024~65535 这些端口中的某一个进行通信,以免发生端口冲突。 端口号与IP地址的组合得出一个网络套接字。

                2)找到主机后如何可靠高效地进行数据传输:

                    a)一定的规则(有两套参考模型) OSI参考模型:模型过于理想化,未能在因特网上进行广泛推广

                    b)TCP/IP参考模型(或TCP/IP协议):事实上的国际标准。

    模拟图如下:

          下图就好像一个人:a给另一个人:b 邮东西,a需要将东西一遍一遍的打包,防止易碎、安全等,

          b收到东西,首先需要将所有的包装拆掉才能取到东西。但是传输东西之前,需要明确a b的位置

          注:下图的每一层都有各自的协议

    获取IP地址

    import java.net.InetAddress;
    import java.net.UnknownHostException;
    
    /*
     * 网络通信的第一个要素:IP地址。通过IP地址,唯一的定位互联网上一台主机
     * InetAddress:位于java.net包下
     * 1.InetAddress用来代表IP地址。一个InetAdress的对象就代表着一个IP地址
     * 2.如何创建InetAddress的对象:getByName(String host)
     * 3.getHostName(): 获取IP地址对应的域名
     *   getHostAddress():获取IP地址
     */
    public class TestInetAddress {
        public static void main(String[] args) throws Exception {
            //创建一个InetAddress对象:getByName()
            InetAddress inet = InetAddress.getByName("www.atguigu.com");
            //inet = InetAddress.getByName("42.121.6.2");
            System.out.println(inet);
            //两个方法
            System.out.println(inet.getHostName());
            System.out.println(inet.getHostAddress());
            //获取本机的IP:getLocalHost()
            InetAddress inet1 = InetAddress.getLocalHost();
            System.out.println(inet1);
            System.out.println(inet1.getHostName());
            System.out.println(inet1.getHostAddress());
        }
    }

    纸上学来终觉浅,觉知此事需躬行
  • 相关阅读:
    HTML入门(一)
    WEB攻击手段及防御第2篇-SQL注入
    公司来了个新同事不会用 Lombok,还说我代码有问题!
    最流行的 RESTful API 要怎么设计?
    Spring Boot & Restful API 构建实战!
    分布式事务不理解?一次给你讲清楚!
    带着问题学 Kubernetes 架构!
    Linux 与 Unix 到底有啥区别和联系?
    Java虚拟机最多支持多少个线程?
    常用的 Git 命令,给你准备好了!
  • 原文地址:https://www.cnblogs.com/dreamHighMjc/p/7447307.html
Copyright © 2020-2023  润新知