博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA基础整理-110.Java 网络编程
阅读量:5215 次
发布时间:2019-06-14

本文共 5592 字,大约阅读时间需要 18 分钟。

Java网络编程基础知识

网络分类

  按照地理范围主要将网络分为局域网、城域网、广域网和因特网。

  • 局域网(LocalArea Network)简称 LAN,是一种在小范围内实现的计算机网络,一般在一个建筑物内或者一个工厂、一个事业单位内部独有,范围较小。
  • 城域网(Metropolitan Area Network)简称为 MAN,一般是一个城市内部组建的计算机信息网络,提供全市的信息服务。
  • 广域网(Wide Area Network)简称为 WAN,它的范围很广,可以分布在一个省、一个国家或者几个国家。
  • 因特网(Internet)则是由无数的 LAN 和 WAN 组成的。

网络编程模型

  在网络通信中主要有两种模式的通信方式:一种是客户机/服务器(Client/Server)模式,简称为 C/S 模式;另一种是浏览器/服务器(Browser/Server)模式,简称 B/S 模式。

C/S模型

      图1 C/S模型

开发模式的优势在于由于客户端是专门开发的,表现力会更强。缺点就是通用性差

Browser/Server 模式

  浏览器/服务器模式

  这种模式开发程序时只需开发服务器端即可,开发的压力较小,不需要维护客户端。但是对浏览器的限制比较大,表现力不强。

网络协议

  网络协议是网络上所有设备(网络服务器、计算机及交换机、路由器、防火墙等)之间通信规则的集合,它规定了通信时信息必须采用的格式和这些格式的意义。 

  IP 协议

  Internet 依靠 TCP/IP 协议在全球范围内实现不同硬件结构、不同操作系统、不同网络的互联。

  在计算机网络中,现在命名 IP 地址的规定是 IPv4 协议,该协议规定每个 IP 地址由 4 个 0~255 的数字组成。 

  TCP/IP 定义了电子设备如何连入 Internet 以及数据如何在它们之间传输的标准。协议采用 4 层的层级结构,分别是应用层、传输层、网络层和网络接口层 

 TCP/IP层次结构

图2 TCP/IP层次结构

TCP(可靠传输协议) 与 UDP 协议(不可靠传输协议) 

  尽管 TCP/IP 协议从名称看只包括 TCP 这个协议名,但是在 TCP/IP 协议的传输层同时存在 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)两个协议。

  TCP 协议是一种以固定连线为基础的协议,它提供两台计算机之间可靠的数据传送。而 UDP 无连接通信协议,它不保证可靠数据的传输,但能够向若干目标发送数据以及接收来自若干源的数据。

 

套接字和端口

  在网络上很多应用程序都是采用客户端/服务器(C/S)的模式,实现网络通信必须将两台计算机连接起来建立一个双向的通信链路,这个双向通信链路的每一端称之为一个套接字(Socket)。

客户向服务器发送请求

图3 客户向服务器发送请求

  如果服务器接收到客户端的请求,就会创建一个套接字,客户端使用该套接字与服务器通信,但此时客户端的套接字并没有绑定到与服务器连接的端口号上。

 

Java InetAddress类及其常用方法

  InetAddress 类对象包含一个 Internet 主机地址的域名和 IP 地址。

  InetAddress 类提供了操作 IP 地址的各种方法。该类本身没有构造方法,而是通过调用相关静态方法获取实例。

Java TCP通信:Java ServerSocket类和Socket类

  ServerSocket 类表示 Socket 服务器端,Socket 类表示 Socket 客户端,

ServerSocket 类

  ServerSocket 类是与 Socket 类相对应的用于表示通信双方中的服务器端,用于在服务器上开一个端口,被动地等待数据(使用 accept() 方法)并建立连接进行数据交互。

 

