blog 2019.3.22 DAy22 网络编程

网络编程

课程介绍
1.计算机网络的应用场景(了解)
2.网络编程相关术语(了解)
3.TCP协议(掌握)
4.UDP协议(掌握)
5.TCP与UDP的区别(了解)
6.简易网络聊天工具

1.计算机网络的应用场景

1.1什么是计算机网络

把分布在不同地理区域的计算机与专门的外部设备用通信线路连成一个规模大、功能强的网络系统,从而使纵多的计算机可以方便地相互传递信息、共享硬件、软件、数据信息等资源。
Java中专门提供java.net包,方便开发网络程序。
Java的网络编程包括了两种通信协议:
TCP(Transmission Control Protocal)
UDP(User Datagram Prptocol)

1.2计算机网络的应用场景

i.网购(。。。) 看直播 网络游戏 看新闻 网络聊天
ii.网络在改变生活

2.网络编程相关术语

2.1IP地址

IP是互联网上的每一台计算机都有得一个唯一表示自己的标记。
分以下两个版本:
IPv4:32位,分4段,0255之间的十进制表示。使用4个8位的二进制数据表示,每8位之间使用圆点隔开,每个8位整数可以转换成一个0255的十进制整数,因此我们一般看到的IP地址类似:192.168.1.1
IPv6:128位,分8段,0000~FFFF的十六进制数值,冒号分割,如:1080:0:0:0:8:800:200C:417A

IP地址号段分类

A类留给政府机构,B类分配给中等规模的公司,C类分配给任意需要的人,D类用于组播,E类用于实验,每类可容纳的地址数目不同
在这里插入图片描述

Java对基本网络的支持

 InetAddress类要来表示IP地址,有两个子类

|---- Inet4Address(IPv4)
|---- Inet6Address(IPv6)
常用方法(主要了解获得IP地址对象的方法)
static InetAddress getLocalHost() 返回本地主机

static InetAddress getByName(String host) 在给定主机名的情况下确定主机的 IP 地址 查找局部网内部存在的一个IP地址,如果没有知道到抛出异常

static InetAddress getByAddress(byte[] addr) 根据一个ip地址获得一个IP地址对象,没有进行查找的
static InetAddress getByAddress(String host, byte[] addr) 根据提供的主机名和 IP 地址创建 InetAddress。
static InetAddress[] getAllByName(String host) 在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。

byte[] getAddress() 返回此 InetAddress 对象的原始 IP 地址
boolean isReachable(int timeout) 测试是否可以达到该地址

2.2端口

**什么是端口?**

如果把IP地址指向的电脑比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口 可以有65536(即:2^16)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535(2^16-1)。

**简单的说:**一个电脑上的应用程序都绑定了一个对应的编号(端口),通过IP可以定位到指定的主机(电脑),再加上端口就可以定位到指定的程序了。

端口的分类
公认端口:0~1023,他们紧密绑定一些服务
注册端口:1024~49151,松散绑定一些服务
动态端口:49152~65535,动态使用的端口,程序一般不会使用这些端口
注意事项
1.同一台机器上不能有两个程序使用同一个端口,会冲突。
2.我们开发过程中一般选用注册端口或动态端口范围内的。
3.以后开发中最好记住我们用到过的常用软件的端口,避免我们知己设定端口的时候和他们冲突。

2.3 URL

什么是URL
URL(Uniform Resource Locator)统一资源定位符,可以直接使用此类找到互联网上的资源如一个简单的网页。
URI:去百度
一般由:协议名,资源所在主机,端口,资源名等部分组成;
如:http://www.woniuxy.com:80/class_info/java_jichu.html

URL类中的常用方法:
1.构造方法:URL(String protocol, String host, int port, String file)
2.方法 : InputStream openStream() 打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。
3.方法 :URI toURI() 返回与此 URL 等效的 URI
4.更多方法请查看URL对应的API文档。
ii.通过URL读取网络文件数据体验
1.首先必须搭建一个应用的网站,例如使用Tomcat应用服务器(了解)
2.创建指定连接的URL对象
3.从URL对象上得到输入流
4.从输入流中获得数据并打印(或者保存到本地磁盘中-相当于一个资源下载)

URLEncoder与URLDecoder
iii.URLEncoder与URLDecoder的使用场景

