• ##网络编程


    网络编程顾名思义需要一个网络,通过网络进行操作的编程,那么对于网络编程,一般面试的时候都会有什么样的问题呢?

      1,能够说出UDP和TCP协议的区别,或者说特点

      2,TCP协议两个常用的类的名称

      3,能够理解使用TCP上传案例

    那么开始今天的知识点回顾:

    一,软件架构CS/BS

      1.1网络编程的入门:(对于网络编程我们首先要知道的)

      CS结构:全程是Client/Server 客户端和服务器结构

      BS结构:全称是Browser/Server 浏览器和服务器结构

    网络编程就是在一定协议下实现两台计算机之间的通信。  两种架构各有优势      无论哪种都离不开网络的支持 

      1.2网络通信协议:通信协议是对计算机必须遵守的规则------完成数据交换

    TCP/IP  传输控制协议/因特网互联协议  4层分层模型

        1,物理层  

        2,数据链路层  底层网络协议

        3,网络层     IP

        4,传输层    TCP  UDP

        5,应用层    HTTP

      1.3协议分类:  java.net包下   包含类和接口

    1.3.1TCP面向连接的通信协议  它会进行三次握手:

      1,客户端向服务器端发送请求,等待服务器确认

      2,服务器做出响应,确认请求

      3,客户端再次向服务器端发出确认请求,确认连接

    1.3.2UDP用户数据通信协议  面向无连接的协议,传输数据不需要连接

    特点:传输快,但是容易丢失数据 ,不可靠

    二,网络通信的三要素:网络协议  IP  端口号

    2.1网络协议刚才上面已经回顾或了,那么对于IP我们知道自己的电脑IP么?

      windos+r键打开我们的cmd控制台,输入IPconfig回车就可以看到我们自己电脑的IP

    那么有时候我们向确认电脑能不能上网,怎么看呢?

      只需要在控制台上输入ping空格域名就可以了,如果有返回说明能够上网

    在这里特别强调一点我们自己电脑的本机IP:localhost            127.0.0.1

    2.2端口号:网络通信的本质是两个进程(应用程序)用两个字节表示整数0-65535

      0-1023不能用,因为知名网络服务已经用了

      服务器端口号80

      mysql:3306免费的

      oracle:1521

    三。TCP通信重点回顾

    3.1要严格区分客户端Client和服务端:Server

    两端通信的步骤:

      客户端主动连接服务器  连接成功才能通信

      服务端一定要先启动

    3.2java中提供了两个类来实现TCP程序

    ​   java.net.Socket ------>创建对象Socket-----》发送请求给服务器 服务器做出响应两者建立通信

    ​   ServerSocket----->创建对象ServerSocket---->相当于开启一个服务 用来等待客户端连接

    四。 4 Socket套接字 重点难点

    ​   4.1 概述:此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。

    ​   4.2 构造方法

    ​     public Socket(InetAddress address, int port) 创建对象 连接到主机的指定的端口号`

              public Socket(127.0.0.1,6666);

       4.3 成员方法

    ​     getInputStream()------>套接字的输入流

    ​     getOutputStream()------>套接字的输出流

    ​     close();

    ​     shutdownOutput();禁用此套接字的输出流

    public class DemoLient {
        public static void main(String[] args) throws IOException {
            //创建客户端Socket对象 后面跟自己的IP地址,和端口号
            Socket socket = new Socket("127.0.0.1",8888);
            //客户端Socket通过输出getoutputStream获取一个输出流
            OutputStream os = socket.getOutputStream();
            //输出流向服务器大哥招呼,并同时字符串转字节数组
            os.write("您好服务器!".getBytes());
            //客户端socket通过InputStream输入流创建输入流
            InputStream is = socket.getInputStream();
            //创建数组让读取速度加快
            byte[]bytes=new byte[1024];
            int len=is.read(bytes);
            System.out.println(new String(bytes,0,len));
            //释放资源
            os.close();
            socket.close();
        }
    }

    五。 ServerScoket 重点难点

       5.1 ServerScoket构造方法

        ServerSocket**(int port)` 绑定一个指定端口号 `ServerSocket(6666)`

      5.2 成员方法 accept() 监听并且接受连接 用于客户端实现通信 阻塞直到建立连接

    public class DemoServer {
        public static void main(String[] args) throws IOException {
            //创建ServerSocket服务端对象,固定端口号
            ServerSocket se = new ServerSocket(8888);
            //ServerSocket对象调用accept监听方法 生成一个Socket对象
            Socket accept = se.accept();
            //利用Socket对象生成网络字节输入流
            InputStream is = accept.getInputStream();
            //利用本地输入流读取
            byte[] bytes=new byte[1024];
            int len=is.read(bytes);
            System.out.println(new String(bytes,0,len));
            //利用网络字节输出流接收到客户端发送的内容之后,谢谢
            OutputStream os = accept.getOutputStream();
            os.write("谢谢,收到!".getBytes());
            //释放资源
            accept.close();
            se.close();
        }
    }

    六。 案例 上传图片到服务器

    ​   文件上传服务器的原理

        1 客户端使用本地字节流 读取本地文件

        ​ 2 客户端使用网络字节输出流 把图片传到服务器上

    ​     3 服务器使用网络字节输入流 读取客户端上传的文件

    ​     4 服务器端使用本地字节输出流 把客户端的文件保存到服务器的硬盘上

    ​     5 服务器网络输出流 给客户端写传输成功

    ​     6 客户端使用网络的字节输入流 读取服务器回写“传输成功”

    ​     注意:客户端/服务器端和本地文件读写 必须用自己的创建流

    ​     客户端/服务器端之间的交互 用Socket中提供的网络流

        ​ 客户端本地----》复制---》服务器

    ​     服务器----》复制----》服务器本地硬盘

    必须清楚: 数据源 目的地

  • 相关阅读:
    nodejs难点
    react 组件化
    vue router & vuex
    vue源码思考
    cookie & session
    servlet
    Hashmap
    Zookeeper+Kafka+flink+socket
    flink consumer can realize kafka avro with overwriting kafkaDeseriler, and executor multithread and genretic extends
    flink kafka consumer with avro schema. handling null
  • 原文地址:https://www.cnblogs.com/liurui-bk517/p/10939928.html
Copyright © 2020-2023  润新知