当前位置: 首页 > news >正文

Java:网络编程

什么是网络编程?

在网络通信协议下,不同计算机上运行的程序,进行的数据传输。

2.常见软件架构有哪些?


CS/BS


3.通信的软件架构CS\BS的各有什么区别和优缺点心


CS:客户端服务端模式需要开发客户端BS:浏览器服务端模式不需要开发客户端。CS:适合定制专业化的办公类软件如:IDEA、
网游
BS:适合移动互联网应用,可以在任何地方随时访问的系统。


网络编程的三要素:IP,端口号,协议

IP

IPv4的地址分类形式

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


特殊IP地址

127.0.0.1,也可以是localhost:是回送地址,也称为本地回环地址,也称本机IP,永远只会寻找当前所在本机。通过此地址发送的信息在通过网卡的时候就会传回到本机

可以通过一下CMD命令来查看本机网络

用来表示IP的类:InetAddress

是用InetAddress的静态方法来创建对象。

getByName的参数可以是你自己的主机名,或IP地址

端口号

应用程序在设备中唯一的标识。

端口号:由两个字节表示的整数,取值范围:0~65535

                其中0~1023之间的端口号用来一些知名的网络服务或者应用。

        一个端口号只能由一个应用程序使用

传输信息的时候需要端口号对应哦

协议

计算机网络中,连接和通信的规则被称为网络协议

·OSI参考模型:世界互联网协议标准,全球通信规范,单模型过于理想化,未能在因特网上进行广范推广

·TCP/IP 参考模型(或TCP/IP协议):事实上的国际表准。

UDP协议

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

·UDP是面向无连接通信协议(不去检查两个端口连接是否成功,就直接发送数据)。速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据

代码实现:

单播

发送数据

用DatagrameSocket ds = new DatagramSocket();创建一个对象用来运输要打包好的数据,端口参数如果没写就会用任意的空的端口

再用DatagramPacket dp来打包数据,其中发送的的是字节数组,且必须指定发送到哪个端口

用ds.send(dp);来将数据发送出去

再用ds.close();释放资源

接受数据

先创建一个DatagramSocket对象来用来接受打包好的数据,其中必须要指定端口,要接受哪个端口发过来的数据

再创建一个DatagramPacket对象,调用ds.receive(dp);来将接受到的数据写入包中,如果ds.receive(dp)没有接受到数据就会阻塞在这里,直到接受到数据

用dp.getData()来获取包中的数据,同样得到的是字节数组

再进行解析

组播

同时个一个组内的电脑发送数据

发送数据,

与单播不同的是,创建用来运输数据的对象不同,改为MulticastSocket类型,发送的地址改为224.0.0.1~224.0.0.225中的一个

接受数据

与单播不同的是,创建用来运输数据的对象不同,改为MulticastSocket类型,但是要将当前的本机添加到224.0.0.1组中,才能这个组中接受发送的数据。

广播

给局域网中的所有设备发送数据

发送数据

只需要将发送的地址改为255.255.255.255

接受数据

和单播一样

TCP协议


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

·TCP协议是面回连接的通信协议。速度慢,没有大小限制,数据安全。

TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象

通信之前要保证连接已经建立

通过Socket产生IO流来进行网络通信

使用:

发送数据

流是建立再Socket里面会随着通道的关闭而关闭,所以可以手动关,也可以只关闭Socket

接收端

is.read();需要接收到发送端的结束标志才会返回-1,并结束,这个结束标志可以是发送短端的socket.close(),结束连接,也可以是在发送端调用socket.shutdownOutput();

三次握手协议(保证连接的确立)

四次挥手协议(确保连接断开,且数据处理完毕)

http://www.xdnf.cn/news/172711.html

相关文章:

  • CesiumEarth更新至1.14.0版本,重新设计了图层设置页面,优化了许多界面交互问题
  • K8S Pod 常见数据存储方案
  • Lua 第12部分 日期和时间
  • PH热榜 | 2025-04-27
  • HTML倒数
  • java 类的实例化过程,其中的相关顺序 包括有继承的子类等复杂情况,静态成员变量的初始化顺序,这其中jvm在干什么
  • xe-upload上传文件插件
  • WPF常用技巧汇总 - Part 2
  • Qt项目全局设置UTF-8编码方法(MSVS编译中文报错解决办法)
  • 新能源汽车运动控制器核心芯片选型与优化:MCU、DCDC与CANFD协同设计
  • 设计一个新能源汽车控制系统开发框架,并提供一个符合ISO 26262标准的模块化设计方案。
  • Java高频常用工具包汇总
  • [特殊字符]实战:使用 Canal + MQ + ES + Redis + XXL-Job 打造高性能地理抢单系统
  • Spark Mllib 机器学习
  • 第二章,网络类型及数据链路层协议
  • SMART:大模型在关键推理步骤辅导小模型,在保持高推理效率的同时,显著提升小模型的推理能力!!
  • python合并一个word段落中的run
  • 决策树相关案例
  • 【Node.js 】在Windows 下搭建适配 DPlayer 的轻量(简陋)级弹幕后端服务
  • Linux系统之设置开机启动运行桌面环境
  • 力扣hot100_子串_python版本
  • Nginx配置文件介绍
  • 机器学习day2-seaborn绘图练习
  • 数模学习:二,MATLAB的基本语法使用
  • 跨专业自学AI人工智能学习路线图(2025版)
  • Android完整开发环境搭建/Studio安装/NDK/本地Gradle下载配置/创建AVD/运行一个Android项目/常用插件
  • 金融数据分析(Python)个人学习笔记(13):自然语言处理
  • Kubernetes学习笔记-配置Service对接第三方访问
  • 【Redis】服务端高并发分布式结构演进之路
  • 零基础小白如何上岸数模国奖