JAVA学习日记(二十六)网络编程

一、网络编程的概念

常见的软件架构:

 

 二、网络编程三要素

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

端口号:应用程序在设备中的唯一标识

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

(一)IP

全称:Internet Protocol ,是互联网协议地址,也称IP地址,是分配给上网设备的数字标签

通俗理解:上网设备在网络中的地址,是唯一的

常见IP分类为:IPv4、IPv6

IPv4概念:

IPv6概念:

 

IPv4地址分类形式:

InetAddress类的使用:

import java.net.InetAddress;
import java.net.UnknownHostException;public class Main {public static void main(String[] args) throws UnknownHostException {//获取InetAddress的对象  static inetAddress getByName(String host)//确定主机名称的ip地址,主机名称可以是机器名称,也可以是ip地址//String getHostName()  获取此IP地址的主机名//String getHostAddress() 返回文本显示中的IP地址字符串InetAddress address=InetAddress.getByName("10.102.54.27");System.out.println(address);  // /10.102.54.27String name=address.getHostName();System.out.println(name);  //LAPTOP-AIFHRFPIString ip=address.getHostAddress();System.out.println(ip);  //10.102.54.27}
}

 (二)端口号

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

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

注意:一个端口号只能被一个应用程序使用

(三)协议

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

UDP协议:

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

UDP是面向无连接通信协议,速度快,有大小限制,一次最多发送64K,数据不安全,易丢失 

(不管是否已经连接)

TCP协议:

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

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

(确保连接成功)

(四)UDP通信程序 

发送数据:

import java.io.IOException;
import java.net.*;public class UDPTest {public static void main(String[] args) throws IOException {//创建DatagramSocket对象//绑定端口,以后就是通过这个端口往外发//空参:所有可用的端口中随机选择一个使用//带参:指定端口号绑定DatagramSocket dgs=new DatagramSocket();//打包数据String str="你好啊!";byte[] bytes=str.getBytes();//127.0.0.1 表示本机IPInetAddress address=InetAddress.getByName("127.0.0.1");//端口号int port=10086;DatagramPacket dgp=new DatagramPacket(bytes,bytes.length,address,port);//发数据dgs.send(dgp);//释放资源dgs.close();}}

接收数据:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class UDPTest2 {public static void main(String[] args) throws IOException {//接受数据//创建DatagramSocket对象//细节: 接收时一定要绑定端口//      端口需要和发送端口保持一致DatagramSocket dgs=new DatagramSocket(10086);//接收数据包byte[] bytes=new byte[1024];DatagramPacket dgp=new DatagramPacket(bytes,bytes.length);//receive 该方法是阻塞的//当程序执行到这一步时,会在这里死等//等发送端发送消息dgs.receive(dgp);//解析数据包byte[] data=dgp.getData();int len=dgp.getLength();InetAddress address=dgp.getAddress();int port=dgp.getPort();System.out.println("接收到数据"+new String(data));System.out.println("该数据是从"+address+"这台电脑中的"+port+"这个端口发送的");//释放资源dgs.close();}
}

三种通信方式:


 ①单播

②组播

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;public class UDPTest4 {public static void main(String[] args) throws IOException {//组播发送端代码//创建MulticastSocket对象MulticastSocket ms = new MulticastSocket();//创建DatagramPacket对象String s="你好啊~~~";//打包数据byte[] bytes = s.getBytes();//指定组播地址224.0.0.1InetAddress address = InetAddress.getByName("224.0.0.1");//端口号int port = 1000;DatagramPacket dgp = new DatagramPacket(bytes, bytes.length, address, port);//发数据ms.send(dgp);//释放资源ms.close();}}import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;public class UDPTest3 {public static void main(String[] args) throws IOException {//组播接收端代码//创建MulticastSocket对象MulticastSocket ms=new MulticastSocket(1000);//将当前本机,添加到224.0.0.1的这一组当中InetAddress address=InetAddress.getByName("224.0.0.1");ms.joinGroup(address);//创建DatagramPacket数据包对象byte[] bytes=new byte[1024];DatagramPacket dp=new DatagramPacket(bytes,bytes.length);//接受数据ms.receive(dp);//解析数据byte[] data=dp.getData();String ip=dp.getAddress().getHostAddress();String name=dp.getAddress().getHostName();System.out.println("ip为:"+ip+",主机名为:"+name+",的人,发送了数据:"+new String(data));ms.close();}
}
③广播

(五)TCP通信程序

 

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;public class TCPTest1 {public static void main(String[] args) throws IOException {//TCP协议发送端//创建Socket对象//在创建对象的同时会连接服务器//如果连接不上,代码会报错Socket socket=new Socket("127.0.0.1",1000);//从连接通道种获取输出流OutputStream ops=socket.getOutputStream();//写出数据ops.write("你好啊".getBytes());//释放资源ops.close();socket.close();}
}import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class TCPTest2 {public static void main(String[] args) throws IOException {//TCP协议接收端//创建ServerSocket对象ServerSocket socket=new ServerSocket(1000);//监听客户端的链接Socket socket1=socket.accept();//从连接通道中获取输入流,读取数据(不能传中文)InputStream ips=socket1.getInputStream();//使用转换流转化为字符流InputStreamReader isr=new InputStreamReader(ips);//为了读取效率,再套一个缓冲流BufferedReader br=new BufferedReader(isr);String s;while((s=br.readLine())!=null){System.out.println(s);}//释放资源ips.close();socket1.close();socket.close();}
}

三次握手:

作用:确保连接建立

四次挥手:

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

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

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

相关文章

vue 设置 VUE_APP_TITLE 打包部署后不生效

VUE_APP_TITLE 名门望族云科技有限公司网站 这里的 名门望族云科技有限公司网站 两边不能加 (单引号) 部署后,浏览器刷新网站根目录

黑马头条day01 微服务搭建

1.请求调用流程 如http://localhost:8803/static/js/2.0195d7180dc783c3fe99.js这种静态资源,采用http的发送到本地8803端口的静态资源请求,而nginx配置的监听8801、8802、8803,所以请求走到nginx,nginx的admin配置文件 upstream…

LabVIEW热电偶传感器虚拟仿真实验系统

在教学和科研领域,实验设备的更新和维护成本较高,尤其是在经济欠发达地区,设备的短缺和陈旧化严重影响了教学质量。基于LabVIEW的热电偶传感器虚拟仿真实验系统能够通过模拟实验环境,提供一个成本低廉且效果良好的教学和研究平台。…

Win11 如何真正获取 Trustedinstaller 权限(非修改所有者及权限)

在新的系统中又该如何获得 Trustedinstaller 权限呢? 准备工作 1、首先,我们需要下载并安装 Set-NtTokenPrivilege 命令所需模块,我们先在系统 C 盘根目录新建名为“token”的文件夹。 2、以管理员身份运行 Powershell,然后输入…

ensp 静态路由配置

A公司有广州总部、重庆分部和深圳分部3个办公地点,各分部与总部之间使用路由器互联。广州、重庆、深圳的路由器分别为R1、R2、R3,为路由器配置静态路由,使所有计算机能够互相访问,实训拓扑图如图所示 绘制拓扑图 给pc机配置ip地址…

C语言学习day18:字符串操作/ANSI编码/宽字节/消息框/软件/游戏编码/逆向分析中的编码

今天我们将学习字符串操作,为什么要着重来说这个呢?因为这是为我们之后window开发和api做准备。好的,我们现在正式开始: 字符串 字符串就是一串文字。 比如:"好好学习,天天向上"就是一个字符串…

【论文阅读笔记】One Diffusion to Generate Them All

One Diffusion to Generate Them All 介绍理解 引言二、相关工作三、方法预备知识训练推理实现细节训练细节 数据集构建实验分结论附录 介绍 Paper:https://arxiv.org/abs/2411.16318 Code:https://github.com/lehduong/onediffusion Authors&#xff1…

深入理解偏向锁、轻量级锁、重量级锁

一、对象结构和锁状态 synchronized关键字是java中的内置锁实现,内置锁实际上就是个任意对象,其内存结构如下图所示 其中,Mark Word字段在64位虚拟机下占64bit长度,其结构如下所示 可以看到Mark Word字段有个很重要的作用就是记录…

暂停一下,给Next.js项目配置一下ESLint(Next+tailwind项目)

前提 之前开自己的GitHub项目,想着不是团队项目,偷懒没有配置eslint,后面发现还是不行。eslint的存在可以帮助我们规范代码格式,同时 ctrl s保存立即调整代码格式是真的很爽。 除此之外,团队使用eslint也是好处颇多…

Elasticsearch 架构及 Lucene 索引结构原理入门

文章目录 Elasticsearch 整体架构Lucene 索引结构Lucene 倒排索引核心原理倒排索引倒排表(Posting List) Elasticsearch 整体架构 一个 ES Index 在集群模式下,有多个Node(节点)组成,每个节点就是ES的 inst…

【SQL Server报错】在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。

目录 1、报错截图 2、解决步骤 1)打开SQL Server配置管理器 2)检查SQL Server服务 3)检查SQL Server网络配置 4)重启SQL Server数据库 1、报错截图 报错界面忘记截图了,我用的SQL Server2019,这里借…

每天40分玩转Django:Django视图和URL

Django视图和URL 一、课程概述 学习项目具体内容预计用时视图基础函数视图、类视图、视图装饰器90分钟URL配置URL模式、路由系统、命名URL60分钟请求处理请求对象、响应对象、中间件90分钟 二、视图基础 2.1 函数视图 # blog/views.py from django.shortcuts import render…

6、AI测试辅助-测试报告编写(生成Bug分析柱状图)

AI测试辅助-测试报告编写(生成Bug分析柱状图) 一、测试报告1. 创建测试报告2. 报告补充优化2.1 Bug图表分析 3. 风险评估 总结 一、测试报告 测试报告内容应该包含: 1、测试结论 2、测试执行情况 3、测试bug结果分析 4、风险评估 5、改进措施…

2024.12.14 TCP/IP 网络模型有哪几层?

2024.12.14 TCP/IP 网络模型有哪几层? 2024.12.14 今天周六 看到大伙都在考六级,我来复盘小林coding的计算机网络的知识点: TCP/IP 网络模型有哪几层? 问大家,为什么要有 TCP/IP 网络模型? 对于同一台设备上的进程间通信,有…

【学习笔记总结】华为云:应用上云后的安全规划及设计

一、背景和问题 数字化时代,随着信息技术的飞速发展,企业和各类组织纷纷将自身的应用程序迁移至云端。云计算凭借其诸多优势,如成本效益、可扩展性、灵活性以及便捷的资源共享等,已然成为了现代业务运营的重要支撑。 今年&#xf…

MySQL--》如何通过选择合适的存储引擎提高查询效率?

目录 MySQL体系结构 存储引擎简介 存储引擎特点 存储引擎选择 MySQL体系结构 体系结构:可以看作是由多个模块和组件组成的一个系统,每个部分都承担着不同的职责,从客户端到存储引擎每一层都精心设计来提供高效、可靠的数据库服务&#xf…

【机器学习与数据挖掘实战】案例02:基于K-Means算法的航空公司客户价值分析

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数…

JPG 转 PDF:免费好用的在线图片转 PDF 工具

JPG 转 PDF:免费好用的在线图片转 PDF 工具 在日常工作和生活中,我们经常需要将图片转换为 PDF 格式。无论是制作电子文档、准备演示材料,还是整理照片集,将图片转换为 PDF 都是一个常见的需求。今天为大家介绍一款完全免费、无需…

STM32F103单片机HAL库串口通信卡死问题解决方法

在上篇文章 STM32F103单片机使用STM32CubeMX创建IAR串口工程 中分享了使用cubeMX直接生成串口代码的方法,在测试的过程中无意间发现,串口会出现卡死的问题。 当串口一次性发送十几个数据的时候,串口感觉像卡死了一样,不再接收数据…

Linux 中 sftp 命令基本使用

参考链接 sftp 命令_sftp命令-CSDN博客 登录服务器【必须】 # sftp userNamehost # 例如 sftp root8.138.86.224 上传文件到服务器 使用 sftp 命令可以将本地文件上传到远程主机 # put local_file remote_file # 例如: put E://1.mp4 /root/1.mp4 下载文件 使…