• Java网络(精简版)


一、网络编程基础

  1. 什么是计算机网络?

    ​ 计算机网络是指两台或更多的计算机组成的网络,在同一个网络里,任意两台计算机都可以直接通信,因为所有的计算机都遵从同一种网络协议。

  2. 网络编程主要问题:

    • 如何准确的定位网络上一台或多台主机
    • 找到主机后如何可靠高效的进行数据传输
  3. 编写网络通讯程序有两种做法

    • TCP:基于传输控制协议
    • UDP:基于用户数据报协议
  4. 网络协议简介:

    • IP:Internet Protocol,分组交换协议。只负责发送数据包,不保证可靠传输。

    • TCP

      ​ Transport Control Protocol,传输控制协议。建立在 IP协议之上, 负责控制数据包传输,但是在传输数据之前需要先建立连接。

    • UDP

      ​ User Datagram Protocol,数据报文协议。UDP协议在通信之前不需要建立连接,属于无连接协议;传输效率高、使用简单,但数据传输不可靠,常用于对数据丢失容忍度较高的场景,如视频、音频会议。

  5. 端口说明:

    ​ UDP端口和 TCP端口虽然都使用 0 ~ 65535,但他们是两套独立的端口,一个应用程序通过TCP协议占用了 1234端口,不影响另一个应用程序通过 UDP协议占用 1234端口。

  6. TCP与 UDP的对比:

    \ TCP UDP
    可靠性 可靠 不可靠
    连接性 面向连接 无连接
    报文 面向字节流 面向报文
    传输效率
    双工性 全双工 一对一、一对多、多对多
    流量控制 滑动窗口
    拥塞程度 慢开始、拥塞避免、快恢复
    传输速率
    应用场景 效率要求低、准确性要求高 效率要求高、准确性要求低

    名词解释:

    • 面向字节流:应用程序和TCP的交互是一次一个数据块(大小不等),TCP把这些数据块看成是一连串无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就会把它分割成多块传送。
    • 面向报文:应用层交给 UDP多长的报文,UDP就发送多长的报文,即一次发送一个报文。因此应用程序必须选择大小合适的报文。报文太长,则IP层需要分片,降低效率。
    • 全双工:指在发送数据的同时也能够接收数据,两者同步进行。
    • 半双工:指一个时间段内只有一个动作发生。
  7. TCP/IP协议说明:

    ​ 因为 TCP/IP协议使用广泛,所以现在常用 TCP/IP来泛指互联网协议,而不仅仅是单指这两个协议。

  8. IP地址说明:

    • 在互联网中,IP地址用于标识网络接口(Network Interface)。

    • 每台接入互联网的计算机至少拥有一个 IP地址,具体决定于网卡数量。

    • 本机 IP地址为:127.0.0.1,也就是 hosts映射文件中的 localhost

    • 公网 IP可以被直接访问,内网 IP只能在内网访问,如 192.168.0.8。

    • IPv4:采用 32位地址,分为 4组 8位数据8位 : 8位 : 8位 : 8位

      范围:0 ~ 255,地址总数有 232(大约 42亿)个,目前已耗尽。

    • IPv6:采用 128位地址,分为 8组 16位数据16位 : 省略6部分 : 16位

      范围:0000~FFFF,地址总数 2138(大约 340万亿亿亿亿),现阶段用不完。

  9. 每台计算机的网卡都有 3个关键配置:

    • IP地址

    • 子网掩码

    • 网关 IP地址

  10. 网关说明:

  • 是什么?路由器或者交换机。
  • 作用:负责连接多个网络,把一个网络的数据包发送到另一个网络(路由过去)。
  1. 计算机网络号:

    • 简介:

      ​ 拥有相同计算机网络号的设备处于同一个网络之中,可以直接通信;否则只能借助网关等设备进行间接通信。

    • 获得方式:根据每台计算机的 IP地址、子关掩码进行计算。

    IP = 101.202.99.2
    Mask = 255.255.255.0
    Network = IP & Mask = 101.202.99.0
    
  2. 域名说明

    • 直接记忆 IP地址非常困难。
    • 域名是 IP地址的抽象表达形式。
    • DNS:Domain Name Server,域名解析服务器负责把域名解析成客户端可以访问的 IP地址。
    • nslookup指令:Name Server Lookup,解析域名。
    ❯ nslookup www.thinkstu.com
    Server:     8.8.8.8
    Address:    8.8.8.8#53Non-authoritative answer:
    Name:   www.thinkstu.com
    Address: 39.107.99.33
    
  3. OSI网络模型 TCP/IP网络模型

    • OSI(七层):Open System Interconnect,ISO组织定义的计算机互联标准模型,目的是简化网络各层的操作、提供标准接口便于实现和维护。但 OSI只是理论模型,未被实际运用。
    • TCP/IP(五层):广泛运用,成为事实上的标准。

  4. 浏览器访问网页原理:

    • 浏览器希望访问某个网站
    • 两者通过 80端口或者 443端口建立 TCP连接
    • 浏览器向服务器发送 HTTP请求
    • 服务器收到请求,返回 HTTP响应(包含网页内容)
    • 浏览器解析内容(渲染 HTML页面)
  5. Java中的网络功能类:

    • **应用层:**URL、URLConnection
    • **传输层:**Socket、ServerSocket、DatagramPacket、DatagramSocket、MulticastSocket
    • **IP层 :**InetAddress
  6. Java网络编程的主要方式:

    • 基于 URL网络连接。
    • 基于套接字 Socket通信。
    • 基于 UDP数据报通信。

