java网络编程——网络编程概述及UDP/TCP通信编程的实现

news2024/11/20 12:40:20

前言:

学习到通信了,整理下相关知识点。打好基础,daydayup!!!

网络编程

网络编程指可以让设备中的程序与网络上其他设备中的程序进行数据交互。

基本的通信架构

基本的通信架构有两种形式:CS架构(Client客户端/Server服务端),BS架构(Browser浏览器/Server服务器)。区别在于:CS架构中,程序员需要实现客户端;BS架构中,不需要实现客服端,只需要用户安装浏览器即可。

网络通信三要素

实现网络通信需要实现三要素:1,IP:设备在网络中的地址,是唯一的标识(java中用InetAddress类代表ip);2,端口:应用程序在设备中唯一的标识;3,协议:连接和数据在网络中传输的规则

如何实现两个程序之间的通信

1:首先确认两个程序的ip地址;2:确认程序的端口号;3:确定传输协议

 IP地址

IP(Internet Protocol):全称:互联网协议地址。是分配给上网设备的唯一标志。

IP地址有两种形式:IPv4(32位),IPv6(128位),由于IPv6尚未全面普及,IPv4接近饱和,为了解决这一状况,引入了公网IP和内网IP,公网IP为可以连接互联网的IP地址。内网为局域网IP为内部使用。

:127.0.0.1为回环地址,代表自己

java中使用InetAddress类来代表ip地址

 InetAddress

代表IP地址

常用方法:
名称说明
public static InetAddress getLocalHost()获取本机IP,会以一个inetAddress的对象返回
public static InetAddress getByName(String host)根据ip地址或者域名,返回一个inetAddress对象
public String getHostName()获取该ip地址对象对应的主机名
public String getHostAddress()获取该ip地址对象中的ip地址信息
public boolean isReachable(int timeout)在指定毫秒内,判断主机与该ip对应的主机是否可以连通

示例如下: 

端口

标记计算机设备上的应用程序,被规定为一个16位的二进制,范围是0-65535

 分类:

周知端口:0-1023,被预先定义的知名应用占用(例如:HTTP占用80,FTP占用21)

注册端口:1024-49151,分配给用户进程或某些应用程序

动态端口:49152-65535,之所以称为动态端口,是因为它一般不固定分配某种进程,而是动态分配。

注:我们自己开发的程序一般选择使用注册端口,且一个设备中不能出现两个程序的端口号一样,否则会出错

通信协议

网络上通信的设备,事先规定的连接规则,以及传输数据的规则被称为网络通信协议

 常用的两个通信协议

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

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

UDP协议

特点:无连接,不可靠通信;不事先建立连接,数据按包发送,一包数据包含:自己的IP,程序端口,目标ip,程序端口和数据(一包数据在64KB以内)。发送方不管对方是否在线,数据在中间丢失也不管,如果接受方收到数据也不会返回确认。(一般用于语音通话,视频直播等,通信效率高)

 java运用java.net.DatagramSocket类来实现UDP通信

DatagramSocket

用于创建客户端,服务端

创建方式:
构造器说明
public DatagramSocket()创建客户端的Socket对象,系统随机分配一个端口号
public DatagramSocket(int port)创建服务端的Socket对象,并指定端口号
 常用方法:
方法说明
public void send(DatagramPacket dp)发送数据包
public void receive(DatagramPacket p)使用数据包接受数据
 DatagramPacket

用于创建数据包

 创建方法:
构造器说明
public DatagramPacket(byte[ ]buf,int length,InetAddress address,int port)创建发出去的数据包对象
public DatagramPacket(byte[ ] buf,int length)创建用来接受数据的数据包
常用方法: 
方法说明
public int getlength()获取数据包,实际接收到的字节个数

 示例如下

TCP协议

特点:面向连接,可靠通信。要保证在不可靠的通信上实现可靠的传输。

TCP协议如何实现可靠传输

三次握手建立连接,传输数据时进行确认,四次挥手断开连接

三次握手连接 

在握手连接前需要确保通信双方都是全双工模式(可以同时发送和接收数据)

(图片来源:黑马程序员) 

