网络编程

什么是网络编程

  • 在网络通信协议下, 不同计算机上运行的程序, 通过网络进行数据传输
  • 简单来说就是计算机与计算机之间通过网络传输数据

常见的架构

BS架构和CS架构


常见的软件架构

优缺点对比


BS/CS架构对比

网络编程三要素

  • IP: 设备在网络中的地址, 是唯一的标识
  • 端口号: 应用程序在设备中唯一的标识
  • 协议: 数据在网络中的传输规则, 常见的协议有UDP, TCP, http, https, ftp

UDP协议:

  • 用户数据报协议(User Datagram Protocol)
  • UDP是面向无连接通信协议(不关心两设备间网络是否畅通)
    速度快, 有大小限制一次最多发送64K, 数据不安全, 易丢失数据

TCP协议

  • 传输控制协议TCP(Transmission Control Protocol)
  • TCP协议是面向连接的通信协议
    速度慢, 没有大小限制, 数据安全

UDP通信程序(发送数据)

  • 创建发送端的DatagramSocket对象
  • 数据打包(DatagramPacket)
  • 发送数据
  • 释放资源
        //创建发送端对象
        //可以空参也可以带参
        //空参则随机一个端口进行发送
        //带参则指定端口发送
        DatagramSocket ds = new DatagramSocket();

        //打包数据
        String str = "云想衣裳花想容";
        byte[] bytes = str.getBytes();
        InetAddress address = InetAddress.getByName("127.0.0.1");//发送到本机
        int port = 10086;//发送到10086端口
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length,address,port);

        //发送数据
        ds.send(dp);
        //释放资源
        ds.close();

UDP通信程序(接收数据)

  • 创建接收端的DatagramSocket对象
  • 接收打包好的数据
  • 解析数据包
  • 释放资源
        //创建接收端对象
        //接收端口必须带参, 之前是发送到哪个端口, 接收时就要传递哪个端口
        DatagramSocket ds = new DatagramSocket(10086);

        //接收数据包
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
        ds.receive(dp);

        //解析数据
        InetAddress address = dp.getAddress();
        byte[] data = dp.getData();
        int length = dp.getLength();
        int port = dp.getPort();
        System.out.println("接收到数据" + new String(data,0,length));//接收到数据云想衣裳花想容
        System.out.println("是从设备" + address + "的" + port +"端口发送的");//是从设备/127.0.0.1的54784端口发送的

        //释放资源
        ds.close();

TCP通信程序

  • TCP通信协议是一种可靠的网络协议, 它在通信的两端各建立一个Socket对象, 通信之前要保证连接已经建立, 通过Socket产生lO流来进行网络通信


客户端(Socket)
  • 创建客户端Socket对象, 与指定服务端连接
  • 获取输出流, 写数据
  • 释放资源
        //创建客户端对象
        //发送到本机的10000端口
        //在创建对象的同时会连接服务端, 如果连接不上, 代码会报错
        Socket socket = new Socket("127.0.0.1",10000);

        //使用客户端对象获取输出流
        OutputStream os = socket.getOutputStream();
        os.write("霓为衣兮风为马".getBytes());

        //释放资源
        os.close();
        socket.close();
服务器(SeverSocket)
  • 创建服务器端Socket对象(SeverSocket)
  • 监听客户端连接, 返回一个Socket对象
  • 获取输入流, 读数据, 并把数据显示在控制台上
  • 释放资源
        //创建服务器对象
        //参数的端口要与客户端中发送到的端口保持一致
        ServerSocket ss = new ServerSocket(10000);

        //监听客户端的连接
        //如果连接成功, accept方法会返回Socket的对象
        Socket socket = ss.accept();

        //从连接通道中, 获取输入流来读取数据
        InputStream is = socket.getInputStream();
        //字节流不能读中文, 所以使用转换流将其转换成字符流
        InputStreamReader isr = new InputStreamReader(is);
        int b;
        while ((b = isr.read()) != -1) {
            System.out.print((char) b);//霓为衣兮风为马
        }

        //释放资源
        isr.close();
        socket.close();
        ss.close();

TCP通信程序三次握手协议

三次握手

TCP通信程序四次挥手协议

四次挥手
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 微信公众号【Java技术江湖】一位阿里 Java 工程师的技术小站。(关注公众号后回复”Java“即可领取 Jav...
    程序员黄小斜阅读 683评论 0 0
  • 一、网络通信协议 定义:对数据的传输格式、传输效率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换,...
    聂叼叼阅读 521评论 0 2
  • 【网络编程】 主要内容 软件架构CS/BS 网络通信三要素 TCP通信 Socket套接字 ServerSocke...
    Sky_Blue阅读 154评论 0 1
  • 1、概述 一、网络编程三要素 1、IP地址 要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过...
    MRVLSteven阅读 193评论 0 0
  • 主要内容 软件架构CS/BS 网络通信三要素 TCP通信 Socket套接字 ServerSocket 第一章 网...
    AlexDing阅读 101评论 0 0