二、TCP编程

  1. Socket简介

    • Socket = IP地址 + 端口
    • IP对应主机,端口对应主机上的监听程序。
    • 应用程序通过 Socket建立连接,具体网络功能由操作系统底层实现,Java只提供封装。
    • 这里说的是操作系统层面的 Socket,不是 Java封装的 Socket类。
    • 端口号由操作系统分配,范围是 0 ~ 65535 (216-1)。
    • 小于 1024的端口属于特权端口,需要管理员权限。
    • 大于 1024的端口可以任意使用。
    • 每个 Socket都持有输入流、输出流。

  2. TCP编程简介:

    • 服务器端:主动监听指定端口;Socket = 自身IP地址 + 指定端口号。
    • 客户端:主动连接服务器;Socket = 自身IP地址 + 操作系统随机分配的端口号。
  3. Java类介绍:

    • ServerSocket:用于服务端程序
    • Socket:用于服务端与客户端程序
  4. Java Socket类

    构造方法:

    • Socket(String host, int port) 使用指定端口和主机,向服务器发起连接,若成功创建socket对象,否则抛出异常。
    • Socket(InetAddress address, int port) 使用InetAddress对象所表示的端口和IP地址,向服务器发起连接,若成功创建socket对象,否则抛出异常。

    常用方法:

    public InputStream getInputStream ( )
    public OutputStream getOutputStream ( )
    public void close ( )
    public InetAddress getInetAddress ( )
    public int getPort ( )
    public int getLocalPort ( )
    public void setSoTimeout ( int timeout )
    
  5. Java ServerSocket类

    构造方法:

    • public ServerSocket ( int port ):在指定的端口创建一个倾听套接字,默认可接收50个客户端连接。
    • public ServerSocket ( int port, int backlog )支持指定数目的连接
    • public ServerSocket ( int port, int backlog, InetAddress bindAddr ):bindAddr用于绑定服务器端程序所使用的IP地址。

    常用方法:

    • public Socket accept ( ) :监听客户端连接请求,等待客户端的连接。accept ( ) 方法调用后,服务器程序将处于堵塞状态,直到监听到客户端连接,返回一个新创建的Socket对象。接下来利用这个返回的Socket对象与客户端进行数据收发。
    • public void **setSoTimeout **( int timeout ) :设置accept ( )方法等待连接的时间为 timeout毫秒。若时间已到,还没有客户机连接,则抛出InterruptedIOException异常,accept ( )方法不再阻塞,该 Socket可继续使用。若timeout值为0,则表示accept ( )永远等待。注:该方法必须在倾听Socket创建后,在accept ( )之前调用才有效。
    • public void close ( ):关闭Socket。

  6. 服务器端编程

    • SocketServer:监听 6666端口。
    • ss.accept ( ):堵塞,无限期监听客户连接;每当有新的客户端连接进来后,就创建新的 Socket实例。
    • Thread:并发处理。
    public class Server {public static void main(String[] args) throws IOException {ServerSocket ss = new ServerSocket(6666);while(true){Socket socket = ss.accept ( );Thread t = new Handler(socket);t.start ( );
    }}}class Handler extends Thread {Socket socket;public Handler(Socket sock) {this.socket = socket;}@Overridepublic void run ( ) {}
    }
    
  7. 客户端编程

    • 建立连接,等待消息。
    • 连接失败会直接抛出异常,可以在异常中写入操作。
    public class Client {public static void main(String[] args) throws IOException {Socket sock = new Socket("localhost", 6666); try (InputStream input = sock.getInputStream ( )) {handle(input);}sock.close ( );}private void handle(InputStream input) throws IOException {}
    }
    
  8. Socket输入流、输出流

    • 客户和服务器通过 OutputStream和 InputStream对象进行通信
    • 输出流flush ( )方法能够让数据立马得到刷新。