传输数据确认

 当三次握手连接后,每当发送消息后,都需要收信对象发送反馈,如果发信方在发送消息后没收到收信方的反馈,那么发信方将重新发送消息

 四次挥手断开连接

四次挥手为了确认所有的消息收发完成

 (图片来源:黑马程序员) 

 java使用java.net.Socket类来实现TCP通信

Socket

用于实现客户端

 创建方式:
构造器说明
public Socket(String host,int port)根据指定的服务器ip,端口号请求与服务器建立连接,连接通过,就获得了客户端socket
常用方法: 
方法说明
public OutputStream getOutputStream()获得字节输出流对象
public InputStream getInputStream()获得字节输入流对象
ServerSocket

用于实现服务端

 创建方式:
构造器说明
public ServerSocket(int port)为服务端程序制造接口
常用方法: 
方法说明
public Socket accept()等待客户端的连接请求,一旦与某个客户端成功连接,返回Socket对象

 示例如下:

 

整理结束,撒花!!!

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

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

相关文章

2024年购买阿里云服务器多少钱?100元-5000元预算

2024年阿里云服务器租用费用,云服务器ECS经济型e实例2核2G、3M固定带宽99元一年,轻量应用服务器2核2G3M带宽轻量服务器一年61元,ECS u1服务器2核4G5M固定带宽199元一年,2核4G4M带宽轻量服务器一年165元12个月,2核4G服务…

KV260 BOOT.BIN更新 ubuntu22.04 netplan修改IP

KV260 2022.2设置 BOOT.BIN升级 KV260开发板需要先更新BOOT.BIN到2022.2版本,命令如下: sudo xmutil bootfw_update -i “BOOT-k26-starter-kit-202305_2022.2.bin” 注意BOOT.BIN应包含全目录。下面是更新到2022.1 FW的示例,非更新到2022.…

数据质量决定大模型能力,景联文科技提供高质量大模型数据

随着大模型的深入发展,各类资源要素的配置状态已悄然变化。其中,数据的价值已被提升到一个新高度。 大模型往往拥有庞大的参数和复杂的网络结构,需要大量的数据来学习和优化。数据的质量和数量直接决定了模型的训练效果。若数据不足或质量不佳…

【Flutter】windows环境配置

windows 11 环境 官方教程 配置了flutter 环境变量在系统的path里 bin 路径。 死活没反应 关闭了git关闭了dart.exe关闭了vs还是不行卸载重新来 新版git flutter doctor 还需要android 环境

WPF动画教程(PointAnimationUsingPath的使用)

PointAnimationUsingPath的介绍 PointAnimationUsingPath 是 WPF 中的一个类,它用于创建一个动画,该动画会沿着指定的路径移动一个点。 关于 PointAnimationUsingPath这些属性比较重要: 属性类型说明PathGeometryPathGeometry这个属性定义了…

【Django学习笔记(四)】JavaScript 语言介绍

JavaScript 语言介绍 前言正文1、JavaScript 小案例2、代码位置2.1 在当前 HTML 文件中2.2 在其他 js 文件中 3、代码注释3.1 HTML的注释3.2 CSS的注释3.3 Javascript的注释 4、变量 & 输出4.1 字符串4.2 数组4.3 对象(python里的字典) 5、条件语句6、函数7、DOM7.1 根据 I…

【动态规划】【背包问题】基础背包

【动态规划】【01背包问题】 解法 二维dp数组01背包解法 一维dp数组(滚动数组)01背包 ---------------🎈🎈题目链接🎈🎈------------------- 解法 二维dp数组01背包 😒: 我的代码实现> …

RedCap轻量化5G提升生产效率,多领域应用

在工业数字化时代,工业智能化已经成为了各行各业的发展趋势。而在这个过程中,5G作为新一代网络通信技术正逐渐成为工业领域的核心力量。而在5G技术的应用中,RedCap轻量化5G工业网关路由器便是低成本畅享5G的最佳选择。 RedCap轻量化5G工业网…

可视化大屏的应用(18):网络安全和信息安全领域

可视化大屏在物联网领域具有以下价值: 实时监控和可视化: 可视化大屏可以将物联网设备和传感器的数据以图表、图形和动画等形式实时展示,帮助用户直观地了解物联网系统的运行状态和数据趋势。通过可视化大屏,用户可以快速发现异…

