网络编程总结和正则表达式

2023-10-26

今天主要学习了网络编程和正则表达式

网络编程概述:

Java是 Internet 上的语言,它从语言级上提供了对网络应用程 序的支持,程序员能够很容易开发常见的网络应用程序。

Java提供的网络类库,可以实现无痛的网络连接,联网的底层 细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并 且 Java 实现了一个跨平台的网络库,程序员面对的是一个统一 的网络编程环境。

网络通信:

计算机网络:
把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规 模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、 共享硬件、软件、数据信息等资源。
网络编程的目的:直接或间接地通过网络协议与其它计算机实现数据交换,进行通讯。

通信双方地址

1、IP

2、端口号

一定的规则(即:网络通信协议。有两套参考模型)

OSI参考模型:模型过于理想化,未能在因特网上进行广泛推广

TCP/IP参考模型(或TCP/IP协议):事实上的国际标准。

网络协议

传输层协议中有两个非常重要的协议

传输控制协议TCP

用户数据报协议UDP

 

通信的协议还是比较复杂的,java.net包中包含的类和接口,它们提供低层次的通信细节,我们可以直接使用这些类和接口,来专注于网络程序开发,而不用考虑通信的细节。

java.net包中提供了两种常见的网络协议的支持:TCP和UDP

TCP是可靠的连接,TCP就像打电话,需要先打通对方电话,等待对方有回应后才会跟对方继续说话,也就是一定要确认可以发信息以后才会把信息发出去。TCP上传任何东西都是可靠的,只要两台机器上建立起了连接,在本机上发送的数据就一定能传到对方的机器上。
UDP就好比发电报,发出去就完事了,对方有没有接收到它都不管,所以UDP是不可靠的。
TCP传送数据虽然可靠,但传送得比较慢;UDP传送数据不可靠,但是传送得快。
1.UDP
用户数据报协议(User Datagram Protocol)。
数据报(Datagram):网络传输的基本单位
UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时,不建议使用UDP协议。
特点:数据被限制在64kb以内,超出这个范围就不能发送了。
TCP
传输控制协议(Transmission Control Protocol)。
TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。
在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手”。
(1)三次握手
TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。
在这里插入图片描述

 第一次握手,客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
(客户端向服务器端发出连接请求,等待服务器确认。)
第二次握手,服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。(服务器端向客户端回送一个响应,通知客户端收到了连接请求。)
第三次握手,客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。(客户端再次向服务器端发送确认信息,确认连接。)
三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。
在这里插入图片描述

 

客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文,也即 FIN 报文,之后客户端进入 FIN_WAIT_1 状态。
服务端收到该报文后,就向客户端发送 ACK 应答报文,接着服务端进入 CLOSED_WAIT 状态。
客户端收到服务端的 ACK 应答报文后,之后进入 FIN_WAIT_2 状态。
等待服务端处理完数据后,也向客户端发送 FIN 报文,之后服务端进入 LAST_ACK 状态。
客户端收到服务端的 FIN 报文后,回一个 ACK 应答报文,之后进入 TIME_WAIT 状态
服务器收到了 ACK 应答报文后,就进入了 CLOSE 状态,至此服务端已经完成连接的关闭。
客户端在经过 2MSL 一段时间后,自动进入 CLOSE 状态,至此客户端也完成连接的关闭。
你可以看到,每个方向都需要一个 FIN 和一个 ACK,因此通常被称为四次挥手。这里一点需要注意是:主动关闭连接的,才有 TIME_WAIT 状态。

为什么挥手需要四次?
关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。服务器收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送,从而比三次握手导致多了一次。参考

通俗理解:

三次握手
A:我要过来了!B:我知道你要过来了!A:我现在过来!
四次挥手
A:我们分手吧!B:真的分手吗?B:真的真的要分手吗?A:是的!
由此,可以可靠地进行连接和断开。

TCP

四次挥手

其次,TCP的客户端和服务端断开连接,需要四次挥手

协议:
使用TCP协议前,须先建立TCP连接,形成传输数据通道
传输前,采用“三次握手”方式,点对点通信,是可靠的
TCP协议进行通信的两个应用进程:客户端、服务端。
在连接中可进行大数据量的传输
传输完毕,需释放已建立的连接,效率低
UDP协议:
将数据、源、目的封装成数据包,不需要建立连接
每个数据报的大小限制在64K内
发送不管对方是否准备好,接收方收到也不确认,故是不可靠的
可以广播发送
发送数据结束时无需释放资源,开销小,速度快