三、UDP编程

  1. Java类简介:

    • 网络连接:DatagramSocket
    • 数据存储:DatagramPacket
  2. 服务器端:

    • DatagramSocket:监听 6666端口。
    • DatagramPacket:buffer存储数据;getOffset ( )、getLength ( )指定起始位置和长度。
    • 服务器可以通过 DatagramPacket对象获取客户端地址。
    packet.getSocketAddress ( )  //获取客户端地址
    

  3. 客户端:与服务器端大体一致细微不同。

    • 创建 DatagramSocket实例时不需要指定端口,操作系统自动分配空闲端口。
    • setSoTimeout(1000):超时时间为 1秒。当客户端接发送数据包后,等待响应时长为 1秒,节省客户端资源(默认永远等待,浪费资源)。
    • connect ( ):UDP协议属于无连接协议,这里并非真的连接,而是 Java内置安全检查机制的要求。其会在客户端 DatagramSocket实例中保存服务器端的 IP和端口号,确保当前实例只能往指定的地址和端口发送数据包,不能往其他地址和端口发送。
    • 如果客户端希望向两个不同的服务器发送 UDP包,必须创建两个DatagramSocket实例。
    • 如果客户端认为通信结束,可以调用disconnect ( )断开连接。


四、Email详解

1️⃣. 发送 Email

  1. 简介:发送邮件,需要导 pom包。

  2. 三个名词:

    • MUA:Mail User Agent,用户邮件代理(主要编程此)
    • MTA:Mail Transfer Agent,转发邮件代理(现成)
    • MDA:Mail Delivery Agent,接受邮件代理(现成)
  3. 端口说明:

    ​ MUA 到 MTA发送邮件的协议是 SMTP协议(Simple Mail Transport Protocol),使用标准端口 25,也可以使用加密端口 465或 587。

  4. SMTP协议简介:

    ​ 建立在TCP之上,任何程序发送邮件都必须遵守 SMTP协议。

    ​ Java提供 JavaMail API接口,实现了 SMTP协议。

  5. 具体实现略。

2️⃣. 接收 Email

  1. 简介:

    ​ 从 MDA服务器上抓取邮件到本地,所使到用的协议可以是 POP3或者 IMAP。

  2. POP3协议:

    Post Office Protocol version 3,建立在TCP连接之上。

    标准端口 110,加密端口 995。

  3. IMAP协议:

    Internet Mail Access Protocol,建立在TCP连接之上。

    标准端口 143,加密端口 993。

  4. POP3协议 与 IMAP协议:

    • 使用方法类似。
    • IMAP协议:本地所有操作都会自动同步到服务器上,允许用户在邮件服务器的收件箱中创建文件夹。
    • POP3协议:正好相反。
  5. 具体实现略。


五、其他 Java类

  1. URL

    ​ 提供方法openStream ( ),读取 URL对象所指定的资源。

  2. URLConnection

    ​ 提供的信息比 URL类多,除了可以获取资源数据外,还可以提供资源长度、资源发送时间、资源最新更新时间、资源编码、资源的标题等许多信息。当与 URL建立连接时,首先要在一个URL对象上通过方法 openConnection ( )生成对应的URLConnection对象。

  3. URLURLConnection区分

    • URL:方法openStream ( ) 只能从网络上读取的数据。
    • URLConnection:可以在应用程序和URL资源之间进行交互,既可以从URL中读取数据,也可以向URL中发送数据
  4. InetAddress

    (构造方法不公开,对象通过静态方法获取)

    • InetAddress[ ] getAllByName ( String host ):在给定主机名的情况下,根据系统上配置的名称服务返回其IP地址所组成的数组。
    • InetAddress getByAddress ( byte[ ] addr ):在给定原始IP地址的情况下,返回 InetAddress 对象。
    • InetAddress getByAddress ( String host, byte[ ] addr ):根据提供的主机名和IP地址创建InetAddress。
    • InetAddress getByName ( String host ):在给定主机名的情况下确定主机的IP地址。
    • InetAddress getLocalHost ( ):返回本地主机地址。

