网络编程

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

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

            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());
    }
}

纸上学来终觉浅,觉知此事需躬行
原文地址:https://www.cnblogs.com/dreamHighMjc/p/7447307.html