java中TCP/UDP/URL简单介绍

版权声明:本篇文章由IT_CREATE整理 https://blog.csdn.net/IT_CREATE/article/details/83312745

一、网络:使用光纤,网线, WIF1等传输介质,将位于不同地址的计算机连接到一起     局域网  城域网   广域网(互联网)

 

二、地址;计算机在网络上,什么东西是它的地址?ip地址, ip地址就是计算机在网络上的唯一绝对地址 (相当干人居住的房子的地址)

 

三、计算机上面可以安装非常多的应用软件,那么如何区分这些软件?

需要通过端口号来区分,端口号,就相当于房子中开的门

1、端口号在计算机里面有2个字节那么大,因此端口号的取值范围: 0--65535共65536个 但是1024以下的端口号,通常是计算机内置软件端口 类似干现实生活中的电话号码 20 110 119...,

2、1024以上的,我们都可以用,并且为了避免重复性,推荐大家端口号定义的越大越好,

3、多个软件之间,使如果用同一种通讯协议,那么软件之间,端口号不允许重复 但是不同协议,端口号可以重复

 

四、资源定位URL:统一资源定位符http://127.0.0.1:80/stusvstem/user/1       URI:统一资源修饰符 user/1

扫描二维码关注公众号,回复: 3733676 查看本文章

 

五、数据的传输

1,计算机之间底层通过传输0101010101001110这样的数据进行通讯,但是通讯时,如果识别有效数据,还是需要不同的协议才能完成,不然就会造成:鸡同鸭讲的效果,

协议中,常见的底层协议: TCP/IP UDP

TCP/IP: 非常类似于打电话 它是一种面向连接的协议 它的特点:安全可靠 但是效率相对于UDP而言,较为低下 -请求响应模式

UDP:类似于发短信,类似于广播 它是一种非面向连接的协议 它的特点:不可靠,安全性较低 但是它的效率较高,

 

2、数据在进行传输时,需要经讨一系列的封装和拆分的过程

1)、数据的封装

2)、数据的拆分

 

采用了分层的思想,来完成对层次的解耦,以及各层的职责分离,让各层能够更合理的分工合作 --OSI7层模型

 

六、客户端与服务器

C/s Client/Server (胖客户端)  它的特点:需要安装,需要升级

B/S Browser/Server (瘦客户端) 它的特点:不需要安装,也不需要更新,服务器更新之后,打开浏览器,自动更新

 

七、传输层的传输方式

需要解决到达计算机的OSI七层模型中的0101010100000这种二进制数据,如何才能到达我们的应用软件

传输层的作用:就是建立一个数据传輸通道,将来自于OSI七层模式中下三层的数据,传輸到我们应用程序中来,

这个数据传输通道,我们把它称之为Socket套接字, 实际上,就类似于现实生活中的传送履带,只不过它的特点是可以双向传输

作为传输层来讲,只有2种传输协议   TCP, UDP

 

 

 

TCP/IP

使用的是流套接字(Stream Socket)

流套接字将TCP作为其端对端协议,提供了一个可信赖的字节流服务。一个TCP/IP流套接字代表了TCP连接的一端。

一个TCP/IP 套接字由一个IP地址、一个端对端协议(TCP或UDP协议)以及一个端口号唯一确定。

一、使用类

Socket类 ServerSocket类

 

TCP/IP协议也是目前因特网范围内运行的唯一一种协议。图18.2表示了TCP/IP分层模型与OSI模型的对比图。


图18.2 TCP/IP四层参考模型

TCP/IP分层模型的四个协议层分别完成以下的功能: 

  • 网络接口层。网络接口层包括用于协作IP数据在已有网络介质上传输的协议。实际上TCP/IP标准并不定义与ISO数据链路层和物理层相对应的功能。相反,它定义像ARP(Address Resolution Protocol,地址解析协议)这样的协议,提供TCP/IP协议的数据结构和实际物理硬件之间的接口。
  • 网络互联层。网络互联层对应于OSI七层参考模型的网络层。本层包含IP协议、RIP协议(Routing Information Protocol,路由信息协议),负责数据的包装、寻址和路由。同时还包含网间控制报文协议(Internet Control Message Protocol,ICMP)用来提供网络诊断信息。
  • 传输层。传输层对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务。其中TCP协议(Transmission Control Protocol)提供可靠的数据流运输服务,UDP协议(User Datagram Protocol)提供不可靠的用户数据报服务。
  • 应用层。应用层对应于OSI七层参考模型的应用层和表示层。因特网的应用层协议包括Finger、Whois、FTP(文件传输协议)、 Gopher、HTTP (超文本传输协议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络新闻传输协议)等。

二、建立连接步骤

当使用套接字在两台计算机之间建立TCP连接时,发生了如图所示的如下步骤:

1. 服务器初始化一个ServerSocket对象,指示通讯将要发生在哪个端口号上。

2. 服务器调用ServerSocket类的accept()方法。该方法会一直等待,直到一个客户端连接到服务器上的指定端口。

3.在服务器等待的同时,客户端实例化一个Socket对象,指定要连接的服务器名和端口号。

4. Socket类的构造器试图将客户端连接到指定的服务器和端口号。如果通讯建立了,客户端现在就有一个能够与服务器进行通讯的Socket对象。

5. 在服务器端,accept()方法返回一个将要连接到客户端套接字的服务器新套接字的引用。


图 TCP套接字编程步骤示意图

在连接建立后,通讯可以通过使用I/O流发生。每个套接字都有一个OutputStream和一个InputStream。客户端的OutputStream连接到服务器的InputStream,同时客户端的InputStream连接到服务器的OutputStream。TCP是一个双向的通讯协议,所以数据可以同时通过两个流发生。