附录

Java网络编程(精简版)相关推荐

  1. Java网络编程(第四版)

    网站 更多书籍点击进入>> CiCi岛 下载 电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击"普通下载" ...

  2. python网络编程视频教程_Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密)...

    Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密) 全面理解BIO/NIO/AIO 网络层编程,是每一个开发者都要面对的技术.课程为解决大家学习网络层知识的难题, ...

  3. Java 网络编程:必知必会的 URL 和 URLConnection

    java.net.URL 类将 URL 地址进行了封装,并提供了解析 URL 地址的基本方法,比如获取 URL 的主机名和端口号.java.net.URLConnection 则代表了应用程序和 UR ...

  4. java 密钥工厂 desede_20145212 实验五《Java网络编程》

    20145212 实验五<Java网络编程> 一.实验内容1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代 ...

  5. Java学习总结:52(Java网络编程)

    Java网络编程 开发第一个网络程序 java.net包提供了网络编程有关的开发工具类,在此包中有一下两个主要的核心操作类. ServerSocket类:是一个封装支持的TCP协议的操作类,主要工作在 ...

  6. Java - 网络编程(NetWork)

    Java - 网络编程(NetWork) 一.java.net包下的 InetAddress 类的使用: > 一个 InetAddress 代表着一个IP地址 > 主要用来查看本机的IP和 ...

  7. 【Java】 Java网络编程总结

     一.网络编程三要素: IP地址:每个设备在网络中的唯一标识. 端口号:每个程序在设备上的唯一标识. 协议:为计算机网络中进行数据交换而建立的规则或约定的集合. UDP: 面向无连接,数据不安全,速度 ...

  8. Java网络编程笔记5

    在Java网络编程笔记4中我们看到了客户端与服务器通信的过程,只是在前面的程序只是单个客户端与服务器通信 的例子. 接下来我们看如何实现多个客户端与服务器通信,对于服务器来说,它要为每个客户端请求的S ...

  9. 实验五 Java网络编程及安全 实验报告 20135232王玥

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序与设计         班级:1352 姓名:王玥 学号:20135232 成绩:             指导 ...

  10. NIO详解(一):java网络编程IO总结(BIO、NIO、AIO)

    1.基本概念 在Java网络通信中,最基本的概念就是Socket编程了.Socket又称"套接字" 向网络发出请求或者应答网络请求. Socket 和ServerSocket类库位 ...

最新文章

  1. 90行代码!大一学生自学编程,自创搜题网站,已在GitHub开源
  2. Android性能优化之图片压缩优化
  3. java arraylist 字符串_Java ArrayList、string、string[]之间的转换
  4. C4C的导航菜单的问题,disable这个属性,就会变成正常的两级菜单
  5. 松下壁挂式新风系统推荐_壁挂式新风系统哪个好?
  6. P1368-工艺【最小表示法】
  7. 买房一定要知道的购房误区 买涨不买跌的心态可能得改
  8. 富文本编辑vue-quill-editor文件上传
  9. 使用effect的注意事项
  10. es6 class super关键字
  11. java生成pdf的流_Java 文件输出流.pdf
  12. 13.实现鼠标中断处理
  13. 疫情防控中小学开学错峰错时返校放学方案
  14. HTML5期末大作业:爱宠之家网站设计——蓝色版爱宠之家(5页) 致热爱动物网页设计作品 大学生爱宠专题网页设计作业模板 动物静态HTML网页模板下载
  15. niosii spi 外部_【笔记】NIOS II spi详解
  16. J. 青出于蓝胜于蓝(dfs序+树状数组)
  17. python统计学生平均成绩和及格人数_SQL 查询:查询学生平均成绩
  18. BlackBerry上网初体验
  19. 餐馆点菜系统python程序_Python写一个自动点餐程序
  20. 人工智能 - A*算法解决迷宫问题 附源码和可视化显示

热门文章

  1. 产品配件类目税目分类_2018商品和服务税收分类编码表
  2. QT学习之自定义信号
  3. 工业企业数据库处理——2.匹配样本
  4. 计算机中数据存储--ASCII码
  5. IBM小型机安装AIX系统
  6. Docker使用CA认证
  7. 使用treesoft下的TreeNMS管理和监控redis服务器
  8. OpenGL学习(八)phong光照模型
  9. Jmeter安装及使用教程
  10. kafka 权威指南笔记