说说对排序算法的一些理解

对排序 - 冒泡排序的理解 冒泡排序是一种简单的排序算法,其基本思想是通过多次遍历数组,每次比较相邻的两个元素。如果前一个元素大于后一个元素,则交换它们的位置。这样,每一次遍历都会将当前未排序部分的最大元素“冒泡”到数组…

游戏引擎中的物理应用

一、 角色控制器 Character Controller和普通的动态对象(Dynamic Actor )是不同的,主要的三个特点是: 它拥有可控制的刚体间的交互假设它是有无穷的摩擦力(可以站停在位置上),没有弹性加速和刹车几乎立即…

图论(Graph theory)

抽象数据结构类型 Graphic操作接口 操作接口功能描述操作接口功能描述e()获取图的总边数n()顶点的总数exits(v,u)判断v,u两个顶点是否存在边insert(v) 在顶点集 V 中插入新顶点 v remove(v,u)删除从v 到u的 关联边 remove(v) 将顶点 v 从顶点集中删除 type(v,u)边所属的类型(…

蓝桥杯物联网竞赛_STM32L071_15_ADC/脉冲模块

ADC模块用的是RP1不用多说了,主要是脉冲模块,这个模块没考过 这个脉冲模块放出脉冲,主要能用TIM捕获到这个脉冲的高电平持续时间即可 CubMx配置: 脉冲模块的引脚与PB0相连,所以用PB0读取上升沿记的数和下降沿记的数&am…

【第十一届大唐杯全国大学生新一代信息通信技术大赛】赛题分析

赛道一 一等奖 7% 二等奖 15% 三等奖 25% 赛道二 参考文档: 《第十一届大唐杯全国大学生新一代信息通信技术大赛(产教融合5G创新应用设计)专项赛说明.pdf》 一等奖:7% 二等奖:10% 三等奖:20% 赛项一&am…

【SQL】1873. 计算特殊奖金(CASE WHEN;IF())

题目描述 leetcode题目:1873. 计算特殊奖金 Code 写法一: CASE WHEN select employee_id, (case when employee_id % 2 0 or name like M% then salary 0 else salary end) as bonus from Employees order by employee_id写法二 :IF() …

大数据毕业设计hadoop+spark旅游推荐系统 旅游可视化系统 地方旅游网站 旅游爬虫 旅游管理系统 计算机毕业设计 机器学习 深度学习 知识图谱

基于hive数据仓库的贵州旅游景点数据分析系统的设计与实现 摘 要 随着旅游业的快速发展和数字化转型,旅游数据的收集和分析变得越来越重要。贵州省作为一个拥有丰富旅游资源的地区,旅游数据的分析对于促进旅游业的发展和提升旅游体验具有重要意义。基…

Docker 部署开源远程桌面工具 RustDesk

RustDesk是一款远程控制,远程协助的开源软件。完美替代TeamViewer ,ToDesk,向日葵等平台。关键支持自建服务器,更安全私密远程控制电脑!官网地址:https://rustdesk.com/ 环境准备 1、阿里云服务器一 台&a…

Jenkins磁盘空间自动清理

背景介绍 Jenkins作为一款广泛应用于自动化构建、测试与部署的强大工具,在长时间运作后,其服务器上积累了大量的构建历史、工作空间、日志文件以及其他临时数据。每次构建都会生成一系列的工作产物,随着时间的推移,这些数据逐渐占…

RabbitMQ3.x之六_RabbitMQ使用场景

RabbitMQ3.x之六_RabbitMQ使用场景 文章目录 RabbitMQ3.x之六_RabbitMQ使用场景1. 为什么选择 RabbitMQ?1. 可互操作2. 灵活3. 可靠 2. 常见用户案例1. 服务解耦2. 远程过程调用3. 流处理4. 物联网 1. 为什么选择 RabbitMQ? RabbitMQ 是一个可靠且成熟的…

微服务连接不上rabbitmq解决

1.把端口port: 15672改成port:5672 2:virtual-host: my_vhost一定对应上