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

26-网络通信

网络通信

什么是网络编程?
可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。
java.net.包下提供了网络编程的解决方案!
基本的通信架构有2种形式:CS架构( Client客户端/Server服务端 ) 、 BS架构(Browser浏览器/Server服务端)。

image-20230811093617412

image-20230811093708272

我们java的重点是开发BS架构
无论是CS架构,还是BS架构的软件都必须依赖网络编程

网络通信的三要素

  1. IP地址 设备在网络中的地址,是唯一的标识。
  2. 端口 应用程序在设备中唯一的标识
  3. 协议 连接和数据在网络中传输的规则。

IP地址

IP(Internet Protocol):全称”互联网协议地址”,是分配给上网设备的唯一标志。
IP地址有两种形式:IPv4、IPv6

IPV4

image-20230811094428007

IPV6

32为的IP地址根本不够为我们如此多的IP的地址进行编号,所以演变出了IPV6地址
IPv6:共128位,号称可以为地球每一粒沙子编号。
IPv6分成8段表示,每段每四位编码成一个十六进制位表示, 数之间用冒号(:)分开。
image-20230811095044814

IP域名

域名就是最后也要转化为IP的
image-20230811095232838

特殊IP

公网IP,内网IP
公网IP:是可以连接互联网的IP地址;内网IP:也叫局域网IP,只能组织机构内部使用。
192.168. 开头的就是常见的局域网地址,范围即为192.168.0.0–192.168.255.255,专门为组织机构内部使用。
特殊IP地址:非常重要
127.0.0.1、localhost:代表本机IP,只会寻找当前所在的主机。
IP常用命令:
ipconfig:查看本机IP地址。
ping IP地址:检查网络是否连通。