套接字流是低级I/O流InputStream和OutputStream。因此,它们可以与缓冲流、过滤流以及其它高级流连接在一起,从而可以执行任何类型的高级I/O。

UDP

使用数据报套接字(Datagram Socket)

数据报套接字使用UDP协议,提供了一个“尽力而为”的数据报服务,应用程序可以通过它发送最长65500字节的信息。

不是面向连接的协议,它是以数据为中心的协议,它的特点:数据的可靠性较差 数据容易丢失 但是它的效率高

用户报文协议(UDP)是用于将二进制数据从一台计算机发送到另一台计算的非连接协议。这里,数据被称为数据报包,它包含了数据将要发送到的目标服务器和端口号。消息的发送者使用数据报套接字发送包,接受者使用数据报套接字接收消息。

当消息被发送时,接受者并不需要是可用的。同样,当消息接收时,发送者也不需要是可用的。

一:使用类

类DatagramSocket  类DatagramPacket

 

二:步骤

客户端

1、创建客户端 DatagramSocket 类 +  端口 (指定:我的数据从哪个端口出去)

2、准备数据 只不过这些数据,需要装配到字节数组中去

3、将数据打包 DatagramPacket + 服务器地址及端口号 来完成打包

4、发送

5、释放资源

 

发送报文包

​​​​发送数据报包需要如下步骤:

1. 创建一个足够大的字节数组,用于存储要发送的包数据,用该数据填充数组。

2. 创建一个新的DatagramPacket 对象,用于存储上面的字节数组,以及服务器名和接收者的端口号。

3. DatagramSocket被实例化,它被指定套接字要绑定到本地主机的哪个端口。

4. DatagramSocket类的send()方法被调用,传入DatagramPacket对象。 

 

服务器端

1、创建服务端 DatagramSocket类 + 端口(指定:我从哪个端口获取数据)

2、准备接收数据 同样需要定义一个字节数组 封装DataGramPacket

3、接收数据

4、分析数据

5、释放资源

接受报文包

接收数据报包需要执行如下步骤:

1. 创建一个足够大的字节数组,用于存储要接收的包的数据。

2. 使用该字节数组实例化一个DatagramPacket对象。

3. DatagramSocket被实例化,它被指定该套接字要绑定到的本地主机上的一个端口。

4. 调用DatagramSocket类的receive()方法,将DatagramPacket对象传入该方法。这将导致执行线程阻塞,直到接收到一个数据报包或者发生了超时。

在receive()方法返回后,新包刚传送成功。如果发生了超时,receive()方法不会返回,而是抛出一个异常。DatagramPacket类的getData()方法可以用于接收包含该包数据的字节数组。

 

URL类与URLConnection类

URL(Uniform Resource Locator)代表统一资源定位,代表万维网上的一个资源,例如一个网页或者一个FTP目录。

一个URL实际上是一类URI(Uniform Resource Identifier,统一资源标识符)。URI标识一个资源,但是不包括如何访问该资源的信息。URL标识一个资源以及访问该资源的协议。URI在java中使用java.net.URI类代表。

一个URL可以分为如下几个部分:

 

协议://主机:端口/路径?查询字符串#锚点引用

这里,路径也称为文件名,主机也称为授权。协议包含HTTP、HTTPS、FTP和File。

java.net.URL类代表一个URL。URL类有如下几个构造器用于创建URL:

  • public URL(String protocol, String host, int port, String file) throws MalformedURLException:根据指定 protocol、host、port 号和 file 创建 URL 对象。
  • public URL(String protocol, String host, String file) throws  MalformedURLException:与前一构造器相同,但是用的是指定协议的默认端口。
  • public URL(String url) throws MalformedURLException:根据给定的字符串创建URL对象。

URL类中有很多方法用于访问URL的不同部分,常用的方法如下:

  • public String getPath():获取此URL的路径部分。
  • public String getQuery():获取此 URL 的查询部分。
  • public String getAuthority():获取此 URL 的授权部分。
  • public int getPort():获取此 URL 的端口号。
  • public int getDefaultPort():获取与此 URL 关联协议的默认端口号。
  • public String getProtocol():获取此 URL 的协议名称。
  • public String getHost():获取此 URL 的主机名。
  • public String getFile():获取此 URL 的文件名。
  • public String getRef():获取此 URL 的锚点。
  • public URLConnection openConnection() throws IOException:打开一个到该URL的连接,允许客户端与该资源进行通讯。

使用URL类的openConnection()方法,可以连接到一个URL,并与资源进行通讯。openConnection()方法返回一个java.net.URLConnection,URLConnection是一个抽象类,其子类代表不同类型的URLConnection。例如,如果我们连接到一个HTTP协议的URL,那么openConnection()方法就返回一个HttpURLConnection对象。如果连接到一个代表JAR额外连接的URL,那么openConnection()方法就返回一个JarURLConnection对象。

URLConnection类有多个用于设置或者判断连接信息的方法,包括:

  • public void setDoInput(boolean input):将此 URLConnection 的 doInput 字段的值设置为指定的值。URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true,因为客户端通常是从URLConnection中读取。
  • public void setDoOutput(boolean output):将此 URLConnection 的 doOutput 字段的值设置为指定的值。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false,因为很多URL类型不支持写入数据。
  • public InputStream getInputStream() throws IOException:返回从资源读取的URLConnection的输入流。
  • public OutputStream getOutputStream() throws IOException:返回写入到此连接的输出流。返回写入到资源的URLConnection的输出流。
  • public URLgetURL():返回此URLConnection对象要连接到的URL。

URLConnection类还包含了一些访问连接头信息的方法,让我们可以判断URL内容的类型和长度、最后更改的日子、内容编码等等。

猜你喜欢

转载自blog.csdn.net/IT_CREATE/article/details/83312745