JAVA——网络编程

目录

1.概述

常见的网络架构

2.网络编程三要素

a.ip

b.端口

c.协议

3.UDP协议

a.InetAddress类

1.概述

2.实例化对象

b.DatagramSocket类(快递公司)

c.DatagramPacket类(包裹)

   d.单播、组播、广播

4.TCP协议                                                                                 

1.概述                                                                                                     

2.客户端代码编写步骤

 3.服务端代码编写步骤


1.概述

网络编程是指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。这些程序可以进行数据的发送和接收,实现不同计算机系统之间的通信。

常见的网络架构

BS架构:BS架构的全称为浏览器(Browser)/服务器(Server),只需要一个浏览器,用户通过不同的网址。客户访问不同的服务器

优点:不需要开发客户端,只需要页面和服务端,用户不需要下载,打开浏览器就能使用

缺点:如果应用过大,用户体验受到影响

CS架构:CS架构的全称为客户端(Client)/服务器(Server),在用户本地需要下载并安装客户端程序,在远程有一个服务器端程序

优点:画面可以做的非常精美,用户体验好

缺点:需要开发客户端,也要开发服务端,用户需要下载和更新的时候太麻烦

2.网络编程三要素

a.ip

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

IPv4:IPv4,即互联网协议版本4,是构成当今互联网的基础协议之一。IPv4地址由四个字节(8位)组成,通常以点分十进制格式表示,例如192.168.1.1

注意:

1.它使用32位地址长度,提供了大约42亿个唯一地址。由于地址空间有限,IPv4地址耗尽问题已促使向IPv6过渡。

2.局域网IP可以解决IPv4数量不够的问题

3.127.0.0.1永远代表本机的地址

IPv6:IPv6,即互联网协议第6版。IPv6地址长度为128位,提供了约2^128个唯一地址,极大地扩展了地址空间。IPv6的引入旨在解决IPv4地址耗尽问题,同时提供了更好的网络安全性和灵活性。

常见CMD命令:

ipconfig:查看本机IP地址

ping:检查网络是否连通

b.端口

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

注意:

        1.端口号是由两个字节表示的整数,取值范围:0~65535,其中0~1023之间的端口号用于一些知名的网络服务或者应用,我们自己使用1024以上的端口号就可以了

        2.一个端口号只能被一个程序使用

c.协议

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

UDP:UDP,即用户数据报协议,UDP是面向无连接协议,速度快,有大小限制一次最多发送64k,数据不安全,易丢失数据

TCP:TCP,即传输控制协议,TCP协议是面向连接的通信协议,速度慢,没有大小限制,数据安全 

3.UDP协议

a.InetAddress类

1.概述

表示Internet协议(IP)地址

2.实例化对象

注意:主机名称可以是机器名称或者IP地址

b.DatagramSocket类(快递公司)

实例化对象:

注意:如果我们使用无参实例化对象,会在所有可用的端口中随机一个进行使用

常见方法:

c.DatagramPacket类(包裹)

实例化对象:

发送数据:

接收数据:

常见方法:

发送数据:

import java.io.IOException;
import java.net.*;
public class SendMessage {public static void main(String[] args) throws IOException {//创建快递公司DatagramSocket datagramSocket = new DatagramSocket();//发送的内容String string="Hellow World";//将字符串转换为字节码数组byte[] bytes = string.getBytes();//协议地址类InetAddress byName = InetAddress.getByName("127.0.0.1");//创建包裹DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, byName, 10086);//发送包裹datagramSocket.send(datagramPacket);//关流datagramSocket.close();}
}

