21.Java网络通信

news2024/12/23 22:49:56

目录


1. Java基本介绍

2. JDK下载安装及其环境配置

3. 一个简单的java程序

4. Eclipse基本使用、数据类型、运算符

5. 控制语句(if、switch、for、while、foreach)

6. Java数组

7. Java字符串对象(String|StringBuffer|StringBuilder|StringJoiner)

8. Java面向对象

9. 正则表达式

10. Java包装类

11. 日期与时间

12. 异常(throwable)

13. Java日志处理

14. Java集合框架(Collection)

15. Java多线程

16. Java IO数据流

17. Java枚举(Enum)

18. Java泛型

19. Java Class类和Java反射

20. JDBC操作数据库

21. Java网络通信

22. Java注解

23. Java 1.8新特性

24. Java函数式编程




网络通信

网络程序设计是编写与其他计算机进行通讯的程序。Java已经将网络程序所需要的对象封装成不同的类。只要创建这些类的对,使用相应的方法,即使设计人员不具有关的网络知识,也可以编写处高质量的网络通讯程序

现实两台计算机的通信,必须要用一个网络线路连接两台计算机
服务器<----->网络<------>客户机
在这里插入图片描述
服务器:提供信息的计算机或程序
客户机:请求信息的计算机程序
网络:用于连接服务器与客户机


局域网与因特网

1.局域网(Local Area Newwork,LAN)

多个计算机相互连接组成的封闭式计算机组,可以有两台计算机组成;也可以由同以区域内上千台计算机组成

2.因特网(Internet)

由于LAN延伸到更大的范围,这样的网络称为广域网(Wide Area Network,WAN),它主要讲分布在不同地区的局域网或计算机系统互连起来,到达资源共享的目的
因特网(Internet),就是世界范围内最大的广域网


网络协议

网络协议规定了计算机之间连接物理、机械(网线与网卡的连接规定)、电气(有效的电平范围)等待征以及计算机之间的相互寻址规则、数据发送冲突的解决、长的数据如何分段传送与接收等。就像不同的国家有不同的法律一样,目前网络协议有多种

1.IP协议(Internet Protocol)

一种网络协议。Internet网络采用的协议是TCP/IP协议,其全称是Transmission Control Protocol/Internet Protocol。Internet网络上存在数以亿计的主机,每一台主机在网络上用为其分配的Internet地址代表自己,这个地址就是IP地址

IPv4:到目前为止IP地址用4个字节,也就是32位的二进制数来表示,称为IPv4。为了便于使用,通常取用每个字节的十进制数,并且每字节之间用圆点隔开表示IP地址,如127.0.0.1
IPv6:使用16个字节来表示IP地址

TCP/IP模式是一种层次结构,共分为4层,分别为应用层、传输层、网络互连层和主机到网络层。各层实现特定的功能,提供特定的服务个访问接口,并具有相对的独立性


2.TCP/UDP协议

在TCP/IP协议栈中,有两个高级协议是网络应用程序编写者一个了解的,即TCP(Transmission Control Protococl,传输控制协议)与UDP(User Datagram Protocol,用户数据报协议)

TCP协议(固连接,传输靠谱)
TCP协议是一种以固连接线为基础的协议,它是提供两台计算机间可靠的数据传送。TCP可以保证从一端数据送至连接的另一端时,数据能够确实送达,而且抵达的数据的排列顺序和送出时的顺序相同,因此,TCP协议适合可靠性要求比较高的场合。就想拨打电话,必须先拨号给对方,等待两端确定连接后,相互才能听到对方说话,也知道对方回应的是什么

HTTP、FTP和Telnet等都需要使用可靠的通信频道,例如,HTTP从某个URL读取数据时,如果收到的数据顺序与发送时不相同,就可能会出现一个混乱的HTML文件或是一些无效的信息

UDP协议(无连接,传输不靠谱)
UDP是无连接通信协议,不保证可靠数据的传输,但能够向若干个目标发送数据,接收发自若干个源的数据。UDP是以独立发送数据包的方式进行。这种方式就像邮递员送信这收信人

