从零开始的"E"世界(J2SE)

JavaNote12

网络编程

1. 网络分层
  • 为了减少网络设计的复杂性,绝大多数网络采用分层设计方法。所谓分层设计方法,就是按照信息的流动过程将网络的整体功能分解为一个个的功能层,不同机器上的同等功能层之间采用相同的协议,同一机器上的相邻功能层之间通过接口进行信息传递。

  • 网络模型一般是指OSI七层参考模型TCP/IP四层参考模型。这两个模型在网络中应用最为广泛。
    这里写图片描述


2. 网络编程
  • 套接字:源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务.

  • 网络编程:通过使用套接字来达到进程间通信目的的编程就是网络编程.

  • 网络编程三要素:

    • IP地址.
    • 端口.
    • 协议:规则,数据传递/交互规则.

3. IP

网络之间互连的协议(IP)是Internet Protocol的外语缩写,中文缩写为“网协”.在Java中,使用InetAddress类来表示IP地址.

演示IP操作:

public static void main(String[] args) throws Exception {
        //static InetAddress getByName(String host) 在给定主机名的情况下确定主机的 IP 地址。 
        InetAddress ip = InetAddress.getByName("XXXX");
        System.out.println(ip);

        //获取主机名称
        System.out.println(ip.getHostName());
        //获取IP地址
        System.out.println(ip.getHostAddress());


        //static InetAddress getLocalHost() 返回本机IP
        System.out.println(InetAddress.getLocalHost());

        //boolean isReachable(int timeout) 是否可达的,是否可以连接访问的
        System.out.println(ip.isReachable(1000)); 
    }

4. 端口
  • 端口:是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用RJ11插口也属于物理端口的范畴。

  • 协议端口:
    如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口可以有65536(即:2^16)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535(2^16-1)

  • 注意:

    • 在同一台电脑中端口不能重复,若重复,则报错端口冲突.
    • 如果我们需要自定义端口号,建议使用10000以上的.

5. 协议
  • 协议(protocol),网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序
    网络协议,也可简称协议,通常由三要素组成:
    (1)语法:即数据与控制信息的结构或格式;
    (2)语义:即需要发出何种控制信息,完成何种动作以及做出何种响应;
    (3)时序(同步),即事件实现顺序的详细说明。

  • http——超文本传输协议资源

  • https——用安全套接字层传送的超文本传输协议
  • ftp——文件传输协议
  • mailto——电子邮件地址
  • file——当地电脑或网上分享的文件

6. 传输层的协议(TCP,UDP)
  • TCP :面向连接(经历三次握手)、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。 服务端和客户端.

  • UDP:面向非连接、传输不可靠(丢包[数据丢失])、用于传输少量数据(数据报包模式)、速度快。发送端和接收端.

演示TCP:

//服务端
public class Server {
    public static void main(String[] args) throws Exception {
        String data = "你好,师姐!";

        //创建服务端,指定端口为8888
        ServerSocket server = new ServerSocket(8888);
        System.out.println("服务端......");
        boolean accept = true;
        while (accept) {
            //accept():接受连接该服务端的客户端对象
            Socket client = server.accept();
            System.out.println("连接过来的客户端:" + client.getInetAddress());
            //获取该客户端的输出流对象,给该客户端输出数据
            PrintStream out = new PrintStream(client.getOutputStream());
            out.print(data);
            out.close();
        }
        server.close();
    }
}
//客户端
public class Client {
    public static void main(String[] args) throws Exception {
        //创建客户端对象,并指明连接服务端的主机和端口
        //localhost:本机
        Socket client = new Socket("localhost",8888);
        //获取客户端输入流对象
        Scanner in = new Scanner(client.getInputStream());
        while(in.hasNextLine()){
            System.out.println(in.nextLine());
        }   
        client.close();
    }
}

演示UDP:

//接收端
public class Receive {
    public static void main(String[] args) throws Exception {
        //创建接收端对象
        DatagramSocket receiver = new DatagramSocket(10086);
        byte[] buffer = new byte[1024];
        //接受数据
        DatagramPacket dp = new DatagramPacket(buffer, 1024);
        receiver.receive(dp);
        //获取接受数据
        byte[] data = dp.getData();
        int length = dp.getLength();
        String msg = new String(data, 0, length);
        System.out.println("发送过来的数据:" + msg);
        receiver.close();
    }
}
//发送端
public class Send {
    public static void main(String[] args) throws Exception {
        String data = "你好,师姐!";

        //创建发送端对象
        DatagramSocket sender = new DatagramSocket(10010);
        //发送数据
        DatagramPacket dp = new DatagramPacket(
                data.getBytes(), //发送的数据
                data.getBytes().length, //发送数据的长度(字节数)
                InetAddress.getLocalHost(), //发送给哪一个IP
                10086);//发送给哪一个端口程序
        sender.send(dp);
        sender.close();
    }
}

最后附上Java学习网址

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值