ServerSocket 的构造方法

  • ServerSocket():无参构造方法。
  • ServerSocket(int port):创建绑定到特定端口的服务器套接字。
  • ServerSocket(int port,int backlog):使用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口。
  • ServerSocket(int port,int backlog,InetAddress bindAddr):使用指定的端口、监听 backlog 和要绑定到本地的 IP 地址创建服务器。

ServerSocket 的常用方法

ServerSocket 的常用方法如下所示。

  • Server accept():监听并接收到此套接字的连接。
  • void bind(SocketAddress endpoint):将 ServerSocket 绑定到指定地址(IP 地址和端口号)。
  • void close():关闭此套接字。
  • InetAddress getInetAddress():返回此服务器套接字的本地地址。
  • int getLocalPort():返回此套接字监听的端口。
  • SocketAddress getLocalSoclcetAddress():返回此套接字绑定的端口的地址,如果尚未绑定则返回 null。
  • int getReceiveBufferSize():获取此 ServerSocket 的 SO_RCVBUF 选项的值,该值是从 ServerSocket 接收的套接字的建议缓冲区大小。

  服务器端的 Socket 对象使用 getOutputStream() 方法获得的输出流将指定客户端 Socket 对象使用 getInputStream() 方法获得那个输入流。同样,服务器端的 Socket 对象使用的 getInputStream() 方法获得的输入流将指向客户端 Socket 对象使用的 getOutputStream() 方法获得的那个输出流。 

Socket 类

  Socket 类表示通信双方中的客户端,用于呼叫远端机器上的一个端口,主动向服务器端发送数据(当连接建立后也能接收数据)

 

Socket 的构造方法

