JavaSE 网络编程 入门

1. 前言


· 本文章是用于 个人学习过程中 整理知识点的帖子,主题为:JavaSE 网络编程 入门

· 本文章出现的 遗漏、错误 欢迎点开这篇文章的各位指出。

· 本文章的知识大纲根据 韩顺平老师 JavaSE 教学视频 进行编写。

感谢韩顺平老师带来的优质教学和对教育作出的贡献


2. 相关概念


网络

· 两台或多态设备通过一定屋里设备连接起来构成了网络 。

· 根据覆盖范围,网络分为:局域网、城域网、广域网


网络通信

· 网络通信是指,两台设备之间通过网络实现数据传输 。

· 简单来讲就是:将数据通过网络从一台设备传输到另一台设备 。

· 相关包:java.net包 。

IP地址

· IP 地址 是每台计算机在网络中的唯一标识,其表示形式为:xx.xx.xx.xx 。

· IP 地址由 网络地址 和 主机地址 组成

域名

· 域名是 IP 地址的直观映射 。它解决了 IP 地址 记忆紊乱的问题 。

端口号

· 用于标识计算机上某个特定的网络程序 。其表现形式为整数形式,范围:0 ~ 65535 【2^16 - 1 位】

· 前 1024 端口 已被各大知名程序使用 。

· 网络用户通常能够通过:IP地址 + 端口号 来进入指定的服务器网络程序 。

· 例如:当用户想要使用百度的某个功能服务,那么他就会先通过域名访问IP地址,然后进入对应服务的端口号 。


3. 网络协议


场景模拟

· 在介绍网络协议之前,我们先进行简单的场景模拟:小明和小王在路上相遇,小明打了声招呼,小王出于礼貌,也打了声招呼 。

· 我们可以看到,两人沟通交流的方式,是通过 语言传输

· 语言:是被全球不同语种的人们发明并制定出来的、基于一定规则的产物

· 因此,我们就可以把语言看作是 一种协议

· 主机之间传输的并非语言,是数据,而数据的组织形式,就是协议 。

TCP/IP 协议

· TCP/IP ( Transmission Control Protocol / Internet Protocol ) :传输控制协议 / 因特网互联网协议,又名:网络通讯协议 。它是因特网最基本的协议,是国际互联网的基础 。

· 该协议是由:网络层的 IP协议 和 传输层的 TCP 协议 组成的

TCP 协议 与 UDP 协议

· TCP 协议:传输控制协议

   1. 使用TCP协议前,须先建立TCP连接,形成传输数据通道传输前,采用“三次握手"方式,是可靠的 。

   2. TCP协议进行通信的两个应用进程:客户端、服务端在连接中可进行大数据量的传输传输完毕 。

   3. 需释放已建立的连接,效率低 。

· UDP 协议:用户数据协议

   1. 将数据、源、目的封装成数据包,不需要建立连接 。

   2. 每个数据报的大小限制在64K内,不适合传输大量数据因无需连接,是不可靠的 。

   3. 发送数据结束时无需释放资源,速度快 。

· 区别:TCP 协议 下的通讯类似于打电话,在双方没有结束前,不允许第三方通讯 。UDP 类似于发短信 。


4. 网络编程类


● InetAddress 类

常用方法解释

● Socket 类


基本介绍

· 套接字( Socket ) 广泛应用于开发网络应用程序 。

· 其实质是 在通信主机的两端建立通信通道

· 通信要求是:通信两端都需要具有 Socket 套接字


相关特点

· Socket 套接字 允许程序把网络连接当做一个流 ,数据在两个 Socket 之间 通过 IO 流 传输数据

· 一般主动发起通信的应用程序为 客户端 ;等待通信请求的为服务端 。

图解

图片来源:@ 韩顺平教育

在这里插入图片描述

· TCP编程


基本介绍

· TCP网络通信编程 是基于客户端——服务端的网络通信 。其底层使用的是 TCP/IP 协议 。

· 应用场景:客户端发送数据,服务端接收并显示控制台 。

过程图解

在这里插入图片描述

相关细节

· 在进行TCP编程时,需要注意程序执行流程:Server端 -> Client端

· 先执行 Server 端 对本机端口号进行创建和监听,等待客户端发送连接请求 。

· 再执行 Client 端 对其进行连接请求 。

· 然后根据需求模拟相应的通信流程 。


· 下面就通过 TCP编程 进行 Socket 通信 进行演示:

示例 1 :客户端 传输数据到 服务端

在这里插入图片描述

示例 2:服务端 传输数据到 客户端

相关方法: socket.shutdownOutput / socket.shutdownInput 【分别用于标记数据处理结束】

本流程是根据上一个示例进行改写

在这里插入图片描述

示例 3:使用字符流传输数据

相关方法: bufferedWrite.newLine / bufferedRead.readLine 【分别用于标记数据处理结束】

在这里插入图片描述

示例 4: 实现图片传输

在这里插入图片描述


相关细节

· 根据上面的示例演示,我们已经了解了客户端和服务端之间的通信机制,但其实:客户端在对服务端发送请求时,也是通过一个端口来进行通信的,而这个端口是根据 TCP/IP 协议 提供的随机端口。

· 在客户端对服务端发送请求时,我们可以通过相关指令来查找他们的连接情况 。

netstat 指令

· 我们可以在 命令指示符 或 终端 中,通过 netstat 指令,查看当前主机的网络情况 。

相关指令解释
netstat -an查看当前主机网络情况
netstat -an|more分页显示主机网络情况

· 下面就来查看 客户端与服务端通信 时的情况 。

本次使用 示例 4 来进行网络情况查询

· 我们可以看到,本次客户端连接服务端的方式是TCP协议下 一个随机的端口号 51139 连接到 9999 端口

· 此时的状态是 ESTABLISHED 也就是 连接状态

在这里插入图片描述


· UDP编程


基本介绍

· UDP 编程是基于 DatagramSocketDatagramPacket 类 实现的 。它们实现了基于 UDP 协议网络程序 。

· UDP数据报通过 数据报套接字 DatagramSocket 发送和接收 。

· 系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。所以它是不可靠的 。

· DatagramPacket 对象封装了UDP数据报:其中包含了 发送端 和 接收端的 IP地址和端口号

· UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接 。

· 下面就通过 UDP编程 进行 Socket 通信 进行演示:

示例 1 :发送端 接收端 数据通信

在这里插入图片描述


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值