IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【七日阅书】7 网络通信&全书总评《Java程序设计与计算思维》 -> 正文阅读

[网络协议]【七日阅书】7 网络通信&全书总评《Java程序设计与计算思维》

一、前言

本文为【七日阅书】《Java程序设计与计算思维》的最后一篇,主要内容是介绍网络相关以及全书总评。

前面内容请参考如下

【七日阅书】1 计算思维和Java特性《Java程序设计与计算思维》

【七日阅书】2 Java的数据类型和流程控制《Java程序设计与计算思维》

【七日阅书】3 字符串、数组、集合、泛型《Java程序设计与计算思维》

【七日阅书】4 理解面向对象《Java程序设计与计算思维》

【七日阅书】5 抽象和接口、异常处理《Java程序设计与计算思维》

【七日阅书】6 多线程和文件流《Java程序设计与计算思维》

二、初识网络

首先我们需要对网络有基本的概念,这里本书介绍的也不多,仅作为基础概念作为补充。

image-20211208171740287

java.net库能获取网络信息。

        InetAddress inetAddress = InetAddress.getLocalHost();
        System.out.print(inetAddress.getHostAddress());
        System.out.print("\r\n");
        System.out.print(inetAddress.getHostName());

image-20211208173229097

三、Socket接口

Socket分为两类

  • TCP。Stream通信,特点是保证传输。
  • UDP。Datagram通信,特点是无连接,不保证送达。

服务端连接Socket的过程如下

image-20211208173500694

package com.example.demo.tool;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

public class Server {
    ServerSocket serverSocket;
    Socket socket;
    public InputStream inputStream;
    public OutputStream outputStream;

    public Server(int port){
        try{
            serverSocket = new ServerSocket(port);
            while (true){
                socket = serverSocket.accept();
                inputStream = socket.getInputStream();
                outputStream = socket.getOutputStream();
                String line = System.getProperty("line.separator");
                String out = "服务器信息:" + line + serverSocket.getInetAddress().getHostName()
                        + line + serverSocket.getLocalPort();
                outputStream.write(out.getBytes(StandardCharsets.UTF_8));
            }

        } catch (IOException exception) {
            System.err.print(exception.toString());
        }

    }
}

控制器调用如下

        Server server;
        int port = 1024;
        BufferedReader bufferedReader;
        PrintWriter printWriter;
        server = new Server(port);
        bufferedReader = new BufferedReader(new InputStreamReader(server.inputStream));
        printWriter = new PrintWriter(new OutputStreamWriter(server.outputStream));

打开本地终端访问telnet localhost 1024,就能连接建立的socket服务 。

image-20211209101052247

四、UDP通信

DatagramSocket是一个低级的网络接口,没有数据流操作,只有字节数组来传送或接收。

DatagramPacket类可以用来创建一个数据分组,再通过DatagramSocket进行传送和接收。

接收端代码

       DatagramPacket datagramPacket;
        DatagramSocket datagramSocket;
        byte[] buffer = new byte[20];
        String msg;
        System.out.print("服务端开始接收数据");
        while (true){
            datagramPacket = new DatagramPacket(buffer, buffer.length);
            datagramSocket = new DatagramSocket(9995);
            datagramSocket.receive(datagramPacket);
            msg = new String(buffer,0,datagramPacket.getLength());
            System.out.print("信息为:" + msg + "\r\n");
            datagramSocket.close();
        }

发送端代码

        System.out.print("发送消息\r\n");
        String msg= "msg 123232";
        byte[]  buffer = msg.getBytes();
        DatagramPacket datagramPacket = new DatagramPacket(buffer,buffer.length, InetAddress.getByName("127.0.0.1"),9995);
        DatagramSocket datagramSocket = new DatagramSocket();
        datagramSocket.send(datagramPacket);
        datagramSocket.close();

先访问接收端,再多次请求发送端,我们就能看到输出。

image-20211209133436429

这样我们就简单完成了UDP传输的应用。

从上面的例子中,我们可以看出TCP和UDP的区别。

五、URL类

URL类比较简单,属于工具类,通过输入网址得到协议、接口等信息。

        URL url = new URL("https://blog.csdn.net/diandianxiyu_geek");
        System.out.print(url.getProtocol() + "\r\n");
        System.out.print(url.getPath() + "\r\n");
        System.out.print(url.getHost() + "\r\n");
        System.out.print(url.getFile() + "\r\n");
        System.out.print(url.getQuery() + "\r\n");
        System.out.print(url.getRef() + "\r\n");

执行结果如下

image-20211209134553439

六、总评

本书对Java基础做了全面的介绍,并带有源码,我在学习的过程中全部手写了对应示例的代码,并做了细微的调整,并不是完全照抄。

这几年前后端的职责分工越来越细,所以我忽略了本书对于Swing等界面开发的相关内容,专注语言本身。如果你阅读的书籍中的内容并不是全部都会有帮助,可以选择性的学习,找到属于自己的重点。

本书中每章节最前面的描述性文字的信息量很大,但是出于本书的定位并没有详细展开,作为读者的我还是有些遗憾的。

推荐人群

  • 刚入门的大学生
  • 刚接触Java语言不久的开发人员
  • 想要了解Java语言的人士

七、源码地址

小雨青年 / Java Demo · CODE CHINA (gitcode.net)

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 11:24:18  更:2021-12-10 11:26:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:15:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码