网络编程
    CS应用程序:双端 要通过网络编程 实现信息在双端间互通
    网络通讯协议:
    一套标准 是网络信息互通的基础

    UDP协议:无连接通讯协议 数据发送端和接收端不建立逻辑连接 安全性低 有可能导致信息的损失 优势:消耗资源少 传输效率快 一般用于音频 视频 例如视频会议的信息传输
    TCP/IP协议:安全性高 传输数据更完整
    有三次握手机制 拥有面向连接的特性 能够保证数据的安全性
    第一次握手:客户端向服务器端发送请求 等待服务器端响应
    第二次握手:服务端回写信息给客户端 通知客户端服务器已经收到消息
    第三次握手:客户端向服务器端发送请求连接
    以上三次握手成功后 才真正建立连接 可以进行数据的传递

    一定由客户端发送第一次请求
    服务器端做的事情永远只有一件:监听端口号 一旦接收到某个客户发送请求 则对应的获取其socket对象
    后续 服务器都可以利用这个socket对象向这个客户端发送信息
    (服务器端一定要先启动)

    网络编程三要素:
    协议:
    IP地址:
    IPv4:一个32位的二进制数 分为四个字节 其中每个字节都是0-255之间的十进制整数 组合排列后可以表示42亿个标识
    IPv6:采用128位地址长度 每16个字节一组 分为8组十六进制
    AB43:AF65:AB76:AC65:AB43:AF65:AB76:AC65
    端口号:
    使用端口号来标记服务 取值范围0-65535 自定义的服务可以使用大于1024的端口号

    Server:服务器端
    //1.创建设定服务器对象 主要是设定端口号
    ServerSocket server = new ServerSocket(9999);
    //2.监听端口号 一旦接受到客户端请求 此方法会触发返回与这个客户端的socket对象
    Socket socket = server.accept();
    //3.通过socket对象 获取对应的读入写出流
    InputStream is = socket.getInputStream();
    OutputStream os = socket.getOutputStream();

    //4.关闭socket对象
    socket.close();
    Client:客户端
    //1.创建socket对象 参数指明向哪一台电脑上的哪一个端口(服务)发送请求
    Socket socket = new Socket(“127.0.0.1”,9999);
    //2.通过socket对象 获取对应的读入写出流
    InputStream is = socket.getInputStream();
    OutputStream os = socket.getOutputStream();
    //3.关闭socket对象
    socket.close();

    案例:信息互通
    服务器端持续开启的循环
    ServerSocket server = new ServerSocket(9999);
    while(true) {
    //2.监听端口号 一旦接受到客户端请求 此方法会触发返回与这个客户端的socket对象
    Socket socket = server.accept();

    }
    读入操作不能正常退出—》因为在写出的时候没有标记结束
    无论在客户端还是服务器端 写出完毕后添加结束标记
    OutputStream os = socket.getOutputStream();
    os.write(“向服务端发送请求”.getBytes());
    //标记写出内容已经完结
    socket.shutdownOutput();