UDP协议适合于一些对数据准确性要求不高的场合,如网络聊天室、在线影片等。这是由于TCP协议在认证上存在额外耗费,可能使传输速度减慢,而UDP协议可能会更适合这些对传输速度和时效要求非常高的网站,即使有一小部分数据包遗失或传输顺序有所不同,也不会严重危害该项通信


端口和套接字

1.端口(port)

“端口”是英文port的意译,可以认为是设备与外界通信交流的出口,所有的数据都通过该出口与其他计算机或者设备相连。网络程序设计中的端口并非真实的物理存在,而是一个假想的连接装置。端口被规定为一个在0~65535之间的整数。

HTTP服务一般使用80端口,FTP服务使用21端口。假如一台计算机提供了HTTP、FTP等多种服务,那么客户机会通过不同的端口来确定连接到服务器的哪项服务上

通常0~1023之间的端口用于一些知名的网络服务和应用,用户的普通网络应用应该使用1024以上的端口数,以避免端口号与另一个应用或系统服务所用端口冲突

2.套接字(Socket)

网络程序中的套接字(Socket)用于将应用程序与端口连接起来。套接字是一个假想的连接装置,就像插插头的设备“插座”用于连接电器与电线一样。Java将套接字抽象化为类,程序设计者只需要创建Socket类对象,即可使用套接字


IP地址封装(封装类InetAddress)

IP地址是每台计算机在网络上的唯一标识,它是32位或128位的无符号数字,使用4组数字表示一个固定的编号,如‘192.168.128.255’就是局域网络中的编号

IP地址是一种底级协议,UDP和TCP都是在它的基础上构建的

Java提供了IP地址的封装类InetAddress,它位于java.net包中,主要封装了IP地址,并提供了相关的常用方法,如获取IP地址、主机地址等

InetAddress类的常用方法

方法返回值功能
getByName(String host)InetAddress获取与Host相对应的InetAddress对象
getHostAddress()String获取InetAddress对象所含的IP地址
getHostName()String获取此IP地址的主机名
getLocalHost()InetAddress返回本地主机的InetAddress对象
isReachable(int timeout)boolean在timeout指定的毫秒时间内,测试是否可以达到该地址

TCP程序设计

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在Java中,TCP程序设计是指利用ServerSocket类和Socket类编写的网络通信程序。利用TCP协议进行通信的两个应用程序是由主次之分的,一个称为服务器端程序,另一个称为客户端程序,两者的功能编写方法不大一样
①服务器程序创建一个ServerSocket(服务器端套接字),调用accept()方法等待客户机来连接
②客户端程序创建一个Socket,请求与服务器建立连接
③服务器接收客户机的连接请求,同时创建一个新的Socket与客户建立连接。服务器继续等待新的请求

ServerSocket服务器端

它可以通过指定的端口来等待连接的套接字。服务器套接字一次可以与一个套接字连接。如果多台客户机同时提出连接请求,服务器套接字会将请求连接的客户机存入队列中,然后从中取出一个套接字,与服务器新建的套接字连接起来。若请求连接数大于最大容纳数,则多出的连接请求被拒绝。队列的默认大小是50

ServerSocket类的构造方法
ServerSocket类的构造方法都抛出IOException异常

构造方法描述
ServerSocket()创建非绑定服务器套接字
ServerSocket(int port)创建绑定到特定端口的服务器套接字
ServerSocket(int port,int backlog)利用指定的backlog创建服务器套接字并将其绑定到指定的本地端口号
ServerSocket(int port,int backlog,InetAddress bindAddress)使用指定端口、侦听bcklog和要绑定到本地IP地址创建服务器
这种情况适用于计算机上有多块网卡和多个IP地址的情况,用于可以明确规定ServerSocket在哪块网卡或IP地址上对待你客户的连接请求

ServerSocket类的常用方法