 接收数据:                                                                                                                                         

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class ReceiveMessage {public static void main(String[] args) throws IOException {//创建快递公司DatagramSocket datagramSocket = new DatagramSocket(10086);//创建字节数组接收数据byte[] bytes = new byte[1024];//创建包裹DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);//接收数据datagramSocket.receive(datagramPacket);//获取数据(字节码数组)byte[] data = datagramPacket.getData();//获取数据(端口号)int port = datagramPacket.getPort();//获取数据(地址)InetAddress address = datagramPacket.getAddress();//获取数据(长度)int length = datagramPacket.getLength();//将数据转换为字符串String string = new String(data, 0,length );System.out.println(string);//关流datagramSocket.close();}
}

   d.单播、组播、广播

单播:指在计算机网络中,数据从一个发送节点直接传输到另一个特定的接收节点的通信方式。这种传输方式中,每次只有两个实体相互通信,发送端和接收端都是唯一确定的。它就像是两个人之间打电话,一对一进行信息交流。

组播:组播是在发送者和每一接收者之间实现点对多点网络连接的一种通信方式。如果一台发送者同时给多个接收者传输相同的数据,也只需复制一份相同的数据包。

注意:组播地址为224.0.0.0~239.255.255.255,其中224.0.0.0~224.0.0.225为预留的组播地址

发送端:
步骤:
①创建组播连接,使用MultiCastSocket类
②创建DatagramPacket对象打包数据,需要指定接收端口
③发送消息
④关闭连接


public class SendMessageDemo2 {public static void main(String[] args) throws IOException {//1.创建组播连接MulticastSocket mcs = new MulticastSocket();//2.创建数据包打包数据String str = "你好";byte[] bytes = str.getBytes();InetAddress address = InetAddress.getByName("224.0.0.1");int port = 10086;DatagramPacket dp = new DatagramPacket(bytes, bytes.length,address,port);//3.发送消息mcs.send(dp);//4.关闭连接mcs.close();}
}

接收端:
步骤:
①创建组播连接,使用MultiCastSocket
②将当前连接加入组播地址
③创建DatagramPacket对象接收数据
④解析数据
⑤关闭连接                                                                                                                                           

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;public class ReceiveMessage {public static void main(String[] args) throws IOException {//创建快递公司//DatagramSocket datagramSocket = new DatagramSocket(10086);MulticastSocket multicastSocket = new MulticastSocket(10086);//创建地址类InetAddress byName = InetAddress.getByName("224.0.0.0");//将本地连接加入组播multicastSocket.joinGroup(byName);//创建字节数组接收数据byte[] bytes = new byte[1024];//创建包裹DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);//接收数据multicastSocket.receive(datagramPacket);//获取数据(字节码数组)byte[] data = datagramPacket.getData();//获取数据(端口号)int port = datagramPacket.getPort();//获取数据(地址)InetAddress address = datagramPacket.getAddress();//获取数据(长度)int length = datagramPacket.getLength();//将数据转换为字符串String string = new String(data, 0,length );System.out.println(string);//关流multicastSocket.close();}
}

 广播:将单播的代码创建数据包DatagramPacket时,将发送的地址改为255.255.255.255就成了广播,局域网中的所有设备都能受到消息。

4.TCP协议                                                                                 

1.概述                                                                                                     

TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Sock对象通信之间要保证连接已经建立,通过Sock产生的IO流来进行网络通信 

2.客户端代码编写步骤

①创建客户端Socket对象与指定服务端连接
Socket(String host,int port);
②获取输出流,写数据
OutputStream getOutputStream
③释放资源    

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;public class Send {public static void main(String[] args) throws IOException {//创建Socker对象Socket socket = new Socket("127.0.0.1", 10086);//创建字节输出流OutputStream outputStream = socket.getOutputStream();//写入数据outputStream.write("你好".getBytes());//关流outputStream.close();socket.close();}
}

 3.服务端代码编写步骤


①创建服务器端的socket对象(ServerSocket)
ServerSocker(int port)
②监听客户端连接,返回Socket对象
Socket accept()
③获取输入流,读数据,并把数据显示在控制台
InputStream getInputStream()
④释放资源

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class Receive {public static void main(String[] args) throws IOException {//创建ServerSocket对象ServerSocket serverSocket = new ServerSocket(10086);//监听客户端连接Socket accept = serverSocket.accept();//获取输入流InputStream inputStream = accept.getInputStream();//将字节流转换为字符流(不转换会出现乱码)InputStreamReader inputStreamReader = new InputStreamReader(inputStream);//定义变量接收数据int b;while ((b=inputStreamReader.read())!=-1){System.out.print((char)b);}//关流inputStream.close();serverSocket.close();}
}

 4.三次握手和四次挥手                                                                                                       

三次握手: 
1.客户端向服务器请求建立连接,等待服务器同意并确认。

2.服务器向客户端返回一个响应,告诉客户端收到请求

3.客户端向服务器再次发送确认信息,表示客户端也确认了建立连接。

作用:确保连接建立

四次挥手:

作用:确保连接断开,且数据处理完毕
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

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

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

相关文章

完全透彻了解一个asp.net core MVC项目模板1

当我们使用Visual Studio 2022去新建一个基于asp.net core Web项目的时候,一般有三种选择,一种是空项目,一种是基于MVC的项目、再有一种就是基于包含Razor Pages实例的web应用。如下图: 今天,我们打算选择基于MVC模…

在米尔电子MPSOC实现12G SDI视频采集H.265压缩SGMII万兆以太网推流

1. 引言 随着网络视频平台的发展,用户对于4K高清画质的需求日益增长。然而,许多用户发现,即使购买了视频平台的会员,观看4K内容时画质却不如预期,有时甚至还会出现模糊、卡顿的情况。这种现象背后涉及到视频编码、网络…

Matlab数字信号处理——基于改进小波变换的图像去噪方法(7种去噪算法)

1.基于小波变换的阈值收缩法去噪 该方法利用小波变换分离出信号中的噪声成分,并通过设置合适的阈值对小波系数进行收缩,保留主要信息的同时,去除噪声。 %基于小波变换的阈值收缩法去噪算法 clear clc Iimread(nana.png); X im2double(I); …

HTB:Analytics[WriteUP]

目录 连接至HTB服务器并启动靶机 1.How many open TCP ports are listening on Analytics? 2.What subdomain is configured to provide a different application on the target web server? 3.What application is running on data.analytical.htb? 4.What version of…

「Mac畅玩鸿蒙与硬件11」鸿蒙UI组件篇1 - Text 和 Button 组件详解

本篇将详细介绍鸿蒙应用开发中的 Text 和 Button 组件。通过本篇内容,你将学习如何使用 Text 组件显示文本、格式化文本样式,以及如何使用 Button 组件处理点击事件并自定义样式。掌握这些基本组件的用法将为后续的 UI 开发奠定基础。 关键词 Text 组件Button 组件样式设置事…

05-07实现面向对象领域模型-停车案例

学习视频来源:DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 源代码地址:https://github.com/ByteBlizzard 本篇文章是讲视频中的3期内容合并为一起。 文章目录 需求模型命令聚合领域事…

如何批量裁剪图片?5个软件帮助你快速进行图片裁剪

如何批量裁剪图片?5个软件帮助你快速进行图片裁剪 批量裁剪图片可以通过多种工具轻松实现,以下5个软件可以帮助你快速裁剪大量图片: 万能图片编辑器 这是一款支持批量图像处理的多功能小工具,功能丰富且界面简单,支持…

vxe-table v4.8+ 与 v3.10+ 虚拟滚动支持动态行高,虚拟渲染更快了

Vxe UI vue vxe-table v4.8 与 v3.10 解决了老版本虚拟滚动不支持动态行高的问题,重构了虚拟渲染,渲染性能大幅提升了,行高自适应和列宽拖动都支持,大幅降低虚拟渲染过程中的滚动白屏,大量数据列表滚动更加流畅。 自适…

期权懂|开通ETF股票期权需要什么条件?ETF股票期权佣金是多少?

期权小懂每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 开通ETF股票期权需要什么条件?ETF股票期权佣金是多少? 一、开通ETF股票期权需满足以下条件: ‌(1)资金要求‌&#xf…

Lucene的概述与应用场景(1)

文章目录 第1章 Lucene概述1.1 搜索的实现方案1.1.1 传统实现方案1.1.2 Lucene实现方案 1.2 数据查询方法1.1.1 顺序扫描法1.1.2 倒排索引法 1.3 Lucene相关概念1.3.1 文档对象1.3.2 域对象1)分词2)索引3)存储 1.3.3 常用的Field种类 1.4 分词…

在服务器运维过程中,发现服务器时间倒退以及DNS无法解析域名造成yum不可用的问题解决

目录 一.问题描述 二.问题排查过程 2.1yum下载NTP 2.2排查DNS 三.问题解决过程 3.1修复DNS 3.2更新yum源 3.3下载ntp 四.问题解决结果 4.1ntp服务情况检查 4.2服务器时间检查 4.3软件系统时间检查 一.问题描述 对服务器进行运维的过程中,发现服务器时间…

Redis高频面试题

一、Redis有什么好处? 高性能:Redis是一个基于内存的数据存储系统,相比于传统的基于磁盘的数据库系统,它能够提供更高的读写性能。支持丰富的数据类型:Redis支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等,这使得它可以用于多种不同的应用场景。持久化:Re…

[POI2014] PTA-Little Bird(单调队列优化 DP)

luogu 传送门https://www.luogu.com.cn/problem/P3572 解题思路 先设 表示到 的最小劳累值。 很容易得出转移: 其中 由 和 的大小关系决定,并且 。 很显然,直接暴力是 的,会超时。 于是,考虑优化。 我们发现…

如何在Linux系统中使用Apache HTTP Server

如何在Linux系统中使用Apache HTTP Server Apache简介 安装Apache 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 启动Apache服务 验证Apache是否正在运行 访问Apache默认页面 配置Apache虚拟主机 创建虚拟主机配置文件 示例虚拟主机配置 创建网站根目录 准备静态网站内…

ISME Comm | 西南大学时伟宇团队在功能基因水平揭示植被演替过程中磷限制对土壤微生物碳代谢潜力的抑制作用机制

本文首发于“生态学者”微信公众号! 植被群落长期演替过程中,生态系统普遍受养分限制,微生物群落代谢功能在生态系统物质循环中尤为关键。西南大学时伟宇教授团队联合国内外学者,在功能基因水平,将微生物群落功能纳入生…

Unity控制物体透明度的改变

目录标题 效果图代码调用注意事项 效果图 代码 注意:在控制全部的模型进行透视时,已经隐藏的子物体仍然要处理。 using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; public class FadeModel {priva…

工业网络监控中的IP保护与软件授权革新

未来的智能工厂离不开稳定而高效的通信网络,这些网络在支撑生产流程的同时,也面临着复杂的管理与安全挑战。PROCENTEC推出了一系列硬件和软件产品,如Atlas、Mercury和Osiris,以提供全面的网络监控和故障排除能力。然而&#xff0c…

springboot 整合 抖音 移动应用 授权

后端开发,因为没有JavaSDK,maven依赖,用到的是API接口去调用 抖音API开发文档 开发前先申请好移动应用,抖音控制台-移动应用 之后还需要开通所有能开通的能力 拿到应用的 clientKey 和 clientSecret,就可以进入开发了 …

后台管理系统的通用权限解决方案(七)SpringBoot整合SpringEvent实现操作日志记录(基于注解和切面实现)

1 Spring Event框架 除了记录程序运行日志,在实际项目中一般还会记录操作日志,包括操作类型、操作时间、操作员、管理员IP、操作原因等等(一般叫审计)。 操作日志一般保存在数据库,方便管理员查询。通常的做法在每个…

视频设备一体化监控运维方案

随着平安城市、雪亮工程等项目建设的号召,视频监控系统的建设如火如荼地开展。无论在公共场所、企业单位、住宅小区、矿山工地还是交通枢纽,视频监控系统已成为保障安全、维护秩序和提升管理效率的重要工具。但由于对视频监控系统中的前端设备&#xff0…