正则表达式

正则表达式:定义了字符串的匹配模式可以用来搜索,编辑或处理文本,并不仅限于某一种语言,但是每种语言中有细微的差别
 JDK1.4 推出的 java.util.regex 包,很好的支持了正则表达式
 常用语法:
 \转义符,把有意义的字符转为无意义的字符,但java中\也是转义符,所以在java中编写正则表达式的时候,
 * 需要转义符的时候要写两个\\
 * 字符取值范围相关
 [abc]:表示可能是a,可能是b,也可能是c(abc中的任意一个)
 [^abc]:表示不是abc中的任何一个
 [a-zA-Z]:表示是大小写字母,[a-z] 小写字母 , [A-Z] 大写字母 [0-9] 数字0-9 
 *a-zA-Z0-9] : 表示是数字或字母
 简洁表示:
 . :匹配任意字符
 \d :表示数字,等同于[0-9]
 \D : 表示非数字 等同于 [^0-9]
 \s : 表示由空字符组成, [\t\n\r\x\f]
 \S : 表示非空字符组成
 \w : 表示由字母数字下划线组成  [a-zA-Z0-9_]
 \W : 表示非字母数字下划线  [^a-zA-Z0-9_]
 表示数量:
 ? : 表示出现0次或1次
 + : 表示1次或多次, 大于等于1
 * : 任意次数(0~N)
 {n} : 表示出现n次 
 {n,m} : 表示出现n次到m次
 {n,} : 表示出现n及以上 >=n
 () : 把他们看做一个整体
 | 或,a|b ,a和b都可以匹配
 ^ : 以什么什么打头 , 但是 用在[^xxx] 就表示取反
 $ : 以什么什么结尾
 校验非汉字:
 [^\u4e00-\u9fa5]
 Pattern : 创建正则表达式对象,能做一些基本的简单操作
 三大功能 : 
 验证 : boolean matchers(String regex);
 拆分 : String[] split(String regex);
 替换 : String replaceAll(String regex,String replacement);

Pattern类

用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建
可以通过Pattern.complie(String regex)创建一个正则表达式
只能做一些简单的匹配操作
Matcher类

构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例 Matcher m = p.matcher("aaaaab");
支持便捷强大的正则匹配操作,包括分组、多次匹配支持
Matcher三大方法

Matcher.matches():对整个字符串进行匹配,只有整个字符串都匹配了才返回true

Matcher.lookingAt():对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true

Matcher.find():对字符串进行匹配,匹配到的字符串可以在任何位置
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络编程总结和正则表达式 的相关文章

  • matlab图加上箭头和标注实例

    在图上加箭头的函数有annotation quiver annotation 函数 1 annotation annotation type 以指定的对象类型 使用默认属性值建立注释对象 2 annotation line x y 建立从
  • python副业介绍以及渠道推荐,接单注意事项

    这是本文的目录 前言 Python为什么会大受欢迎 python副业有哪些 1 兼职处理数据 2 兼职查询资料 3 兼职P图 4 爬虫类 5 平台接单 Python赚外快的一些其它方式 1 自媒体也是个风口 2 知识付费分享 3 招聘网站
  • Mybatis学习笔记:使用注解开发(CRUD)

    学习内容 使用注解开发 CRUD 文章目录 学习内容 使用注解开发 CRUD 1 怎么使用注解 2 用注解实现CRUD 增删改查 3 关于 Param 注解 4 和 区别 1 怎么使用注解 1 1 注解在接口上实现 1 2 需要再核心配置文
  • Qt帮助文档的寻找以及环境变量的配置

    文章目录 前言 一 Qt帮助文档的位置 二 Qt环境变量的配置 总结 前言 今天来介绍Qt非常重要的环境变量的配置以及帮助文档的寻找 一 Qt帮助文档的位置 在平时我们需要查看帮助文档时 我们可以把鼠标放在需要查询的字段上按F1或者直接去帮
  • 音频功放PA

    D类 D类功放接收模拟音频信号 用内部三角波发生器产生的三角波和它进行比较 其结果就是一个脉宽调制信号 PWM 然后将PWM信号放大并还原成模拟音频信号 因此 D类功放是用脉冲宽度对模拟音频幅度进行模拟的 其信息的传递过程是模拟的 非量化的
  • 游戏开发unity xlua框架知识系列:xLua基础使用

    插眼 总结 无 参考 https blog csdn net THIOUSTHIOUS article details 86658863 https blog csdn net THIOUSTHIOUS article details 86

随机推荐