方法返回值描述
accept()Socket等待客户机的连接。若连接,则创建一个套接字
isBound()boolean判断ServerSocket的绑定状态
getInetAddress()InetAddress返回此服务器套接字的本地地址
isClosed()boolean返回服务器套接字的关闭状态
close()void关闭服务器套接字
bind(SocketAddress endpoint)void将ServerSocket绑定到特定地址(IP地址和端口号)
getLocalPort()int返回服务器套接字等待的端口号

使用ServerSocket对象的accept()方法时,会阻塞线程的继续执行,直到接收到客户端的呼叫。


Socket客户端

调用ServerSocket类的accept()方法会返回一个和客户端Socket对象相连接的Socket对象,java.net包中的Socket类用于表示客户端套接字,它采用TCP建立计算机之间的连接,并包含了Java语言所有对TCP有关的操作方法,如建立连接、传输数据、断开连接等。

Socket构造方法
Socket类定义了多个构造方法,它们可以根据InetAddress对象或者字符串指定的IP地址和端口号创建实例。

构造方法描述
Socket()通过系统默认类型的SocketImpl创建为连接套接字
Socket(InetAddress address,int port)创建一个流套接字并将其连接到指定IP地址的指定端口号
Socket(InetAddress address,int port,InetAddress localAddr,int localPort)创建一个套接字并将其连接到指定远程地址上的指定远程端口
Socket(String host,int port)创建一个流套接字并将其连接到指定主机上的指定端口号
Socket(String host,int port,InetAddress localAddr,int localPort)创建一个套接字并将其连接到指定远程主机上的指定远程端口

Socket类常用方法

方法返回值描述
bind(SocketAddress bindpoint)void将套接字绑定到本地地址
close()void关闭此套接字
connect(SocketAddress endpoint)void将此套接字连接到服务器
connect(SocketAddress endpoint,int timeout)void将此套接字连接到服务器,并指定一个超时值
getInetAddress()InetAddress返回套接字连接的地址
getInputStream()InputStream返回此套接字的输入流
getLocalAddress()InetAddress获取套接字绑定的本地地址
getLocalPort()int返回此套接字绑定到的本地端口
getOutputStream()OutputStream返回此套接字的输出流
getPort()int返回此套接字连接到的远程端口
isBound()boolean返回此套接字的绑定状态
isClosed()boolean返回套接字的关闭状态
isConnected()boolean返回套接字的连接状态

TCP网络程序实例

(1)服务器端
创建服务器端类Server,首先创建服务器端套接字对象;然后监听客户接入,并读取接入的客户端IP地址和传入得消息;最后像接入的客户端发送一条信息

(2)客户端
创建客户端类Client,在程序中,首先创建客户端套接字,连接指定的服务器;然后向服务器端发送数据和接收服务器端传输的数据


UDP程序设计

UDP(User Datagram Protocol,用户数据报协议),它是网络信息传输的另一种形式。UDP通信和TCP通信不同,基于UDP的信息传递更快,但不提供可靠的保证,虽然UDP是一种不可靠的协议,但如果需要较快地传输信息,并能够容忍小的错误,可以考虑使用UDP
基本模式:
(1)将数据打包(称为数据包),然后将数据包发往目的地
(2)接收别人发来的数据包,然后查看数据包

使用Java进行UDP程序设计

1.发送数据包

(1)使用DatagramSocket()创建一个数据包套接字
(2)使用DatagramPackage(byte[] buf,int offset,int length,InetAddress address,int port):创建要发送的数据包

2.接收数据包

(1)使用DatagramSocket(int port)创建数据包套接字,绑定到指定的端口
(2)使用DatagramPacket(byte[] buf,int length)创建字节数组来接收数据包
(3)使用DatagramPacket类的receive()方法接收UDP包

DatagramPacket类

java.net包的DatagramPacket类用来表示数据包,该类的构造方法函数如下。
(1)DatagramPacket(byte[] buf,int length):创建DatagramPacket对象,指定了数据包的内存空间和大小
(2)DatagramPacket(byte[] buf,int length,InetAddress address,int port):创建DatagramPacket对象,不仅指定了数据包的内存空间和大小,还指定了数据包的目标地址和端口

