Java网络编程(精简版)
Java网络(精简版)
一、网络编程基础
什么是计算机网络?
计算机网络是指两台或更多的计算机组成的网络,在同一个网络里,任意两台计算机都可以直接通信,因为所有的计算机都遵从同一种网络协议。
网络编程主要问题:
- 如何准确的定位网络上一台或多台主机
- 找到主机后如何可靠高效的进行数据传输
编写网络通讯程序有两种做法
- TCP:基于传输控制协议
- UDP:基于用户数据报协议
网络协议简介:
IP
:Internet Protocol,分组交换协议。只负责发送数据包,不保证可靠传输。TCP
: Transport Control Protocol,传输控制协议。建立在 IP协议之上, 负责控制数据包传输,但是在传输数据之前需要先建立连接。
UDP
: User Datagram Protocol,数据报文协议。UDP协议在通信之前不需要建立连接,属于无连接协议;传输效率高、使用简单,但数据传输不可靠,常用于对数据丢失容忍度较高的场景,如视频、音频会议。
端口说明:
UDP端口和 TCP端口虽然都使用 0 ~ 65535,但他们是两套独立的端口,一个应用程序通过TCP协议占用了 1234端口,不影响另一个应用程序通过 UDP协议占用 1234端口。
TCP与 UDP的对比:
\ TCP UDP 可靠性 可靠 不可靠 连接性 面向连接 无连接 报文 面向字节流 面向报文 传输效率 低 高 双工性 全双工 一对一、一对多、多对多 流量控制 滑动窗口 无 拥塞程度 慢开始、拥塞避免、快恢复 无 传输速率 慢 快 应用场景 效率要求低、准确性要求高 效率要求高、准确性要求低 名词解释:
- 面向字节流:应用程序和TCP的交互是一次一个数据块(大小不等),TCP把这些数据块看成是一连串无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就会把它分割成多块传送。
- 面向报文:应用层交给 UDP多长的报文,UDP就发送多长的报文,即一次发送一个报文。因此应用程序必须选择大小合适的报文。报文太长,则IP层需要分片,降低效率。
- 全双工:指在发送数据的同时也能够接收数据,两者同步进行。
- 半双工:指一个时间段内只有一个动作发生。
TCP/IP协议说明:
因为 TCP/IP协议使用广泛,所以现在常用 TCP/IP来泛指互联网协议,而不仅仅是单指这两个协议。
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万亿亿亿亿),现阶段用不完。
每台计算机的网卡都有 3个关键配置:
IP地址
子网掩码
网关 IP地址
网关说明:
- 是什么?路由器或者交换机。
- 作用:负责连接多个网络,把一个网络的数据包发送到另一个网络(路由过去)。
计算机网络号:
简介:
拥有相同计算机网络号的设备处于同一个网络之中,可以直接通信;否则只能借助网关等设备进行间接通信。
获得方式:根据每台计算机的 IP地址、子关掩码进行计算。
IP = 101.202.99.2 Mask = 255.255.255.0 Network = IP & Mask = 101.202.99.0
域名说明
- 直接记忆 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
OSI网络模型 与 TCP/IP网络模型
OSI(七层)
:Open System Interconnect,ISO组织定义的计算机互联标准模型,目的是简化网络各层的操作、提供标准接口便于实现和维护。但 OSI只是理论模型,未被实际运用。TCP/IP(五层)
:广泛运用,成为事实上的标准。
浏览器访问网页原理:
- 浏览器希望访问某个网站
- 两者通过 80端口或者 443端口建立 TCP连接
- 浏览器向服务器发送 HTTP请求
- 服务器收到请求,返回 HTTP响应(包含网页内容)
- 浏览器解析内容(渲染 HTML页面)
Java中的网络功能类:
- **应用层:**URL、URLConnection
- **传输层:**Socket、ServerSocket、DatagramPacket、DatagramSocket、MulticastSocket
- **IP层 :**InetAddress
Java网络编程的主要方式:
- 基于 URL网络连接。
- 基于套接字 Socket通信。
- 基于 UDP数据报通信。
二、TCP编程
Socket简介
Socket = IP地址 + 端口
。- IP对应主机,端口对应主机上的监听程序。
- 应用程序通过 Socket建立连接,具体网络功能由操作系统底层实现,Java只提供封装。
- 这里说的是操作系统层面的 Socket,不是 Java封装的 Socket类。
- 端口号由操作系统分配,范围是 0 ~ 65535 (216-1)。
- 小于 1024的端口属于特权端口,需要管理员权限。
- 大于 1024的端口可以任意使用。
- 每个 Socket都持有输入流、输出流。
TCP编程简介:
- 服务器端:主动监听指定端口;Socket = 自身IP地址 + 指定端口号。
- 客户端:主动连接服务器;Socket = 自身IP地址 + 操作系统随机分配的端口号。
Java类介绍:
ServerSocket
:用于服务端程序Socket
:用于服务端与客户端程序
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 )
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。
服务器端编程
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 ( ) {} }
客户端编程
- 建立连接,等待消息。
- 连接失败会直接抛出异常,可以在异常中写入操作。
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 {} }
Socket输入流、输出流
- 客户和服务器通过 OutputStream和 InputStream对象进行通信
- 输出流
flush ( )
方法能够让数据立马得到刷新。
三、UDP编程
Java类简介:
- 网络连接:
DatagramSocket
- 数据存储:
DatagramPacket
- 网络连接:
服务器端:
DatagramSocket
:监听 6666端口。DatagramPacket
:buffer存储数据;getOffset ( )、getLength ( )指定起始位置和长度。- 服务器可以通过 DatagramPacket对象获取客户端地址。
packet.getSocketAddress ( ) //获取客户端地址
客户端:与服务器端大体一致细微不同。
- 创建 DatagramSocket实例时不需要指定端口,操作系统自动分配空闲端口。
setSoTimeout(1000)
:超时时间为 1秒。当客户端接发送数据包后,等待响应时长为 1秒,节省客户端资源(默认永远等待,浪费资源)。connect ( )
:UDP协议属于无连接协议,这里并非真的连接,而是 Java内置安全检查机制的要求。其会在客户端 DatagramSocket实例中保存服务器端的 IP和端口号,确保当前实例只能往指定的地址和端口发送数据包,不能往其他地址和端口发送。- 如果客户端希望向两个不同的服务器发送 UDP包,必须创建两个
DatagramSocket
实例。 - 如果客户端认为通信结束,可以调用
disconnect ( )
断开连接。
四、Email详解
1️⃣. 发送 Email
简介:发送邮件,需要导 pom包。
三个名词:
MUA
:Mail User Agent,用户邮件代理(主要编程此)MTA
:Mail Transfer Agent,转发邮件代理(现成)MDA
:Mail Delivery Agent,接受邮件代理(现成)
端口说明:
MUA 到 MTA发送邮件的协议是 SMTP协议(Simple Mail Transport Protocol),使用标准端口 25,也可以使用加密端口 465或 587。
SMTP协议简介:
建立在TCP之上,任何程序发送邮件都必须遵守 SMTP协议。
Java提供
JavaMail
API接口,实现了 SMTP协议。具体实现略。
2️⃣. 接收 Email
简介:
从 MDA服务器上抓取邮件到本地,所使到用的协议可以是 POP3或者 IMAP。
POP3协议:
Post Office Protocol version 3,建立在TCP连接之上。
标准端口 110,加密端口 995。
IMAP协议:
Internet Mail Access Protocol,建立在TCP连接之上。
标准端口 143,加密端口 993。
POP3协议 与 IMAP协议:
- 使用方法类似。
- IMAP协议:本地所有操作都会自动同步到服务器上,允许用户在邮件服务器的收件箱中创建文件夹。
- POP3协议:正好相反。
具体实现略。
五、其他 Java类
URL
提供方法openStream ( ),读取 URL对象所指定的资源。
URLConnection
提供的信息比 URL类多,除了可以获取资源数据外,还可以提供资源长度、资源发送时间、资源最新更新时间、资源编码、资源的标题等许多信息。当与 URL建立连接时,首先要在一个URL对象上通过方法 openConnection ( )生成对应的URLConnection对象。
URL
与URLConnection
区分- URL:方法openStream ( ) 只能从网络上读取的数据。
- URLConnection:可以在应用程序和URL资源之间进行交互,既可以从URL中读取数据,也可以向URL中发送数据
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网络编程(精简版)相关推荐
- Java网络编程(第四版)
网站 更多书籍点击进入>> CiCi岛 下载 电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击"普通下载" ...
- python网络编程视频教程_Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密)...
Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密) 全面理解BIO/NIO/AIO 网络层编程,是每一个开发者都要面对的技术.课程为解决大家学习网络层知识的难题, ...
- Java 网络编程:必知必会的 URL 和 URLConnection
java.net.URL 类将 URL 地址进行了封装,并提供了解析 URL 地址的基本方法,比如获取 URL 的主机名和端口号.java.net.URLConnection 则代表了应用程序和 UR ...
- java 密钥工厂 desede_20145212 实验五《Java网络编程》
20145212 实验五<Java网络编程> 一.实验内容1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代 ...
- Java学习总结:52(Java网络编程)
Java网络编程 开发第一个网络程序 java.net包提供了网络编程有关的开发工具类,在此包中有一下两个主要的核心操作类. ServerSocket类:是一个封装支持的TCP协议的操作类,主要工作在 ...
- Java - 网络编程(NetWork)
Java - 网络编程(NetWork) 一.java.net包下的 InetAddress 类的使用: > 一个 InetAddress 代表着一个IP地址 > 主要用来查看本机的IP和 ...
- 【Java】 Java网络编程总结
一.网络编程三要素: IP地址:每个设备在网络中的唯一标识. 端口号:每个程序在设备上的唯一标识. 协议:为计算机网络中进行数据交换而建立的规则或约定的集合. UDP: 面向无连接,数据不安全,速度 ...
- Java网络编程笔记5
在Java网络编程笔记4中我们看到了客户端与服务器通信的过程,只是在前面的程序只是单个客户端与服务器通信 的例子. 接下来我们看如何实现多个客户端与服务器通信,对于服务器来说,它要为每个客户端请求的S ...
- 实验五 Java网络编程及安全 实验报告 20135232王玥
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序与设计 班级:1352 姓名:王玥 学号:20135232 成绩: 指导 ...
- NIO详解(一):java网络编程IO总结(BIO、NIO、AIO)
1.基本概念 在Java网络通信中,最基本的概念就是Socket编程了.Socket又称"套接字" 向网络发出请求或者应答网络请求. Socket 和ServerSocket类库位 ...
最新文章
- 90行代码!大一学生自学编程,自创搜题网站,已在GitHub开源
- Android性能优化之图片压缩优化
- java arraylist 字符串_Java ArrayList、string、string[]之间的转换
- C4C的导航菜单的问题,disable这个属性,就会变成正常的两级菜单
- 松下壁挂式新风系统推荐_壁挂式新风系统哪个好?
- P1368-工艺【最小表示法】
- 买房一定要知道的购房误区 买涨不买跌的心态可能得改
- 富文本编辑vue-quill-editor文件上传
- 使用effect的注意事项
- es6 class super关键字
- java生成pdf的流_Java 文件输出流.pdf
- 13.实现鼠标中断处理
- 疫情防控中小学开学错峰错时返校放学方案
- HTML5期末大作业:爱宠之家网站设计——蓝色版爱宠之家(5页) 致热爱动物网页设计作品 大学生爱宠专题网页设计作业模板 动物静态HTML网页模板下载
- niosii spi 外部_【笔记】NIOS II spi详解
- J. 青出于蓝胜于蓝(dfs序+树状数组)
- python统计学生平均成绩和及格人数_SQL 查询:查询学生平均成绩
- BlackBerry上网初体验
- 餐馆点菜系统python程序_Python写一个自动点餐程序
- 人工智能 - A*算法解决迷宫问题 附源码和可视化显示