Java 网络编程

本文详细介绍了Java网络编程的基础,包括网络分层、TCP/IP协议、网络编程三要素,以及UDP和TCP通信的工作原理和相关类的使用。讲解了DatagramSocket和Socket在UDP与TCP通信中的角色,以及数据的发送与接收流程。

网络编程原理

  • 网络

将不同区域的电脑连接到一起,组成局域网、城域网或广域网。把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源

  • 计算机网络

是指将地理位置相同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在==网络操作系统、网络管理软件及通信协议的管理和协调下,实现资源共享和信息传递的计算机系统

  • 通信协议

计算机网络中实现通信必须有一些约定即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准

常见的协议有TCP协议和UDP协议

  • 通信接口

为了使两个结点之间能进行对话,必须在它们之间建立通信工具(即接口),使彼此之间能进行信息交换

网络分层

 

  • TCP/IP是一个协议族,也是按照层次划分,共四层:应用层,传输层,互连网络层,接口层(物理+数据链路层)

  • 接口层:负责监视数据在主机和网络之间的交互
    网络层:又称网络互联层,是整个TCP/IP协议的核心,主要用于将传输的数据进行分组,将分组数据发送到目标计算机或网络
    传输层:主要完成网络程序的通信,在进行网络通信时,既可以采用TCP,也可以采用UDP
    应用层:主要负责应用程序的协议

  • OSI网络通信协议模型,是一个参考模型,而TCP/IP协议是事实上的标准,TCP/IP协议参考了OSI模型,但是并没有严格按照OSI规定的七层标准去划分,而只划分了四层,这样会更简单点

网络编程三要素

  • IP地址(是网络中设备的唯一标识)

要想让网络中的计算机能够互相通信,必须为计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机,而IP地址就是这个标识号,也就是设备的标识

IP地址分为两类

IPv4:网际协议版本4(英语:Internet Protocol version 4,IPv4),又称互联网通信协议第四版,是网际协议开发过程中的第四个修订版本,也是此协议第一个被广泛部署的版本。IPv4是互联网的核心,也是使用最广泛的网际协议版本,其后继版本为IPv6

IPv6:IPv6的地址长度为128位,是IPv4地址长度的4倍。于是IPv4点分十进制格式不再适用,采用十六进制表示,解决了网络地址资源数量不够的问题

相关DOS命令:

ipconfig:查看本机地址

ping IP地址:检查网络是否连通

  • 端口(设备上应用程序的唯一标识)

网络的通信,本质上是两个应用程序的通信。每台计算机都有很多的应用程序,那么在网络通信时,如何区别应用程序呢?如果说IP地址可以唯一的标识网络中的设备,那么端口号就可以唯一标识设备中的应用程序,也就是应用程序的标识

端口号: 用两个字节表示的整数,它的取值范围是0 - 65535

公认端口:0 - 1023之间的端口号用于一些知名的网络服务和应用,比如80端口分配给www,21端口分配给FTP**
注册端口:1024 - 49151 分配给用户进程或应用程序**
动态/私有端口:49152 - 65535
如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败

相关DOS命令:

查看所有端口:netstat -ano

查看指定端口:netstat -aon|findstr "80"

查看指定进程:tasklist|findstr "12476"

查看具体程序:使用任务管理器查看PID

  • 协议(连接和通信的规则)

通过计算机网络可以使多台计算机实现连接,位于同一网络中的计算机进行连接和通信时需要遵守一定的规则,在计算机网络中,这些连接和通信的规则被称为计算机网络通信协议。统一规定了对数据的传输格式、传输速率、传输步骤,而通信双方必须同时遵守才能完成数据交换

UDP协议:用户数据报协议(User Datagram Protocol)

UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据

由于使用UDP协议消耗资源少,通信效率高,所以通常都会用于音频、视频和普通数据的传输

例如视频会议通常采用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议

TCP协议:传输控制协议(Transmission Control Protocol)

是一种面向连接(连接导向)的、可靠的、 基于IP的传输层协议

UDP通信

  • UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象

  • 基于UDP协议的通信双方而言,没有客户端和服务器概念

DatagramSocket类

发送和接收DatagramPacket数据包

构造方法

 常用方式

  • void send(DatagramPacket p):从此套接字发送数据报包
  • void receive(DatagramPacket p):从此套接字接收数据报包(阻塞式的接收)

DatagramPacket类

用于封装UDP通信中发送或者接收的数据

构造方法

 常用方法

  • int getLength():返回要发送的数据的长度或接收到的数据的长度
  • byte[] getData():返回数据缓冲区

UDP通信步骤:先运行接收端,再运行发送端

接收端步骤:

1.定义接收数据对象

2.定义封装数据对象

3.等待接收数据

4.输出打印数据


发送端步骤:

1.定义发送数据的对象

2.定义封装数据对象

3.发送数据
 

TCP通信

  • TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信
  • 使用基于TCP协议的Socket网络编程实现,使用Socket对象来代表两端的通信端口

  • TCP协议基于请求-响应模式,第一次主动发起的程序被称为客户端(Client)程序

  • 第一次通讯中等待连接的程序被称为服务器端(Sercer)程序

服务器端 ServerSocket类

 常用方法:

  • Socket accept():侦听要连接到此套接字并接受

服务器端步骤

  • 创建ServerSocket(int port)对象

  • 在Socket上使用accept方法监听客户端的连接请求

  • 阻塞、等待连接的建立

  • 接收并处理请求信息

  • 将处理结果返回给客户端

  • 关闭流和Socket对象

客户端 Socket类

 常用方法:

  • OutputStream getOutputStream():返回此套接字的输出流
  • InputStream getInputStream():返回此套接字的输入流
  • void shutdownOutput():禁用此套接字的输出流

客户端步骤

  • 创建Socket(String host, int port)对象

  • 向服务器发送连接请求

  • 向服务器发送服务请求

  • 接受服务结果(服务响应)

  • 关闭流和Socket对象

TCP发送数据的步骤

1、创建客户端的Socket对象(Socket)
Socket(String host, int port)
2、获取输出流,写数据
OutputStream getOutputStream()
3、释放资源

TCP接收数据的步骤

1、创建服务器端的Socket对象(ServerSocket)
ServerSocket(int port)
2、获取输入流,读数据,并把数据显示在控制台
Socket accept()
3、释放资源

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值