在发送数据时,必须指定接收方的Socket地址和端口,因此使用第二种构造函数可以创建发送数据的DatagramPacket对象

DatagramPacket类的常用方法

方法返回值描述
getAddress()InetAddress返回某台机器的IP地址,此数据报将要发往该机器或者是从该机器接收到的
getData()byte[]返回数据缓冲区
getLength()int返回将要发送或接收到的数据的长度
getOffset()int返回将要发送或接收到的数据偏移量
getPort()int返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的
getSocketAddress()SocketAddress获取要将此包发送到的或者发出此数据报的远程主机的SocketAddress
setAddress(InetAddress iaddr)void设置要将此数据报发往的那台机器的IP地址
setData(byte[] buf)、setData(byte[] buf,int offset,int length)void 为此包设置数据缓冲区
setLength(int length)void设置要将此数据报发往的远程主机上的端口号
setSocketAddress(SocketAddress address)void设置要将此数据报发往的远程主机的SocketAddress(通常为IP地址+端口号)

DatagramSocket类

java.net包中的DatagramSocket类用于表示发送和接收数据包的套接字,该类的构造方法函数有以下3种
(1)DatagramSocket():创建DatagramSocket对象,构造数据报套接字并将其绑定到本机主机上任何可用的端口
(2)DatagramSocket(int port):创建DatagramSocket对象,创建数据报套接字并将其绑定到本地主机上的指定端口

DatagramSocket(int port,InetAddress addr):创建DatagramSocket对象,创建数据报套接字,并将其绑定到指定的本地地址,该构造函数适用于有多块网卡和多个IP地址的情况

DatagramSocket类的常用方法

方法返回值描述
bind(SocketAddress addr)void将此DatagramSocket绑定到特定的地址和端口
close()void关闭此数据报套接字
connect ( InetAddress address,int port)void将套接字连接到此套接字的远程地址
coonect(SocketAddress addr)void将此套接字连接到远程套接字地址(IP地址+端口号)
disconnect()void断开套接字的连接
getInetAddress()InetAddress返回此套接字连接的地址
getLocalAddress()InetAddress获取套接字绑定的本地地址
getLocalPort()int返回此套接字绑定的本地主机上的端口号
getLocalSocketAddress()SocketAddress返回此套接字绑定的端点的地址,如果尚未绑定则返回null
getPort()int返回此套接字的绑定状态
isBound()boolean返回套接字的绑定状态
isClosed()boolean返回是否关闭了套接字
isConnected()boolean返回套接字的连接状态
receive(DatagramPacket p)void从此套接字接收数据包
send(DatagramPacket p)void从此套接字发送数据包

使用DatagramSocket类创建的套接字是单个的数据报套接字。UDP协议是一种多播数据传输协议,那么可以创建多播的数据报套接字吗?答案是肯定的,DatagramSocket类提供了一个子类MulticatSocket,它表示多播数据报套接字,该类用于发送个接收IP多播包。MulticastSocket类是IP地址范围在224.0.0.0和239.255.255.255的范围内(包括两者),但这里需要说明的是地址224.0.0.0虽然被保留,但不一个使用

由于MulticastSocket类是DatagramSocket类的子类,因此他包含DatagramSocket类中的所有公有方法,除此之外,它还有两个特殊的方法joinGroup和leaveGroup
(1)joinGroup(InetAddress mcastaddr):加入多播组,参数mcastaddr表示要加入的多播地址
(2)leaveGroup(InetAddress mcastaddr):离开多播组,参数mcastaddr表示要离开的多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/455487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Asp.NET CORE实验室信息管理系统源码,支持LIS独立部署,Docker部署

