Java SE:浅析网络编程(上)

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,同步至SelectDB 1个月
数据传输服务 DTS,数据同步 1个月
简介: Java SE:浅析网络编程(上)

一. 软件结构

  • C/S结构:全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、微信、支付宝等软件

  • B/S结构: 全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有IE、谷歌、火狐等.

以上两种架构,各有利弊,但都离不开网络,网络编程,就是基于一定的协议,实现两台计算机之间的通信的程序


二. 网络编程三大要素

2.1 IP地址和域名

2.1.1 IP地址

IP地址: 指互联网协议地址(lnternet Protocol Address) ,俗称IP。IP地址用来给一个网络中的计算机设备做唯一的编号。假如我们把"个人电脑"比作“一台电话”的话,那么“P地址”就相当于”电话号码”。

IP地址分类方式一:

  • IPv4:

🤮网际协议版本4(英语:Internet Protocol version 4,IPv4),又称互联网通信协议第四版,是网际协议开发过程中的第四个修订版本,也是此协议第一个被广泛部署的版本。IPv4是互联网的核心,也是使用最广泛的网际协议版本,其后继版本为IPv6,直到2011年,IANA IPv4位址完全用尽时,IPv6仍处在部署的初期。

🤮IPv4使用32位(4字节)地址,因此地址空间中只有4,294,967,296(2)个地址。不过,一些地址是为特殊用途所保留的,如专用网络(约1800万个地址)和多播地址(约2.7亿个地址),这减少了可在互联网上路由的地址数量。随着地址不断被分配给最终用户,IPv4地址枯竭问题也在随之产生。基于分类网络、无类别域间路由和网络地址转换的地址结构重构显著地减少了地址枯竭的速度。但在2011年2月3日,在最后5个地址块被分配给5个区域互联网注册管理机构之后,IANA的主要地址池已经用尽。

  • IPv6:

🤮由于互联网的蓬勃发展,IP地址的需求量愈来愈大,但是网络地址资源有限,使得P的分配越发紧张.为了扩大地址空间,拟通过IPv6重新定义地址空间,采用128位地址长度,每16个字节一组,分成8组十六进制数,表示成ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,号称可以为全世界的每一粒沙子编上一个网址,这样就解决了网络地址资源数量不够的问题。IPv4和IPv6地址格式不相同,因此在很长一段时间里,互联网中出现IPv4和IPv6长期共存的局面。

IP地址分类方式二:

公网地址( 万维网使用)和 私有地址( 局域网使用)192.168.开头的就是私有址址,范围即为192.168.0.0-192.168.255.255,专门为组织机构内部使用

常用命令:

🏀查看本机IP地址,在控制台输入:

ipconfig /all

🏀检查网络是否连通,在控制台输入:

ping 空格 IP地址

ping 220.181.57.216

特殊的IP地址:

  • 本地回环地址(HostAddress):127.0.0.1
  • 主机名(HostName):localhost

2.1.2 域名

域名(英语:Domain Name),又称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)。

由于IP地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名,并通过网域名称系统(DNS,Domain Name System)来将域名和IP地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串

2.2 端口号

网络的通信,本质上是两个进程(应用程序)的通信。每台计算机都有很多的进程,那么在网络通信时,如何区分这些进程呢?

如果说IP地址可以唯一标识网络中的设备,那么端口号就可以**唯一标识设备中的进程(应用程序)**了。端口号: 用两个宁节表示的整数,它的取值范围是0~65535

  • 公认端口: 0~1023。被预先定义的服务通信占用,如: HTTP (80) ,FTP (21),Tenet (23)。
  • 注册端口: 1024~49151。分配给用户进程或应用程序。如: Tomcat (8080) ,MySQL (3306)Oracle (1521) 。
  • 动态/私有端口: 49152~65535

💡小tips:

如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败

2.3 网络协议

  • 网络通信协议: 通过计算机网络可以使多台计算机实现通信连接,位于同一个网络中的计算机在进行连接和通信需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必同时遵守才能完成数据交换
  • TCP/IP协议: 传输控制协议/因特网互联协议( Transmission Control Protocol/internet Protocol),是lnternet最基本、最广泛的协议。它定义了计算机如何连入因特网,以及数据如何在它们之间传输的标准。它的内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的协议来完成自己的需求。

TCP/IP通信模型图如下所示:

💡小tips:

我们常说的Tcp协议与ip协议是指位于TCP/IP模型中的传输层协议与网络层协议


三. TCP与UDP协议

3.1 UDP协议

