Java基础——网络编程(一)

初识网络编程

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

应用场景:即时通信、网游对战、金融证券、国际贸易、邮件……

BS架构的优缺点:

1、不需要开发客户端,只需要页面+服务端

2、用户不需要下载,打开浏览器就能使用

3、如果应用过大,用户体验收到影响

CS架构的优缺点:

1、画面可以非常精美,用户体验好

2、需要开发客户端,也需要开发服务端

3、用户需要下载和更新的时候太麻烦

网络编程三要素

1、IP

设备在网络中的地址,是唯一的标识

常见IP分类:IPV4、IPV6

局域网IP随着上网地点不同(路由器不同)而改变,而127.0.0.1一直表示本机IP,不会改变

InetAddress类

2、端口号

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

自己通常使用1024以上的端口号,一个端口号只能被一个应用程序使用

3、协议

数据在网络中传输的规则,常见的协议有UDP、TCP、http、https、ftp

UDP协议

1、用户数据协议

2、UDP是面向无连接的通信协议

速度快,有大小限制一次最多发送64K,数据不安全易丢失

应用:网络会议、语音通话、在线视频

TCP协议

1、传输控制协议TCP

2、TCP协议是面向连接的通信协议

速度慢,没有大小限制,数据安全

应用:文字聊天、下载软件

 UDP通信程序

发送数据

1、创建发送端的DatagramSocket对象

2、数据打包

3、发送数据

4、释放资源