Socket 的构造方法如下所示。

  • Socket():无参构造方法。
  • Socket(InetAddress address,int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口。
  • Soclcet(InetAddress address,int port,InetAddress localAddr,int localPort):创建一个套接字并将其连接到指定远程地址上的指定远程端口。
  • Socket(String host,int port):创建一个流套接字并将其连接到指定主机上的指定端口。
  • Socket(String host,int port,InetAddress localAddr,int localPort):创建一个套接字并将其连接到指定远程地址上的指定远程端口。Socket 会通过调用 bind() 函数来绑定提供的本地地址及端口。

Socket 的常用方法

Socket 的常用方法如下所示。

  • void bind(SocketAddress bindpoint):将套接字绑定到本地地址。
  • void close():关闭此套接字。
  • void connect(SocketAddress endpoint):将此套接字连接到服务器。
  • InetAddress getInetAddress():返回套接字的连接地址。
  • InetAddress getLocalAddress():获取套接字绑定的本地地址。
  • InputStream getInputStream():返回此套接字的输入流。
  • OutputStream getOutputStream():返回此套接字的输出流。
  • SocketAddress getLocalSocketAddress():返回此套接字绑定的端点地址,如果尚未绑定则返回 null。
  • SocketAddress getRemoteSocketAddress():返回此套接字的连接的端点地址,如果尚未连接则返回 null。
  • int getLoacalPort():返回此套接字绑定的本地端口。
  • intgetPort():返回此套接字连接的远程端口。

客户端与服务器端的简单通信

传输对象数据

Java UDP通信:Java DatagramSocket类和DatagramPacket类

  UDP 协议是用户数据报协议的简称,也用于网络数据的传输。虽然 UDP 协议是一种不太可靠的协议,但有时在需要较快地接收数据并且可以忍受较小错误的情况下,UDP 就会表现出更大的优势。

下面是在  中使用 UDP 协议发送数据的步骤。

  1. 使用 DatagramSocket() 创建一个数据包套接字。
  2. 使用 DatagramPacket() 创建要发送的数据包。
  3. 使用 DatagramSocket 类的 send() 方法发送数据包。

接收 UDP 数据包的步骤如下:

  • 使用 DatagramSocket 创建数据包套接字,并将其绑定到指定的端口。
  • 使用 DatagramPacket 创建字节数组来接收数据包。
  • 使用 DatagramPacket 类的 receive() 方法接收 UDP 包。

DatagramPacket 类

  java.net 包中的 DatagramPacket 类用来表示数据报包,数据报包用来实现无连接包投递服务。每条报文仅根据该包中包含的信息从一台机器路由到另一台机器。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。

Java 什么是URL?及URL类和URLConnection类

URL 概念

  URL 是统一资源定位符(Uniform Resource Locator)的简称,它表示 Internet 上某一资源的地址。通过 URL 用户可以访问各种网络资源,比如常见的 WWW 以及 FTP 站点。浏览器可以通过解析给定的 URL 在网络上查找相应的文件或其他资源。

  协议名(protocol)指明获取资源所使用的传输协议,如 HTTP、FTP 和 file 等,资源名(resourceName)则应该是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。

URL 类

表1 URL 的构造方法
构造方法 说明
public URL (String spec) 通过一个表示 URL 地址的字符串可以构造一个 URL 对象。
public URL(URL context,String spec) 使用基本地址和相对 URL 构造一个 URL 对象。
public URL(String protocol,String host,String file) 使用指定的协议、主机名和文件名创建一个 URL 对象。
public URL(String protocol,String host,int port,String file) 使用指定的协议、主机名、端口号和文件名创建一个 URL 对象。

URL 的常用方法如表 2 所示。

 

表2 URL 的常用方法
方法 说明
public String getProtocol() 获取该 URL 的协议名。
public String getHost() 获取该 URL 的主机名。
public int getPort() 获取该 URL 的端口号,如果没有设置端口,返回 -1。
public String getFile() 获取该 URL 的文件名。
public String getRef() 获取该 URL 在文件中的相对位置。
public String getQuery() 获取该 URL 的查询信息。
public String getPath() 获取该 URL 的路径。
public String getAuthority() 获取该 URL 的权限信息。
public String getUserInfo() 获得使用者的信息。
public String getRef() 获得该 URL 的锚点。

 

URLConnection 类 

 

表3 URLConnection 类的主要方法
方法 说明
void addRequestProperty(String key,String value) 添加由键值对指定的一般请求属性。key 指的是用于识别请求的关键字
(例如 accept),value 指的是与该键关联的值。
void connect() 打开到此 URL 所引用的资源的通信链接(如果尚未建立这样的链接)。
Object getConnection() 检索此 URL 链接的内容。
InputStream getInputStream() 返回从此打开的链接读取的输入流。
OutputStream getOutputStream() 返回写入到此链接的输出流。
URL getURL() 返回此 URLConnection 的 URL 字段的值。

 

提取 URL 协议名称

System.out.println("这个网址的URL协议名称是:"+url.getProtocol()); //获取协议名称

 

 

转载于:https://www.cnblogs.com/luojie1216/p/10621573.html

你可能感兴趣的文章
01爬取豆瓣网电影数据进行numpy的练习
查看>>
WSDL测试webservice接口记录
查看>>
独家 | TensorFlow 2.0将把Eager Execution变为默认执行模式,你该转向动态计算图了...
查看>>
react + dva + ant架构后台管理系统(一)
查看>>
[转]ASP数组全集,多维数组和一维数组
查看>>
我的中兴五年:加班为何成了底层员工心中永远的痛
查看>>
git学习
查看>>
C# winform DataGridView 常见属性
查看>>
逻辑运算和while循环.
查看>>
Nhiberate (一)
查看>>
c#后台计算2个日期之间的天数差
查看>>
安卓开发中遇到的小问题
查看>>
ARTS打卡第3周
查看>>
HDU 2189 悼念512汶川大地震遇难同胞――来生一起走 --生成函数
查看>>
js知识梳理3:创建对象的模式探究
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
cookies相关概念
查看>>
android动态权限获取
查看>>
CAN总线波形中ACK位电平为什么会偏高?
查看>>
siebel 中 join 使用心得
查看>>