UDP: 用户数据报协议(User Datagram Protocol),它是非面向连的,不可靠的无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。

由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。

  • 大小限制的: 数据被限制在64kb以内,超出这个范围就不能发送了.
  • 数据报(Datagram): 网络传输的基本单位

3.2 TCP协议

TCP: 传输控制协议(Transmission ontrol Protocol)。它是面向连接的,可靠的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。是一种面向连接的、可靠的、基于字节流的传输层的通信协议,可以连续传输大量的数据。类似于打电话的效果。

这是因为它为当一台计算机需要与另一台远程计算机连接时,TCP协议会采用“三次握手"方式让它们建立一个连接,用于发送和接收数据的虚拟链路。数据传输完毕TCP协议会采用“四次挥手"方式断开连接。

TP协议负责收集这些数据信息包,并将其按活当的次序放好传送,在接收端收到后再将其正确的还原。TCP协议保证了数据包在传送中准确无误。TCP协议使用重发机制,当一个通信实体发送一个消息给另一个通信实体后,需要收到另一个通信实体确认信息,如果没有收到另一个通信实体确认信息,则会再次重复刚才发送的消息。


四. 网络编程API

4.1 InetAddress类

InetAddress类主要表示IP地址,两个子类: Inet4Address.Inet6Address

Internet上的主机有两种方式表示地址:

域名(hostName): www.baidu.com

IP 地(hostAddress): 202.108.35.210

llnetAddress 类没有提供公共的构造器,而是提供了 如下几个静态方法来获取InetAddress 实例

public static lnetAddress getLocalHost()

public static lnetAddress getByName(String host)

public static lnetAddress getByAddress(bytel] addr)

InetAddress 提供了如下几个常用的方法:

public String getHostAddress() : 返回IP地址字符串 (以文本表现形式)

public String getHostName): 获取此IP地址的主机名

代码演示如下:

@Test
public void test01() throws UnknownHostException {
    //获取本地主机名和IP地址
    InetAddress localHost = Inet4Address.getLocalHost();
    System.out.println(localHost);
}

代码演示如下:

/根据给定的host获取主机名和IP地址
InetAddress byName = Inet4Address.getByName("www.baidu.com");
System.out.println(byName);
//根据给的byte数组【IP地址】获取主机名和IP地址
byte[] addres={(byte) 192,(byte) 168,31,105};
InetAddress byAddress = Inet4Address.getByAddress(addres);
System.out.println(byAddress);

如何查看本地IP地址信息?

看如下操作:

4.2 socket分类

通信的两端都要有Socket(也可以叫“套接字”),是两台机器间通信的端点。**网络通信其实就是Socket间的通信。**Socket可以分为:

  • 流套接字(stream socket):使用TCP提供可依赖的字节流服务
  • ServerSocket:此类实现TCP服务器套接字。服务器套接字等待请求通过网络传入。

🔔ServerSocket:建立连接

  • Socket:此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。

🔔Socket:传输数据

  • 数据报套接字(datagram socket):使用UDP提供“尽力而为”的数据报服务
  • DatagramSocket:此类表示用来发送和接收UDP数据报包的套接字。

🔔DatagramSocket:既建立连接,又传输数据

4.3 socket相关API

Socket类的常用构造方法

  • public Socket(InetAddress address,int port)创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
  • public Socket(String host,int port)创建一个流套接字并将其连接到指定主机上的指定端口号。

Socket类的常用方法

  • public InputStream getInputStream():返回此套接字的输入流,可以用于接收消息
  • public OutputStream getOutputStream():返回此套接字的输出流,可以用于发送消息
  • public InetAddress getInetAddress()此套接字连接到的远程IP 地址;如果套接字是未连接的,则返回 null。
  • public InetAddress getLocalAddress()获取套接字绑定的本地地址
  • public int getPort():此套接字连接到的远程端口号;如果尚未连接套接字,则返回 0。
  • public int getLocalPort():返回此套接字绑定到的本地端口。如果尚未绑定套接字,则返回 -1。
  • public void close()关闭此套接字。套接字被关闭后,便不可在以后的网络连接中使用(即无法重新连接或重新绑定)。需要创建新的套接字对象。 关闭此套接字也将会关闭该套接字的 InputStream 和 OutputStream。
  • public void shutdownInput()如果在套接字上调用 shutdownInput() 后从套接字输入流读取内容,则流将返回 EOF(文件结束符)。 即不能在从此套接字的输入流中接收任何数据。
  • public void shutdownOutput()禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。 如果在套接字上调用 shutdownOutput() 后写入套接字输出流,则该流将抛出 IOException。 即不能通过此套接字的输出流发送任何数据。