//发送数据
public class SendMessageDemo {public static void main(String[] args) throws IOException {//1.创建DatagramSocket对象(快递公司)//细节://绑定端口,以后就通过这个端口往外发送//空参:所有可用的端口中随机一个进行使用//有参:指定端口号进形绑定DatagramSocket ds = new DatagramSocket();//2.打包数据String str = "你好啊";byte[] bytes = str.getBytes();InetAddress address = InetAddress.getByName("127.0.0.1");//目的地IP地址int port = 10086;//目的地端口DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);//3.发送数据ds.send(dp);//4.释放资源ds.close();}
}

接收数据

//接收对象
//运行时先运行接收端,再运行发送端
public class ReceiveMessageDemo {public static void main(String[] args) throws IOException {//1.创建DatagramSocket对象(快递公司)//细节://在接收的时候,一定要绑定端口//而且绑定的端口一定要跟发送的端口保持一致DatagramSocket ds = new DatagramSocket(10086);//2.接收数据包byte[] bytes = new byte[1024];DatagramPacket dp = new DatagramPacket(bytes, bytes.length);//receive方法是阻塞的,程序执行到这一步时,会在这里死等,等发送端发送消息ds.receive(dp);//3.解析数据包byte[] data = dp.getData();int len = dp.getLength();InetAddress address = dp.getAddress();//从哪个IP发过来的int port = dp.getPort();//从哪个端口发过来的System.out.println("接收到的数据"+ new String(data,0,len));System.out.println("该数据是从"+address+"这台电脑中的"+port+"这个端口发出的");ds.close();}
}

三种通信方式

1、单播

以前的代码就是单播(一对一)

2、组播

组播地址:224.0.0~239.255.255.255,一个地址是一组电脑

其中224.0.0.0~224.0.0.255为预留的组播地址

3、广播

广播地址:255.255.255.255,对局域网内所有电脑通信

TCP通信程序

TCP通信协议是一种可靠的网络协议,它在通信的两端(客户端和服务器)各建立一个Socket对象。通信之前要保证连接已经建立。通过Socket产生IO流来进行网络通信

客户端(发送数据)

1、创建客户端的Socket对象(Socket)与指定服务端连接

Socket (String host,int port)

host为IP,port为端口

2、获取输出流,写数据

OutputStream getOutputStream()

3、释放资源

void close()

public class Client {//TCP协议,发送数据public static void main(String[] args) throws IOException {// 1.创建Socket对象//细节:在创建对象的同时会连接服务端,如果连不上,代码会报错Socket socket = new Socket("127.0.0.1", 10000);//2.可以从连接通道中获取输出流OutputStream os = socket.getOutputStream();//3.释放资源os.close();socket.close();}
}

服务端(接收数据)

1、创建服务器端的Socket对象(ServerSocket)

ServerSocket(int port)

2、监听客户端连接,返回一个Socket对象

Socket accept()

3、获取输入流,读数据,并把数据显示在控制台

InPutStream getInputStream()

4、释放资源

void close()

public class Server {public static void main(String[] args) throws IOException {//TCP协议,发送数据//1.创建对象SeverSocketServerSocket ss = new ServerSocket(10000);//2.监听客户端的连接Socket socket = ss.accept();//3.从连接通道中获取输入流读取数据InputStream is = socket.getInputStream();int b;while ((b = is.read()) != -1) {System.out.println((char) b);}//4.释放资源】socket.close();ss.close();}
}

如果读取时中文乱码,用字符流读取即可

三次握手和四次挥手

三次握手

四次挥手

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可视化大屏开发系列——页面布局

页面布局是可视化大屏的基础,想要拥有一个基本美观的大屏,就得考虑页面整体模块的宽高自适应,我们自然就会想到具有强大灵活性flex布局,再借助百分比布局来辅助。至此,大屏页面布局问题即可得到解决。 写在前面&#x…

Java高级技术探索:深入理解JVM内存分区与GC机制

文章目录 引言JVM内存分区概览垃圾回收机制(GC)GC算法基础常见垃圾回收器ParNew /Serial old 收集器运行示意图 优化实践结语 引言 Java作为一门广泛应用于企业级开发的编程语言,其背后的Java虚拟机(JVM)扮演着至关重…

机器人建模、运动学与动力学仿真分析(importrobot,loadrobot,smimport)

机器人建模、运动学与动力学仿真分析是机器人设计和开发过程中的关键步骤。 一、机器人建模 机器人建模是描述机器人物理结构和运动特性的过程。其中,URDF(Unified Robot Description Format)是一种常用的机器人模型描述方法。通过URDF&…

植物大战僵尸杂交版全新版v2.1解决全屏问题

文章目录 🚋一、植物大战僵尸杂交版❤️1. 游戏介绍💥2. 如何下载《植物大战僵尸杂交版》 🚀二、解决最新2.1版的全屏问题🌈三、画质增强以及减少闪退 🚋一、植物大战僵尸杂交版 《植物大战僵尸杂交版》是一款在原版《…

代码随想录-Day31

455. 分发饼干 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都…

Vue32-挂载流程

一、init阶段 生命周期本质是函数。 1-1、beforeCreate函数 注意: 此时vue没有_data,即:data中的数据没有收到。 1-2、create函数 二、生成虚拟DOM阶段 注意: 因为没有template选项,所以,整个div root都…

第3章 Unity 3D着色器系统

3.1 从一个外观着色器程序谈起 新建名为basic_diffuse.shader的文件,被一个名为basic_diffuse.mat的材质文件所引用,而basic_diffuse.mat文件则被场景中名为Sphere的game object的MeshRenderer组件所使用。 basic_diffuse.shader代码文件的内容如下所示…

C# WPF入门学习主线篇(二十一)—— 静态资源和动态资源

C# WPF入门学习主线篇(二十一)—— 静态资源和动态资源 欢迎来到C# WPF入门学习系列的第二十一篇。在上一章中,我们介绍了WPF中的资源和样式。本篇文章将深入探讨静态资源(StaticResource)和动态资源(Dynam…

运算符分为哪几类?哪些运算符常用作判断?简述运算符的优先级

运算符包含6大类:算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三元(目)运算符。 逻辑运算符常用作布尔判断 typeof 运算符: typeof 运算符用于确定变量或表达式的数据类型,并返回一个表示类型的字符串。 typeof …

Fegin如何传参form-data文件

Form-data传输file参数,这个大家都比较清楚,那么针对于Fegin参数file参数该如何操作呢!下面截图来找到对应的参数关系。 一、之前我们在postMan中是这种传参的,那么如果使用Feigin来传输文件File 二、在Fegin中传form-data参数&a…

Wall国内开源程序照片墙,支持VR全景及安装教程

下载 GitHub官网:https://github.com/zhang-tong-yao/wall 软件下载:https://github.com/zhang-tong-yao/wall/releases,推荐下载最新的版本。 演示效果 目前支持PC端和移动端自适应。 演示地址:https://demo-wall.ityao.cn …

OpenGL-ES 学习(6)---- Ubuntu OES 环境搭建

OpenGL-ES Ubuntu 环境搭建 此的方法在 ubuntu 和 deepin 上验证都可以成功搭建 目录 OpenGL-ES Ubuntu 环境搭建软件包安装第一个三角形基于 glfw 实现基于 X11 实现 软件包安装 sudo apt install libx11-dev sudo apt install libglfw3 libglfw3-dev sudo apt-get install…

新旧torch中傅里叶变换实现(fft)

由泰勒级数我们知道,一个函数可以被分解成无穷个幂函数叠加的形式,于是同样地,一个周期函数也可以被分解成多个周期函数叠加,于是自然而然地,三角函数符合这个需求,由傅里叶级数我们可以将周期函数分解成无…

unity 简易异步socket

1.unity 同步socket 改异步 using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Net.Sockets; using UnityEngine.UI; using System.Threading; using System;public class Echo : MonoBehaviour {//定义套接字Socket socket;//UG…

ubuntu的home内存不足的解决办法(win和ubuntu双系统)

这种解决办法前提是windows和ubuntu双系统 首先在windows系统上创建一个空的硬盘分区 然后在ubuntu系统上把这个空的硬盘放在主目录里 然后可以把东西存在这个文件夹中 如下图,但实际主目录的内存没有变,以后存东西就在这个文件夹里面就好了 具体操作…

在typora中利用正则表达式,批量处理图片

一,png格式 在 Typora 中批量将 HTML 图片标签转换为简化的 Markdown 图片链接,且忽略 alt 和 style 属性,可以按照以下步骤操作: 打开 Typora 并加载你的文档。按下 Ctrl H(在 Windows/Linux 上)或 Cmd…

大数据与人工智能在保险行业数字化转型中的应用

随着科技的快速发展,大数据和人工智能(AI)技术在保险行业中扮演着越来越重要的角色,推动了保险行业的数字化转型。通过收集和分析海量的用户数据,利用先进的人工智能算法,保险公司能够更准确地评估风险&…

JavaScript算法实现dfs查找省市区路径

需求 存在如下数组,实现一个算法通过输入区名,返回省->市->区格式的路径,例如输入西湖区,返回浙江省->杭州市->西湖区。 // 定义省市区的嵌套数组 const data [{name: "浙江省",children: [{name: "…

华为云下Ubuntu20.04中Docker的部署

我想用Docker拉取splash,Docker目前已经无法使用(镜像都在国外)。这导致了 docker pull 命令的失败,原因是timeout。所以我们有必要将docker的源设置在国内,直接用国内的镜像。 1.在华为云下的Ubuntu20.04因为源的原因…

element 树组件 tree 横向纵向滚动条

Html <el-cardshadow"hover"class"solo flex-2"style"height: calc(100vh - 1.6rem); border: 1px solid #ebeef5"><div slot"header" class"clearfix"><span>问题分类</span></div><div …