InerAddress命令
名称说明
public static InetAddress getLocalHost()获取本机IP,会以一个inetAddress的对象返回
public static InetAddress getByName(String host)根据ip地址或者域名,返回一个inetAdress对象
public String getHostName()获取该ip地址对象对应的主机名。
public String getHostAddress()获取该ip地址对象中的ip地址信息。
public boolean isReachable(int timeout)在指定毫秒内,判断主机与该ip对应的主机是否能连通
举例
    public static void main(String[] args) {try {InetAddress ia = InetAddress.getLocalHost();  //获取本机IPInetAddress bd = InetAddress.getByName("www.baidu.com");  //获取这个网址的ipSystem.out.println(ia);  //输出这个本机ip的主机System.out.println(ia.getHostName());  //输出这个本机ip的名字System.out.println(ia.getHostAddress()); //输出这个本机ip的地址System.out.println(bd.isReachable(1000)); //判断baidu的主机和本机是否能够在1000ms内进行连接成功} catch (Exception e) {e.printStackTrace();}}输出结果
DESKTOP-ROKA7MJ/111.111.111.1 (这个本机ip我已经修改了,防止自己的ip泄露,这里随便编了一个,为了能够更好的展示结果)
DESKTOP-ROKA7MJ
111.111.111.1
www.baidu.com/180.101.50.188
true

端口号

端口
标记正在计算机设备上运行的应用程序的,被规定为一个 16 位的二进制,范围是 0~65535。
分类
周知端口:0~1023,被预先定义的知名应用占用(如:HTTP占用 80,FTP占用21)
注册端口:1024~49151,分配给用户进程或某些应用程序。
动态端口:49152到65535,之所以称为动态端口,是因为它 一般不固定分配某种进程,而是动态分配。
注意:我们自己开发的程序一般选择使用注册端口,且一个设备中不能出现两个程序的端口号一样,否则出错。

协议

网络上通信的设备,事先规定的连接规则,以及传输数据的规则被称为网络通信协议。
开放式网络互联标准:OSI网络参考模型
OSI网络参考模型:全球网络互联标准。
TCP/IP 网络模型:事实上的国际标准。(大四的课程, 进行网络通信)

OSI网络参考模型TCP/IP网络模型各层对应面向操作
应用层应用层HTTP、FTP、SMTP…应用程序需要关注的:浏览器,邮箱。程序员一般在这一层开发
表示层应用层HTTP、FTP、SMTP…应用程序需要关注的:浏览器,邮箱。程序员一般在这一层开发
会话层应用层HTTP、FTP、SMTP…应用程序需要关注的:浏览器,邮箱。程序员一般在这一层开发
传输层传输层UDP、TCP…选择使用的TCP , UDP协议
网络层网络层IP…封装源和目标IP
数据链路层数据链路层+ 物理比特流…物理设备中传输
物理层数据链路层+ 物理比特流…比特流…

UDP(User Datagram Protocol):用户数据报协议; TCP(Transmission Control Protocol) :传输控制协议。

UDP协议

特点:无连接、不可靠通信。
不事先建立连接,数据按照包发,一包数据包含:自己的IP、程序端口,目的地IP、程序端口和数据(限制在64KB内)等。
发送方不管对方是否在线,数据在中间丢失也不管,如果接收方收到数据也不返回确认,故是不可靠的 。
语音童话,还有视频直播我们可以用这个UDP通信,因为数据的丢失对这个影响不大

TCP协议

特点:面向连接、可靠通信。
TCP的最终目的:要保证在不可靠的信道上实现可靠的传输。
TCP主要有三个步骤实现可靠传输:三次握手建立连接,传输数据进行确认,四次挥手断开连接。

image-20230811105551312

image-20230811105831833

image-20230811105854535

UDP通信的快速入门

常用方法

UDP通信
特点:无连接、不可靠通信。
不事先建立连接;发送端每次把要发送的数据(限制在64KB内)、接收端IP、等信息封装成一个数据包,发出去就不管了。
Java提供了一个java.net.DatagramSocket类来实现UDP通信。
DatagramSocket: 用于创建客户端、服务端

构造器说明
public DatagramSocket()创建客户端的Socket对象, 系统会随机分配一个端口号。
public DatagramSocket(int port)创建服务端的Socket对象, 并指定端口号
方法说明
public void send(DatagramPacketdp)发送数据包
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()获取数据包,实际接收到的字节个数

一发一收

创建一个客户端对象

    public static void main(String[] args) throws Exception {//1. 创建客户端对象,发数据的人DatagramSocket ds = new DatagramSocket();//2 创建数据包对象封装要发出去的数据(创建一个韭菜盒子)  //参数一:封装要发出去的数据//参数二,发出去的数据大小,字节个数//参数三:服务端的IP地址// 参数四: 服务端程序的端口byte[] bytes = "我爱你,你爱我,蜜雪冰城甜蜜蜜".getBytes();DatagramPacket dp = new DatagramPacket(bytes,bytes.length, InetAddress.getLocalHost(),6666);ds.send(dp);System.out.println("客户端数据发送完毕");ds.close(); //释放资源}

创建一个服务端对象,注册端口

    public static void main(String[] args) throws Exception {//创建一个服务端对象,注册端口System.out.println("------------");DatagramSocket ds = new DatagramSocket(6666);//创建一个数据包对象,用于接受数据byte [] bytes = new byte[1024*64]; //一个数据包最大不能超过64kb,所以我们接收的时候最好用最大的,防止接收不完DatagramPacket dp = new DatagramPacket(bytes,bytes.length);ds.receive(dp);//读取多少就倒出多少String s = new String(bytes,0,dp.getLength());System.out.println(s);}

多发多收

客户端.可以多次运行

        Scanner input  = new Scanner(System.in);while (true) {System.out.println("请说");String msg = input.nextLine();//退出这个循环if(msg.equals("end")){System.out.println("退出成功,欢迎下次使用");ds.close(); //释放资源break;}byte[] bytes = msg.getBytes();DatagramPacket dp = new DatagramPacket(bytes,bytes.length, InetAddress.getLocalHost(),6666);ds.send(dp);System.out.println("客户端数据发送完毕");}

服务端没有必要关闭

        DatagramSocket ds = new DatagramSocket(6666);byte [] bytes = new byte[1024*64]; //一个数据包最大不能超过64kb,所以我们接收的时候最好用最大的,防止接收不完while (true) {System.out.println("------------");DatagramPacket dp = new DatagramPacket(bytes,bytes.length);ds.receive(dp);//读取多少就倒出多少String s = new String(bytes,0,dp.getLength());System.out.println(s);}

TCP通信

一定要注意前后服务端和客户端要一一对应,否则就容易出错

特点:面向连接、可靠通信。
通信双方事先会采用“三次握手”方式建立可靠连接,实现端到端的通信;底层能保证数据成功传给服务端。
Java提供了一个java.net.Socket类来实现TCP通信。

image-20230811120040094

TCP通信之-客户端开发

客户端程序就是通过java.net包下的Socket类来实现的。

常用方法

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

TCP通信之-服务端开发

服务端是通过java.net包下的ServerSocket类来实现的。

构造器说明
public ServerSocket(int port)为服务端程序注册端口
方法说明
public Socket accept()阻塞等待客户端的连接请求,一旦与某个客户端成功连接,则返回服务端这边的Socket对象。

举例

单发单收
服务端, 从外读input

 //服务端的开发ServerSocket serverSocket = new ServerSocket(8888);//使用servesocket对象,调用accept[t方法,等待客户端的连接请求Socket accept = serverSocket.accept();//从socket通信管道中获取一个字节输入流InputStream is = accept.getInputStream();DataInputStream dis = new DataInputStream(is);//读取数据System.out.println(dis.readUTF());dis.close();serverSocket.close();

客户端,往外写 output

//创建socker对象,并同时请求与服务器程序的连接Socket socket = new Socket(InetAddress.getLocalHost(),8888);//从cocket通信管道中得到一个字节输出流,用来发数据给服务端程序OutputStream os = socket.getOutputStream();//BufferedOutputStream bos = new BufferedOutputStream(os);//把低级的字节输出流,包装成数据输出流DataOutputStream dos = new DataOutputStream(os);dos.writeUTF("我喜欢你");dos.close();socket.close();

多发多收
服务端, 从外读 input

//服务端的开发ServerSocket serverSocket = new ServerSocket(8888);Socket accept = serverSocket.accept();//使用servesocket对象,调用accept[t方法,等待客户端的连接请求//从socket通信管道中的大奥一个字节输入流InputStream is = accept.getInputStream();DataInputStream dis = new DataInputStream(is);while (true) {System.out.println("------------");//读取数据System.out.println(dis.readUTF());}

客户端, 往外写output

        //创建socker对象,并同时请求与服务器程序的连接Socket socket = new Socket(InetAddress.getLocalHost(),8888);Scanner input = new Scanner(System.in);OutputStream os = socket.getOutputStream();//BufferedOutputStream bos = new BufferedOutputStream(os);//把低级的字节输出流,包装成数据输出流DataOutputStream dos = new DataOutputStream(os);while (true) {//从cocket通信管道中得到一个字节输出流,用来发数据给服务端程序String msg = input.nextLine();if(msg.equals("end")){System.out.println("退出客户端");dos.close();socket.close();break;}dos.writeUTF(msg);dos.flush();System.out.println("写入成功");}

如果我们这个客户端挂了,那么服务端也会挂

TCP通信,支持与多个客户端同时通信

目前我们开发的服务端程序,是否可以支持与多个客户端同时通信 ?
不可以的。
因为服务端现在只有一个主线程,只能处理一个客户端的消息。
UDP不需要进行连接,只需要进行发送数据包就好了
image-20230811124405412
所以我们要又多线程来实现多个客户端进行通信
服务端,创建多线程

        ServerSocket serverSocket = new ServerSocket(8888);System.out.println("服务器启动");while (true) {Socket accept = serverSocket.accept();System.out.println("有人上线了,地址是"+accept.getRemoteSocketAddress() );new TCPThread(accept).start();}

线程对象

public class TCPThread extends Thread{private Socket socket;public TCPThread(Socket socket){this.socket=socket;}@Overridepublic void run(){try {InputStream is = socket.getInputStream();DataInputStream dis = new DataInputStream(is);while (true) {//读取数据,防止服务端关闭这里崩溃try {System.out.println(dis.readUTF());System.out.println(socket.getRemoteSocketAddress()+"输入了数据:");} catch (Exception e) {System.out.println(socket.getRemoteSocketAddress()+"关闭");socket.close();dis.close();break;}}} catch (Exception e) {e.printStackTrace();}}
}

客户端

        //创建socker对象,并同时请求与服务器程序的连接Socket socket = new Socket(InetAddress.getLocalHost(),8888);Scanner input = new Scanner(System.in);OutputStream os = socket.getOutputStream();//BufferedOutputStream bos = new BufferedOutputStream(os);//把低级的字节输出流,包装成数据输出流DataOutputStream dos = new DataOutputStream(os);while (true) {//从cocket通信管道中得到一个字节输出流,用来发数据给服务端程序String msg = input.nextLine();if(msg.equals("end")){System.out.println("退出客户端");dos.close();socket.close();break;}dos.writeUTF(msg);dos.flush();System.out.println("写入成功");}

相关文章:

26-网络通信

网络通信 什么是网络编程? 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。 java.net.包下提供了网络编程的解决方案! 基本的通信架构有2种形式:CS架构( Client客户端/Server服…...

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石③

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石③ 第十九章 驱动程序基石③19.5 定时器19.5.1 内核函数19.5.2 定时器时间单位19.5.3 使用定时器处理按键抖动19.5.4 现场编程、上机19.5.5 深入研究:定时器的内部机制19.5.6 深入研究:找到系统滴答 1…...

一文拿捏SpringMVC的调用流程

SpringMVC的调用流程 1.核心元素: DispatcherServlet(前端控制器)HandlerMapping(处理器映射器)HandlerAdapter(处理器适配器) ---> Handler(处理器)ViewResolver(视图解析器 )---> view(视图) 2.调用流程 用户发送请求到前端控制器前端控制器接收用户请求…...

一文详解 JDK1.8 的 Lambda、Stream、LocalDateTime

Lambda Lambda介绍 Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。 Lambda表达式的结构 一个 Lamb…...

WebSocket实战之二协议分析

一、前言 上一篇 WebSocket实战之一 讲了WebSocket一个极简例子和基础的API的介绍,这一篇来分析一下WebSocket的协议,学习网络协议最好的方式就是抓包分析一下什么就都明白了。 二、WebSocket协议 本想盗一张网络图,后来想想不太好&#x…...

LeetCode //C - 208. Implement Trie (Prefix Tree)

208. Implement Trie (Prefix Tree) A trie (pronounced as “try”) or prefix tree is a tree data structure used to efficiently store and retrieve keys in a dataset of strings. There are various applications of this data structure, such as autocomplete and s…...

【Python】time模块和datetime模块的部分函数说明

时间戳与日期 在说到这俩模块之前,首先先明确几个概念: 时间戳是个很单纯的东西,没有“时区”一说,因为时间戳本质上是经过的时间。日常生活中接触到的“日期”、“某点某时某分”准确的说是时间点,都是有时区概念的…...

Python 无废话-基础知识元组Tuple详讲

“元组 Tuple”是一个有序、不可变的序列集合,元组的元素可以包含任意类型的数据,如整数、浮点数、字符串等,用()表示,如下示例: 元组特征 1) 元组中的各个元素,可以具有不相同的数据类型,如 T…...

【Win】Microsoft Spy++学习笔记

参考资料 《用VisualStudio\Spy查窗口句柄,监控窗口消息》 1. 安装 Spy是VS中的工具,所以直接安装VS就可以了; 2. 检查应用程序架构 ChatGPT-Bing: 对于窗口应用程序分析,确定应用程序是32位还是64位是很重要的,因…...

如何解决版本不兼容Jar包冲突问题

如何解决版本不兼容Jar包冲突问题 引言 “老婆”和“妈妈”同时掉进水里,先救谁? 常言道:编码五分钟,解冲突两小时。作为Java开发来说,第一眼见到ClassNotFoundException、 NoSuchMethodException这些异常来说&…...

数据结构—归并排序-C语言实现

引言:归并排序跟快速排序一样,都运用到了分治的算法,但是归并排序是一种稳定的算法,同时也具备高效,其时间复杂度为O(N*logN) 算法图解: 然后开始归并: 就是这个思想,拆成最小子问题…...

Multiple CORS header ‘Access-Control-Allow-Origin‘ not allowed

今天在修改天天生鲜超市项目的时候,因为使用了前后端分离模式,前端通过网关统一转发请求到后端服务,但是第一次使用就遇到了问题,比如跨域问题: 但是,其实网关里是有配置跨域的,只是忘了把前端项…...

msvcp100.dll丢失怎样修复,msvcp100.dll丢失问题全面解析

msvcp100.dll是一个动态链接库文件,属于 Microsoft Visual C Redistributable 的一个组件。它包含了 C 运行时库,这些库在运行程序时会被加载到内存中。msvcp100.dll文件的主要作用是为基于 Visual C 编写的程序提供必要的运行时支持。 当您运行一个基于…...

最新AI智能问答系统源码/AI绘画系统源码/支持GPT联网提问/Prompt应用+支持国内AI提问模型

一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的AI智能问答系统和AI绘画系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图…...

全连接网络实现回归【房价预测的数据】

也是分为data,model,train,test import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optimclass FCNet(nn.Module):def __init__(self):super(FCNet,self).__init__()self.fc1 nn.Linear(331,200)s…...

mysql八股

1、请你说说mysql索引,以及它们的好处和坏处 检索效率、存储资源、索引 索引就像指向表行的指针,是一个允许查询操作快速确定哪些行符合WHERE子句中的条件,并检索到这些行的其他列值的数据结构索引主要有普通索引、唯一索引、主键索引、外键…...

MATLAB算法实战应用案例精讲-【优化算法】狐猴优化器(LO)(附MATLAB代码实现)

代码实现 MATLAB LO.m %======================================================================= % Lemurs Optimizer: A New Metaheuristic Algorithm % for Global Optimization (LO)% This work is published in Journal of "Applied …...

C#WPF动态资源和静态资源应用实例

本文实例演示C#WPF动态资源和静态资源应用 一、资源概述 静态资源(StaticResource)指的是在程序载入内存时对资源的一次性使用,之后就不再访问这个资源了。 动态资源(DynamicResource)指的是在程序运行过程中然会去访问资源。 WPF中,每个界面元素都含有一个名为Resources…...

游戏逆向中的 NoClip 手段和安全应对方式

文章目录 墙壁边界寻找碰撞 NoClip 是一种典型的黑客行为,允许你穿过墙壁,所以 NoClip 又可以认为是避免碰撞体积的行为 墙壁边界 游戏中设置了碰撞体作为墙壁边界,是 玩家对象 和墙壁发生了碰撞,而不是 相机 玩家对象有他的 X…...

nodejs+vue流浪猫狗救助领养elementui

第三章 系统分析 10 3.1需求分析 10 3.2可行性分析 10 3.2.1技术可行性:技术背景 10 3.2.2经济可行性 11 3.2.3操作可行性: 11 3.3性能分析 11 3.4系统操作流程 12 3.4.1管理员登录流程 12 3.4.2信息添加流程 12 3.4.3信息删除流程 13 第四章 系统设计与…...

Css Flex 弹性布局中的换行与溢出处理方法

Css Flex 弹性布局中的换行与溢出处理方法 CSS弹性布局(Flex)是CSS3中的一种新的布局方式,它能够帮助我们更加灵活地布局元素。在Flex弹性布局中,元素的布局仅依赖于父容器的设置,而不再需要复杂的相对或绝对定位。本…...

linux系统与应用

Windows中的硬盘和盘符的关系; 硬盘通常为一块到两块;数量与盘符没有直接关系;一块硬盘可以分为多个盘符,如c,d,e,f,g等;当然理论上也可以一块硬盘只有一个盘符;学习linux时,最好使用固态硬盘&a…...

MySQL的结构化语言 DDL DML DQL DCL

一、SQL结构化语言介绍 数据查询语言DQL:其语句称为“数据检索语言”,用以从库中获取数据,确定数据怎样在应用程序给出,保留select是dql(也是所有sql)用的最多的动词 数据操作语言DML:其语句包括动词insert…...

P5488 差分与前缀和

传送门:洛谷 前题提要:包含了简单的生成函数思想以及多项式乘法,是一道不可多得的多项式好题.故记录一下. 题意:给定一个长为 n 的序列 a,求出其 k 阶差分或前缀和。结果的每一项都需要对 1004535809取模。 对于差分和前缀和我们分开来讨论. 先讨论前缀和部分: …...

uboot启动流程-uboot内存分配

一. uboot启动流程 _main 函数中会调用 board_init_f 函数,本文继续简单分析一下 board_init_f 函数。 具体分析 board_init_f函数的第二部分:内存分配代码。 本文继上一篇文章的学习,地址如下: uboot启动流程-涉及board_init…...

LeetCode 面试题 08.02. 迷路的机器人

文章目录 一、题目二、C# 题解 一、题目 设想有个机器人坐在一个网格的左上角,网格 r 行 c 列。机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍物)。设计一种算法,寻找机器人从左上角移动到右下角的路径…...

画CMB天图使用Planck配色方案

使用Planck的配色方案: 全天图: 或者方形图: 使用下面设置即可: import pspy, pixell from pspy.so_config import DEFAULT_DATA_DIR pixell.colorize.mpl_setdefault("planck")此方法不会改变matplotlib默认配色方案…...

成都瀚网科技有限公司:抖店精选联盟怎么用?

抖音精选联盟是抖音电商平台提供的一项服务,旨在为商家提供更多的推广机会和销售渠道。然而,很多人对于如何使用抖店精选联盟以及如何开通这项服务不太了解。本文将为您详细介绍抖店精选联盟的使用和激活流程。 第一节:如何使用抖店精选联盟 …...

第二章:最新版零基础学习 PYTHON 教程(第五节 - Python 输入/输出–如何在Python中打印而不换行?)

一般来说,从 C/C++ 切换到 Python 的人想知道如何在 python 中打印两个或多个变量或语句而不进入新行。由于Python print() 函数默认以换行符结尾。Python 有一个预定义的格式,如果你使用 print(a_variable) 那么它会自动转到下一行。 例子: # 输入:[csdn, csdnforcsdn] …...

C++实现集群聊天服务器

C实现集群聊天服务器 JSON Json是一种轻量级的数据交换模式(也叫做数据序列化方式)。Json采用完全独立于编程语言的文本格式来存储和表示数据。见解和清晰的层次结构使得Json称为理想的数据交换语言。易于阅读和编写。同时也易于支持机器解析和生成&am…...

wordpress手机适应/今日新闻7月1日

JavaFX2的ListView中的多选没有提供鼠标拖动选择的功能,同时按下Ctrl和Shift后连续的区间选中也不支持,以下代码用于处理这两个问题,细节见代码注释: import com.sun.javafx.scene.control.skin.ListViewSkin; import com.sun.jav…...

株洲网站建设/淘宝数据分析工具

首先引用ICSharpCode.SharpZipLib.dll,没有在这里下载:http://files.cnblogs.com/KenBlove/ICSharpCode.SharpZipLib.rar 压缩打包代码 /// <summary>/// 生成压缩文件/// </summary>/// <param name"strZipPath">生成的zip文件的路径</param&g…...

景安网站备案幕布/关键词搜索工具爱站网

绘画 | 琪琪作者 | xiaoyu来源 | Python数据科学&#xff08;ID:PyDataScience&#xff09;要说目前什么语言最受欢迎&#xff0c;我想Python肯定是其中之一了吧。Python语言以其简单的操作、强大的功能被广大爱好者追逐着。有的朋友刚开始学Python&#xff0c;有的朋友正在学习…...

除了wordpress还有什么非php/市场调研数据网站

java 实现网易云音乐下载和播放发布时间&#xff1a;2018-08-27 16:49,浏览次数&#xff1a;872, 标签&#xff1a;java不废话 直接上代码首先 是下载工具类 根据url 下载文件import java.io.BufferedInputStream; import java.io.BufferedReader; importjava.io.DataOutputSt…...

wordpress内网访问不了/怎么进行网络营销

1&#xff0c;迪杰斯特拉算法介绍迪杰斯特拉算法是典型最短路径算法&#xff0c;用于计算图或网中某个特定顶点到其他所有顶点的最短路径。主要特点是以起始点为中心向外&#xff0c;层层扩展&#xff0c;直到扩展覆盖所有顶点。2&#xff0c;迪杰斯特拉算法思想设G(V,E)为一个…...

郑州做设计公司网站/腾讯企点客服

本文参考数据挖掘与R第二章节 读入数据 方法1&#xff0c;下载Data mining with r的配套包 install.packages(DMwR) 方法2&#xff0c;下载txt数据&#xff0c;并且读入数据。方法见上文。 Summary()#的到数据的摘要&#xff0c;概括。&#xff08;包括最大&#xff0c;小值&…...