🔔注意:

先后调用Socket的shutdownInput()和shutdownOutput()方法,仅仅关闭了输入流和输出流,并不等于调用Socket的close()方法。在通信结束后,仍然要调用Scoket的close()方法,因为只有该方法才会释放Socket占用的资源,比如占用的本地端口号等。

4.4 DateGramSocket类

DatagramSocket 类的常用方法:

  • public DatagramSocket(int port)创建数据报套接字并将其绑定到本地主机上的指定端口。套接字将被绑定到通配符地址,IP 地址由内核来选择。
  • public DatagramSocket(int port,InetAddress laddr)创建数据报套接字,将其绑定到指定的本地地址。本地端口必须在 0 到 65535 之间(包括两者)。如果 IP 地址为 0.0.0.0,套接字将被绑定到通配符地址,IP 地址由内核选择。
  • public void close()关闭此数据报套接字。
  • public void send(DatagramPacket p)从此套接字发送数据报包。DatagramPacket 包含的信息指示:将要发送的数据、其长度、远程主机的 IP 地址和远程主机的端口号。
  • public void receive(DatagramPacket p)从此套接字接收数据报包。当此方法返回时,DatagramPacket 的缓冲区填充了接收的数据。数据报包也包含发送方的 IP 地址和发送方机器上的端口号。 此方法在接收到数据报前一直阻塞。数据报包对象的 length 字段包含所接收信息的长度。如果信息比包的长度长,该信息将被截短。

4.5 DateGramPacket类

DatagramPacket类的常用方法:

  • public DatagramPacket(byte[] buf,int length):构造 DatagramPacket,用来接收长度为 length 的数据包。 length 参数必须小于等于 buf.length。
  • public DatagramPacket(byte[] buf,int length,InetAddress address,int port)构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。length 参数必须小于等于 buf.length。
  • public int getLength()返回将要发送或接收到的数据的长度。
相关文章
|
12月前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
268 11
|
4月前
|
JSON 移动开发 网络协议
Java网络编程:Socket通信与HTTP客户端
本文全面讲解Java网络编程,涵盖TCP与UDP协议区别、Socket编程、HTTP客户端开发及实战案例,助你掌握实时通信、文件传输、聊天应用等场景,附性能优化与面试高频问题解析。
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
177 1
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
203 1
|
3月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
435 1
|
2月前
|
机器学习/深度学习 分布式计算 Java
Java与图神经网络:构建企业级知识图谱与智能推理系统
图神经网络(GNN)作为处理非欧几里得数据的前沿技术,正成为企业知识管理和智能推理的核心引擎。本文深入探讨如何在Java生态中构建基于GNN的知识图谱系统,涵盖从图数据建模、GNN模型集成、分布式图计算到实时推理的全流程。通过具体的代码实现和架构设计,展示如何将先进的图神经网络技术融入传统Java企业应用,为构建下一代智能决策系统提供完整解决方案。
333 0
|
6月前
|
设计模式 算法 Java
Java SE 与 Java EE 组件封装使用方法及实践指南
本指南详细介绍了Java SE与Java EE的核心技术使用方法及组件封装策略。涵盖集合框架、文件操作、Servlet、JPA、EJB和RESTful API的使用示例,提供通用工具类与基础组件封装建议,如集合工具类、文件工具类、基础Servlet、实体基类和服务基类等。同时,通过分层架构集成示例展示Servlet、EJB和JPA的协同工作,并总结组件封装的最佳实践,包括单一职责原则、接口抽象、依赖注入、事务管理和异常处理等。适合希望提升代码可维护性和扩展性的开发者参考。
203 0
|
9月前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
370 23
|
10月前
|
安全 网络协议 Java
Java网络编程封装
Java网络编程封装原理旨在隐藏底层通信细节,提供简洁、安全的高层接口。通过简化开发、提高安全性和增强可维护性,封装使开发者能更高效地进行网络应用开发。常见的封装层次包括套接字层(如Socket和ServerSocket类),以及更高层次的HTTP请求封装(如RestTemplate)。示例代码展示了如何使用RestTemplate简化HTTP请求的发送与处理,确保代码清晰易维护。
|
10月前
|
缓存 网络协议 Java
JAVA网络IO之NIO/BIO
本文介绍了Java网络编程的基础与历史演进,重点阐述了IO和Socket的概念。Java的IO分为设备和接口两部分,通过流、字节、字符等方式实现与外部的交互。
308 0

热门文章

最新文章