先看一个我们常见的实例
从上面的示例中我们可以看到,地址栏里的英文和数字能正常显示,可是汉字不再显示汉字;那是因为对汉字进行了编码操作。一般在网络程序开发中传递中文时使用到。
iv.测试体验
v.总结
1.区别于字节转字符的编码,之前的代码体现是 String 和 byte[]数组
2.此处是把一个String 转出了另外一种格式的String

3.TCP协议

什么是TCP协议

**概念:**TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
重点是此协议中有两个类Socket 和ServerSocket 其中有一些方法,能够实现在两个不同的终端之间传输数据(客户端-服务端)

TCP的特点

Java中使用Socket实现TCP程序开发,使用此类可以方便的建立可靠的,双向的,持续的,点对点的通讯连接。
在Socket程序开发中,服务器端使用ServerScoket等待客户端的连接,在Java的网络程序中,每一个客户端都使用Socket对象表示。
在这里插入图片描述

TCP的三次握手
在这里插入图片描述

第一次握手:建立连接时,客户端发送SYN包到服务器,并进入发送状态,等待服务器确认。
第二次握手:服务器收到SYN包,必须确认客户的SYN,同时自己也送一个SYN包,即SYN+ACK包,此时服务器进入 接受状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入已建立状态,完成三次握手。

在这里插入图片描述

模拟客户端给服务端发送数据

在这里插入图片描述

在这里插入图片描述

1.模拟:客户端 > 服务端 > 客户端 (这是一个ECHO程序:是一个网络编程通信交互的经典例子,称为回应程序)
2.模拟:多线程操作
以上程序在同一时间段上只能有一个客户端使用。服务端只能处理一个请求,若要处理多个请求,就得使用多线程机制。让每一个客户端连接的时候都启动一个新的线程,让每一个客户端都是一个线程对象,然后分别操作自己的流数据
3.总结以及注意事项

4.UDP协议

什么是UDP协议

概念: UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。

TCP的所有操作必须建立可靠的连接,这样会浪费很大的性能,为此UDP这种不可靠的连接出现并成为聊天工具的宠儿。
UDP开发中使用DatagramPacket包装一条要发送的信息,之后使用DatagramSocket完成发送操作,也能够实现在两个终端之间传输数据。

模拟发送接收数据

发送步骤:

使用 DatagramSocket(int port) 建立socket(套间字)服务。
将数据打包到DatagramPacket中去
通过socket服务发送 (send()方法)
关闭资源

接收步骤:
使用 DatagramSocket(int port) 建立socket(套间字)服务。(我们注意到此服务即可以接收,又可以发送),port指定监视接受端口。
定义一个数据包(DatagramPacket),储存接收到的数据,使用其中的方法提取传送的内容
通过DatagramSocket 的receive方法将接受到的数据存入上面定义的包中
使用DatagramPacket的方法,提取数据。
关闭资源。

5.TCP与UDP的区别

1.基于连接与无连接 ;
2.对系统资源的要求(TCP较多,UDP少) ;
3.UDP程序结构较简单 ;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证;

UDP和TCP协议的主要区别是两者在如何实现信息可靠传递方面不同。

TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。

与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。
相对于TCP协议,UDP协议的另外一个不同之处在于如何接收突发性的多个数据报。不同于TCP,UDP并不能确保数据的发送和接收顺序。

6.简易网络聊天工具

1.实现效果图

2.流程分析
3.代码实现

作业
1.找出基本类型和对应的包装以及String直接相互转换的方法
例如 int Integer String
8个基本类型和包装类…
在哪儿找? 包装类或者String类中去找

2.使用对象流完成对自定义对象的序列化和重构测试

3.正则表达式:
i.通过正则表达式判断手机号码(第一位1第二位3589,后面随意,一共11位)
ii.写出邮箱的正则表达式并测试(建议自己先去搜索或者注册不同的有邮箱体验他们的规则是什么)
iii.完成记事本的高级替换功能(支持正则表达式)
4.使用它IO流相关知识,读取一共文本文件,统计出其中每一个单词出现的次数,并把结果保存在另外的一个文件中,保存的结果类似如下:(此处假定单词可以是一个或者多个字母组成,不包含数字和下划线)
Hello-10
java-5
io-3
5.完成今天模拟的建议聊天工具(自主创新有嘉奖哦!)

猜你喜欢

转载自blog.csdn.net/qq_39263750/article/details/88741799