技术架构&#xff1a;Asp.NET CORE 3.1 MVC SQLserver Redis等 基于B/S架构的实验室管理系统源码&#xff0c;整个系统的运行基于WEB层面&#xff0c;只需要在对应的工作台安装一个浏览器软件有外网即可访问。全套系统采用云部署模式&#xff0c;部署一套可支持多家医院检验科…

Java ---Object根类

(一&#xff09;定义 官方说法&#xff1a; 在Java中&#xff0c; Object 类是所有类的父类&#xff0c;即Java 的所有类都继承了 Object&#xff0c;子类可以使用 Object 的所有方法。 注意&#xff1a; Object类型的变量与除Object以外的任意引用数据类型的对象都多态引用 所…

youdiancms 9.5.0 版本 SQL注入(vulfocus复现)

启动服务 从上述信息&#xff0c;可以看到&#xff0c;web服务的80端口被映射到62461端口&#xff0c;并且该服务对外开启了3306端口并映射到20130 端口。并且给了数据库的相关信息。 配置web数据库 登陆后台&#xff0c;后台如下&#xff1a; 探测注入点 上述提到注入点是M…

OpenGL教程之 纹理练习

网址 LearnOpenGL 练习一 修改片段着色器&#xff0c;仅让笑脸图案朝另一个方向看。  解析&#xff1a;朝向另一个方向很简单&#xff0c;即让上文中的图片进行左右对称变换即可&#xff0c;即将片段着色器中笑脸的纹理坐标从textCord转换为vec2( 1 - textCord.x, text.y …

【淘宝】商品列表页数据采集+商品销量数据采集代码

采集场景 在淘宝首页&#xff08;https://s.taobao.com/&#xff09;输入关键词搜索&#xff0c;采集搜索后得到的商品列表页数据。示例中关键词为【耐克】&#xff0c;可根据需求进行更换&#xff0c;同时支持自动批量输入多个关键词。 采集字段 采集字段包括关键字文本值…

Nginx和tomcat反向代理(动静分离)

正向代理&#xff1a; 当用户想访问某一网址时&#xff0c;用户先访问代理服务器&#xff0c;然后由代理服务器向目标网址发送请求最终将数据返回代理服务器&#xff0c;最后代理服务器将数据返回给用户这一过程我们称之为正向代理。 反向代理&#xff1a;基本流程是与正向代理…

【react全家桶学习】如何创建一个react组件(超详)

前提是你安装了react脚手架&#xff0c;不会的看这里&#xff0c;然后再进行创建哦~ 【react全家桶学习】初始化react脚手架及项目结构讲解_suohs Blog的博客-CSDN博客 目录 问题1&#xff1a;如何创建一个简单的hello组件&#xff1f; 问题2&#xff0c;如果组件特别多怎么…

庚顿数据正式发布军工版实时数据库庚金3.0,鼎力支撑中国国防数字化

庚金实时数据库管理系统是北京庚顿数据科技有限公司旗下自主知识产权的军工级产品&#xff0c;可有效满足特种行业自主产权、高性能、高安全、高稳定等高端需求&#xff0c;轻松实现海量实时数据高频采集、海量存储等应用场景&#xff0c;切实保障了客户生产活动的稳定运行。庚…

c/c++:数组做函数参数,传入函数的首地址,相当于传址,指针做函数返回值,数组止做c语言中函数的返回值

c/c:数组做函数参数&#xff0c;传入函数的首地址&#xff0c;相当于传址&#xff0c;指针做函数返回值&#xff0c;数组禁止做c语言中函数的返回值 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;此时学会c的话&#xff0…

Python小姿势 - Python基础知识

Python基础知识 Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。 Python的创始人为吉多范罗苏姆&#xff08;Guido van Rossum&#xff09;&#xff0c;于1989年底发布第一个公开发行版本——0.9.0。 自2004年以来&#xff0c;Python已经成为顶级开源项目&…

从浏览器地址栏输入 url 到显示主页的过程?

当在浏览器地址栏输入一个URL并按下回车键后&#xff0c;发生了一系列复杂的过程&#xff1a; DNS解析&#xff1a;浏览器会对输入的URL进行DNS解析&#xff0c;将域名转换为服务器的IP地址。这一过程包括浏览器缓存、操作系统缓存、本地HOST文件配置、本地DNS服务器以及远程DN…

多通道振弦传感器无线采集仪 数据发送详解

多通道振弦传感器无线采集仪 数据发送过程 每次采集仪启动后会将采集到的传感器数据进行内部存储&#xff0c;并在设置好的时间间隔将数据发送出去&#xff0c;通过修改“数据发送方式”参数&#xff0c;监测数据可由数据接口输出也可经由无线网络发送。 在发送监测数据时&…

SpringCloud --- Nacos注册中心、配置管理

一、Nacos注册中心 1.1、认识和安装Nacos Nacos是阿里巴巴的产品&#xff0c;现在是SpringCloud中的一个组件。相比Eureka功能更加丰富&#xff0c;在国内受欢迎程度较高。 1.2、服务注册到nacos Nacos是SpringCloudAlibaba的组件&#xff0c;而SpringCloudAlibaba也遵循Spr…

3dtiles之点云pnts文件详解

3DTiles是一种用于在WebGL环境中渲染大规模三维地理数据的规范&#xff0c;它允许开发者将复杂的三维数据以高效的方式传输、存储和呈现。而PNTS格式则是3DTiles规范中用于存储点云数据的格式之一。在本文中&#xff0c;我们将探讨3DTiles和PNTS的基本原理以及它们如何用于处理…

集成学习(Ensembles)

Ensembles 前言EnsemblesAveraging,StackingWhy does averaging work?如何理解&#xff1a;In practice errors won’t be completely independent due to noise in the labels Random ForestsDoes averaging work if you use trees with the same parameters?Bootstrap Samp…

【AgentGPT】网页版的 Auto-GPT,让 AI 成为我们的生产力工具

在上一篇文章笔者分享了 Auto-GPT 的安装&使用,不过因为操作相对繁琐,可能会导致许多想使用工具的人卡在环境的设定上。 所以这边再介绍另一款无需安装,可直接使用的工具“AgentGPT”;他的操作超级简单,只要设定好目标(Goal),一键发送即可! 大纲 ▋ 如何免费使用 A…

【C++】计算类的大小

目录 简介计算类的大小场景1&#xff1a;空类场景2场景3&#xff1a;含有虚函数场景4&#xff1a;继承场景5&#xff1a;存在字节对齐的情况 总结结语 简介 Hello&#xff01; 非常感谢您阅读海轰的文章&#xff0c;倘若文中有错误的地方&#xff0c;欢迎您指出&#xff5e; …

Linux多媒体子系统02:V4L2核心框架分析(部分)

目录 1 V4L2框架结构概述 1.1 imx8视频输入通路硬件结构 1.2 V4L2设备节点观察 1.3 dts配置观察 1.4 probe函数观察 1.4.1 函数功能简介 1.4.2 各模块probe函数分析 1.5 V4L2框架结构图示 2 设备管理机制 2.1 v4l2_device结构体相关 2.1.1 v4l2_device结构体 2.1.2…

15.Java多线程

目录 1. Java基本介绍 2. JDK下载安装及其环境配置 3. 一个简单的java程序 4. Eclipse基本使用、数据类型、运算符 5. 控制语句&#xff08;if、switch、for、while、foreach&#xff09; 6. Java数组 7. Java字符串对象(String|StringBuffer|StringBuilder|StringJoiner…

教你如何免费使用ChatGPT 4?(国内可以直接访问,不用魔法)

目录 一. 内容介绍 二. 功能介绍 三. 优势 四. 版本比较 五. 国内试用方法 内容介绍&#xff1a; ChatGPT 4是由OpenAI开发的最新一代大型语言模型&#xff0c;其采用了GPT-3.5的技术架构&#xff0c;是目前全球最强大的通用AI模型之一。ChatGPT 4拥有极高的语言处理能力和…