0基础学java-day21(网络编程)

一、网络的相关概念

1 网络通信

网络 

ip 地址 

4.ipv4 地址分类 

 5.域名

 

网络通信协议 

 

7.网络通信协议 

8.TCP UDP 

 二、InetAddress 类 &Socket

 1 相关方法

package com.hspedu.api;import java.net.InetAddress;
import java.net.UnknownHostException;/*** @author 林然* @version 1.0* 演示INetAddress类的使用*/
public class API_ {public static void main(String[] args) throws UnknownHostException {//获取本机的INetAddress对象InetAddress inetAddress =InetAddress.getLocalHost();System.out.println(inetAddress);//根据指定的主机名获取 INetAddress对象InetAddress host = InetAddress.getByName("Admin-Lin-Ran");System.out.println(host);//根据一个域名返回InetAddress对象InetAddress host2 =InetAddress.getByName("www.baidu.com");System.out.println(host2);//通过InetAdress对象,获取对应的地址String hostAddress =host2.getHostAddress();//System.out.println(hostAddress);//通过InetAdress对象,获取对应的主机名或者域名String hostName =host2.getHostName();//System.out.println(hostName);}
}

 2 Socket

2.1 基本介绍

 2.2 示意图

三、TCP 网络通信编程 

1.基本介绍

2 应用案例 1(使用字节流) 

 【SreeverSocket对应多个socket】

【Sever】

package com.hspedu.socket;import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;/*** @author 林然* @version 1.0* 服务端*/
public class SocketTCP01Server {public static void main(String[] args) throws IOException {//思路//1. 在本机 的 9999 端口监听, 等待连接// 细节: 要求在本机没有其它服务在监听 9999// 细节:这个 ServerSocket 可以通过 accept() 返回多个 Socket[多个客户端连接服务器的并发]ServerSocket serverSocket = new ServerSocket(9999);System.out.println("服务端,在 9999 端口监听,等待连接..");//2. 当没有客户端连接 9999 端口时,程序会 阻塞, 等待连接// 如果有客户端连接,则会返回 Socket 对象,程序继续Socket socket=serverSocket.accept();System.out.println("服务端 socket =" + socket.getClass());//3. 通过 socket.getInputStream() 读取客户端写入到数据通道的数据, 显示InputStream inputStream = socket.getInputStream();//4. IO 读取byte[] buf = new byte[1024];int readLen = 0;while((readLen=inputStream.read(buf))!=-1){System.out.println(new String(buf,0,readLen));//根据读取到的实际长度,显示内容}//5.关闭流和 socketinputStream.close();socket.close();serverSocket.close();}
}

【Client】

package com.hspedu.socket;import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;/*** @author 林然* @version 1.0* 客户端* 发送hello server给服务端*/
public class SocketTCP01Client {public static void main(String[] args) throws IOException {//思路//1. 连接服务端 (ip , 端口)//解读: 连接本机的 9999 端口, 如果连接成功,返回 Socket 对象Socket socket = new Socket(InetAddress.getLocalHost(),9999);System.out.println("客户端 socket 返回=" + socket.getClass());//2. 连接上后,生成 Socket, 通过 socket.getOutputStream()// 得到 和 socket 对象关联的输出流对象OutputStream outputStream = socket.getOutputStream();//3. 通过输出流,写入数据到 数据通道outputStream.write("hello,server".getBytes());//关闭流对象和socketoutputStream.close();socket.close();}
}

3.应用案例 2(使用字节流)

【服务器端】

package com.hspedu.socket;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;/*** @author 林然* @version 1.0* 服务端*/
public class SocketTCP02Server {public static void main(String[] args) throws IOException {//思路//1. 在本机 的 9999 端口监听, 等待连接// 细节: 要求在本机没有其它服务在监听 9999// 细节:这个 ServerSocket 可以通过 accept() 返回多个 Socket[多个客户端连接服务器的并发]ServerSocket serverSocket = new ServerSocket(9999);System.out.println("服务端,在 9999 端口监听,等待连接..");//2. 当没有客户端连接 9999 端口时,程序会 阻塞, 等待连接// 如果有客户端连接,则会返回 Socket 对象,程序继续Socket socket=serverSocket.accept();System.out.println("服务端 socket =" + socket.getClass());//3. 通过 socket.getInputStream() 读取客户端写入到数据通道的数据, 显示InputStream inputStream = socket.getInputStream();//4. IO 读取byte[] buf = new byte[1024];int readLen = 0;while((readLen=inputStream.read(buf))!=-1){System.out.println(new String(buf,0,readLen));//根据读取到的实际长度,显示内容}// 设置结束标记socket.shutdownInput();OutputStream outputStream = socket.getOutputStream();String str ="hello,client";outputStream.write(str.getBytes());// 设置结束标记socket.shutdownOutput();//5.关闭流和 socketoutputStream.close();inputStream.close();socket.close();serverSocket.close();}
}

 【客户端】

package com.hspedu.socket;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;/*** @author 林然* @version 1.0* 客户端,发送 "hello, server" 给服务端*/
public class SocketTCP02Client {public static void main(String[] args) throws IOException {//思路//1. 连接服务端 (ip , 端口)//解读: 连接本机的 9999 端口, 如果连接成功,返回 Socket 对象Socket socket = new Socket(InetAddress.getLocalHost(),9999);System.out.println("客户端 socket 返回=" + socket.getClass());//2. 连接上后,生成 Socket, 通过 socket.getOutputStream()// 得到 和 socket 对象关联的输出流对象OutputStream outputStream = socket.getOutputStream();//3. 通过输出流,写入数据到 数据通道outputStream.write("hello,server".getBytes());// 设置结束标记socket.shutdownOutput();InputStream inputStream = socket.getInputStream();byte [] buf =new byte[1024];int readl=0;while ((readl=inputStream.read(buf))!=-1){System.out.println(new String(buf,0,readl));}// 设置结束标记socket.shutdownInput();//关闭流对象和socketinputStream.close();outputStream.close();socket.close();}
}

4.应用案例 3(使用字符流)

【Sever】

package com.hspedu.socket;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;/*** @author 林然* @version 1.0*/
public class SocketTCP03Server {public static void main(String[] args) throws IOException {//思路//1. 在本机 的 9999 端口监听, 等待连接// 细节: 要求在本机没有其它服务在监听 9999// 细节:这个 ServerSocket 可以通过 accept() 返回多个 Socket[多个客户端连接服务器的并发]ServerSocket serverSocket = new ServerSocket(9999);System.out.println("服务端,在 9999 端口监听,等待连接..");//2. 当没有客户端连接 9999 端口时,程序会 阻塞, 等待连接// 如果有客户端连接,则会返回 Socket 对象,程序继续Socket socket=serverSocket.accept();System.out.println("服务端 socket =" + socket.getClass());//3. 通过 socket.getInputStream() 读取客户端写入到数据通道的数据, 显示InputStream inputStream = socket.getInputStream();BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream));//4. IO 读取,使用字符流String str1=bufferedReader.readLine();System.out.println(str1);// 设置结束标记OutputStream outputStream = socket.getOutputStream();BufferedWriter bufferedWriter =new BufferedWriter(new OutputStreamWriter(outputStream));String str ="hello,client";bufferedWriter.write(str);// 设置结束标记bufferedWriter.newLine();bufferedWriter.flush();//5.关闭流和 socketbufferedReader.close();bufferedWriter.close();socket.close();serverSocket.close();}
}

 【client】

package com.hspedu.socket;import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;/*** @author 林然* @version 1.0*/
public class SocketTCP03Client {public static void main(String[] args) throws IOException {//思路//1. 连接服务端 (ip , 端口)//解读: 连接本机的 9999 端口, 如果连接成功,返回 Socket 对象Socket socket = new Socket(InetAddress.getLocalHost(),9999);System.out.println("客户端 socket 返回=" + socket.getClass());//2. 连接上后,生成 Socket, 通过 socket.getOutputStream()// 得到 和 socket 对象关联的输出流对象OutputStream outputStream = socket.getOutputStream();//3. 通过输出流,写入数据到 数据通道,要求使用字符流BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));bufferedWriter.write("hello,server 字符流");bufferedWriter.newLine();//插入一个换行符,表示输入结束,注意要求对方用realLine()!!!//如果使用的字符流,需要手动刷新,否则数据不会写入数据通道bufferedWriter.flush();InputStream inputStream = socket.getInputStream();BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));String str =bufferedReader.readLine();System.out.println(str);// 设置结束标记//关闭流对象和socketbufferedReader.close();bufferedWriter.close();socket.close();}
}

5.应用案例 4【传送文件】

 【StreamUtils】

package com.hspedu.upload;import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;/*** 此类用于演示关于流的读写方法**/
public class StreamUtils {/*** 功能:将输入流转换成byte[], 即可以把文件的内容读入到byte[]* @param is* @return* @throws Exception*/public static byte[] streamToByteArray(InputStream is) throws Exception{ByteArrayOutputStream bos = new ByteArrayOutputStream();//创建输出流对象byte[] b = new byte[1024];//字节数组int len;while((len=is.read(b))!=-1){//循环读取bos.write(b, 0, len);//把读取到的数据,写入bos	}byte[] array = bos.toByteArray();//然后将bos 转成字节数组bos.close();return array;}/*** 功能:将InputStream转换成String* @param is* @return* @throws Exception*/public static String streamToString(InputStream is) throws Exception{BufferedReader reader = new BufferedReader(new InputStreamReader(is));StringBuilder builder= new StringBuilder();String line;while((line=reader.readLine())!=null){builder.append(line+"\r\n");}return builder.toString();}}

【服务端】

package com.hspedu.upload;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;/*** @author 林然* @version 1.0* 文件上传的服务器*/
public class TCPFileUploadServer {public static void main(String[] args) throws Exception {//1.服务端在本机监听8888端口ServerSocket serverSocket = new ServerSocket(8888);System.out.println("服务端在8888端口监听");//2等待连接Socket socket = serverSocket.accept();//3 读取客户端发送的数据//通过Socket得到输入流InputStream inputStream =socket.getInputStream();BufferedInputStream bufferedInputStream =new BufferedInputStream(inputStream);byte[] bytes =StreamUtils.streamToByteArray(bufferedInputStream);BufferedOutputStream bufferedOutputStream =new BufferedOutputStream(new FileOutputStream("src\\jmq.jpg"));bufferedOutputStream.write(bytes);bufferedOutputStream.close();//向客户端回复收到图片//通过socket获取到输出流[字符]BufferedWriter bufferedWriter =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bufferedWriter.write("服务端收到图片");bufferedWriter.flush();//把内容刷新//设置结束标记socket.shutdownOutput();//关闭其他资源bufferedWriter.close();bufferedInputStream.close();socket.close();serverSocket.close();}
}

【客户端】

package com.hspedu.upload;import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;/*** @author 林然* @version 1.0* 文件上传的客户端*/
public class TCPFileUploadClient {public static void main(String[] args) throws Exception {//客户端连接服务端 8888端口得到Socket对象Socket socket=new Socket(InetAddress.getLocalHost(),8888);//创建读取磁盘文件的输入流String filePath="e:\\jmq.jpg";BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(filePath));//bytes就是filePath对应的字节数组byte[] bytes= StreamUtils.streamToByteArray(bufferedInputStream);//通过Socket获取到输出流,将bytes数据发送给服务端OutputStream outputStream =socket.getOutputStream();BufferedOutputStream bufferedOutputStream =new BufferedOutputStream(outputStream);bufferedOutputStream.write(bytes);//将文件写入到数据通道//关闭流bufferedInputStream.close();socket.shutdownOutput();//设置一个结束的标志//接收服务端的信息InputStream inputStream=socket.getInputStream();String message=StreamUtils.streamToString(inputStream);System.out.println(message);socket.shutdownInput();//关闭相关流inputStream.close();bufferedOutputStream.close();socket.close();}
}

6.netstat 指令

7.TCP 网络通讯不为人知的秘密 

四、UDP 网络通信编程[了解] 

1 基本介绍

2 基本流程 

 3.应用案例

A端口

package com.hspedu.udp;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;/*** @author 林然* @version 1.0* UDP 接收端*/
public class UDPReceiverA {public static void main(String[] args) throws IOException {//1.创建一个DatagramSocket 对象,准备接受数据DatagramSocket datagramSocket = new DatagramSocket(9999);//2.构建一个DatagramPacket准备接受数据//udp一个数据包大小限制在64K,不适用传递大量数据byte [] buf =new byte[64*1024];DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length);//3.调用接收方法//填充到packet对象//提示: 当有数据包发送到 本机的 9999 端口时,就会接收到数据// 如果没有数据包发送到 本机的 9999 端口, 就会阻塞等待System.out.println("接收端 A 等待接收数据..");datagramSocket.receive(datagramPacket);//4 拆包int length= datagramPacket.getLength();//实际接收到的数据字节长度byte [] data =datagramPacket.getData();String s = new String(data, 0, length);System.out.println(s);String message="好的,收到";DatagramPacket datagramPacket1 =new DatagramPacket(message.getBytes(),message.getBytes().length, InetAddress.getLocalHost(),9998);datagramSocket.send(datagramPacket1);//关闭datagramSocket.close();System.out.println("A端退出");}
}

 B端口

package com.hspedu.udp;import java.io.IOException;
import java.net.*;/*** @author 林然* @version 1.0* 发送端 B ====> 也可以接收数据*/
public class UDPSenderB {public static void main(String[] args) throws IOException {//1.创建 DatagramSocket 对象,准备在 9998 端口 接收数据DatagramSocket datagramSocket =new DatagramSocket(9998);//2 将需要发送的数据封装到Datagrampacket对象byte[] bytes = "hello,明天吃火锅".getBytes();//说明: 封装的 DatagramPacket 对象 bytes 内容字节数组 , bytes.length , 主机(IP) , 端口DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, InetAddress.getLocalHost(), 9999);datagramSocket.send(datagramPacket);//3.=== 接收从 A 端回复的信息
//(1) 构建一个 DatagramPacket 对象,准备接收数据// 在前面讲解 UDP 协议时,老师说过一个数据包最大 64kbyte [] buf=new byte[1024*64];DatagramPacket datagramPacket1=new DatagramPacket(buf,buf.length);// 如果没有数据包发送到 本机的 9998 端口, 就会阻塞等待.datagramSocket.receive(datagramPacket1);int length =datagramPacket1.getLength();byte [] data=datagramPacket1.getData();System.out.println(new String(data,0,length));//关闭资源datagramSocket.close();System.out.println("B端退出");}
}

五、本章作业

1.作业一 

【服务端】

package com.hspedu.homework;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;/*** @author 林然* @version 1.0*/
public class homework01_service {public static void main(String[] args) throws IOException {ServerSocket serverSocket =new ServerSocket(9999);System.out.println("服务器端口等待连接");Socket socket =serverSocket.accept();//接受数据InputStream inputStream =socket.getInputStream();BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream));String str=bufferedReader.readLine();System.out.println(str);String message="";if(str.equals("name")){message="Linran";}else if(str.equals("hobby")){message="java编程";}else {message="你说啥呢";}OutputStream outputStream=socket.getOutputStream();BufferedWriter bufferedWriter =new BufferedWriter(new OutputStreamWriter(outputStream));bufferedWriter.write(message,0,message.length());bufferedWriter.flush();socket.shutdownOutput();//关闭流bufferedWriter.close();bufferedReader.close();socket.close();serverSocket.close();}
}

 【客户端】

package com.hspedu.homework;import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;/*** @author 林然* @version 1.0*/
public class homework01_client {public static void main(String[] args) throws IOException {//建立连接Socket socket=new Socket(InetAddress.getLocalHost(),9999);Scanner scanner=new Scanner(System.in);//用户输入String message =scanner.next();//获取输出流OutputStream outputStream =socket.getOutputStream();BufferedWriter bufferedWriter =new BufferedWriter(new OutputStreamWriter(outputStream));bufferedWriter.write(message,0,message.length());bufferedWriter.flush();socket.shutdownOutput();//发送等待回复InputStream inputStream =socket.getInputStream();BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream));String data =bufferedReader.readLine();System.out.println(data);//关闭流bufferedReader.close();bufferedWriter.close();socket.close();}
}

2.作业二

【接收端】

package com.hspedu.homework;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;/*** @author 林然* @version 1.0*/
public class homework02_A_receive {public static void main(String[] args) throws IOException {DatagramSocket datagramSocket =new DatagramSocket(9999);byte [] buf =new byte[1024*64];DatagramPacket datagramPacket=new DatagramPacket(buf,buf.length);System.out.println("等待;连接");datagramSocket.receive(datagramPacket);int length =datagramPacket.getLength();byte [] data =datagramPacket.getData();String message =new String(data,0,length);//注意这里第三个参数不要用data.lengthSystem.out.println(message);String answer =" ";if("四大名著是哪些".equals(message)){answer="四大名著是<红楼梦>........";}else {answer="What?";}System.out.println(answer);DatagramPacket datagramPacket1 =new DatagramPacket(answer.getBytes(),answer.getBytes().length, InetAddress.getLocalHost(),9998);datagramSocket.send(datagramPacket1);//关闭流datagramSocket.close();}
}

 【发送端】

package com.hspedu.homework;import java.io.IOException;
import java.net.*;
import java.util.Scanner;/*** @author 林然* @version 1.0*/
public class homework02_B_send {public static void main(String[] args) throws IOException {//建立我方监听端口DatagramSocket datagramSocket =new DatagramSocket(9998);//等待用户输入Scanner scanner =new Scanner(System.in);String message=scanner.next();//封装DatagramPacket datagramPacket =new DatagramPacket(message.getBytes(),message.getBytes().length, InetAddress.getLocalHost(),9999);//发送datagramSocket.send(datagramPacket);//获取回复信息byte [] buf =new byte[1024*64];DatagramPacket datagramPacket1 =new DatagramPacket(buf,buf.length);datagramSocket.receive(datagramPacket1);int length =datagramPacket1.getLength();byte [] data =datagramPacket1.getData();String answer =new String(data,0,length);System.out.println(answer);//关闭流datagramSocket.close();}
}

3.作业三

【服务器端】

package com.hspedu.homework;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;/*** @author 林然* @version 1.0*/
public class homework03_server {public static void main(String[] args) throws Exception {ServerSocket serverSocket=new ServerSocket(9999);System.out.println("等待连接");Socket socket =serverSocket.accept();//获取数据InputStream inputStream =socket.getInputStream();//利用工具类String filename=StreamUtils.streamToString(inputStream);System.out.println("客户希望下载的文件名"+filename);//判断是否存在String filename1="src\\"+filename;File file =new File(filename1);System.out.println("客户希望下载的文件名"+filename1);String send_filepath =filename1;if(!file.exists()){send_filepath="src\\无名.mp3";}BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream(send_filepath));//利用工具类byte [] bytes=StreamUtils.streamToByteArray(bufferedInputStream);//输出BufferedOutputStream bufferedOutputStream =new BufferedOutputStream(socket.getOutputStream());bufferedOutputStream.write(bytes);bufferedOutputStream.flush();socket.shutdownOutput();//关闭流bufferedOutputStream.close();bufferedInputStream.close();socket.close();serverSocket.close();}
}

【客户端】

package com.hspedu.homework;import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;/*** @author 林然* @version 1.0*/
public class homework03_client {public static void main(String[] args) throws Exception {Scanner scanner =new Scanner(System.in);//用户输入System.out.println("请输入你要查找的文件名");String filename=scanner.next();//建立连接Socket socket =new Socket(InetAddress.getLocalHost(),9999);OutputStream outputStream =socket.getOutputStream();BufferedWriter bufferedWriter =new BufferedWriter(new OutputStreamWriter(outputStream));//写入bufferedWriter.write(filename);bufferedWriter.flush();socket.shutdownOutput();//获取回复InputStream inputStream =socket.getInputStream();BufferedInputStream bufferedInputStream =new BufferedInputStream(inputStream);byte [] data =StreamUtils.streamToByteArray(bufferedInputStream);String dest_path ="e:\\"+filename;File file =new File(dest_path);BufferedOutputStream bufferedOutputStream =new BufferedOutputStream(new FileOutputStream(file));bufferedOutputStream.write(data);bufferedOutputStream.flush();//关闭流bufferedOutputStream.close();bufferedInputStream.close();bufferedWriter.close();socket.close();}
}

【工具类】

package com.hspedu.homework;import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;/*** 此类用于演示关于流的读写方法**/
public class StreamUtils {/*** 功能:将输入流转换成byte[], 即可以把文件的内容读入到byte[]* @param is* @return* @throws Exception*/public static byte[] streamToByteArray(InputStream is) throws Exception{ByteArrayOutputStream bos = new ByteArrayOutputStream();//创建输出流对象byte[] b = new byte[1024];//字节数组int len;while((len=is.read(b))!=-1){//循环读取bos.write(b, 0, len);//把读取到的数据,写入bos	}byte[] array = bos.toByteArray();//然后将bos 转成字节数组bos.close();return array;}/*** 功能:将InputStream转换成String* @param is* @return* @throws Exception*/public static String streamToString(InputStream is) throws Exception{BufferedReader reader = new BufferedReader(new InputStreamReader(is));StringBuilder builder= new StringBuilder();String line;while((line=reader.readLine())!=null){builder.append(line+"\r\n");}return builder.toString();}}

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

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

相关文章

Azure Machine Learning - 提示工程高级技术

本指南将指导你提示设计和提示工程方面的一些高级技术。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#xff0c;阿里云认证的资深架构师&#xff0c…

分布式链路追踪 —— 基于Dubbo的traceId追踪传递

文章目录 **原文链接&#xff0c;点击跳转**RpcContext 上下文对象Dubbo 过滤器&#xff08;Filter&#xff09;对象基于Dubbo的traceId追踪传递实现 原文链接&#xff0c;点击跳转 RpcContext 上下文对象 在实现 Dubbo 调用之间的链路跟踪之前&#xff0c;先简单了解 RpcCon…

【开源项目】WPF 扩展 -- 多画面视频渲染组件

目录 1、项目介绍 2、组件集成 2.1 下载地址 2.2 添加依赖 3、使用示例 3.1 启动动画 3.2 视频渲染 3.3 效果展示 4、项目地址 1、项目介绍 Com.Gitusme.Net.Extensiones.Wpf 是一款 Wpf 扩展组件。基于.Net Core 3.1 开发&#xff0c;当前是第一个发布版本 1.0.0&am…

node.js mongoose

目录 官方文档 mongoose Schema Model Query document 关系 官方文档 Mongoose v8.0.3: Getting Started mongoose Mongoose 是一个 Node.js 环境下 MongoDB 的对象建模工具。它提供了一种在应用程序中与 MongoDB 数据库进行交互的方式&#xff0c;使得开发者能够使用…

超结MOS/低压MOS在5G基站电源上的应用-REASUNOS瑞森半导体

一、前言 5G基站是5G网络的核心设备&#xff0c;实现有线通信网络与无线终端之间的无线信号传输&#xff0c;5G基站主要分为宏基站和小基站。5G基站由于通信设备功耗大&#xff0c;采用由电源插座、交直流配电、防雷器、整流模块和监控模块组成的电气柜。所以顾名思义&#xf…

石器时代H5小游戏架设教程

本文讲解石器时代 H5 之恐龙宝贝架设教程&#xff0c;想研究 H5 游戏如何实现&#xff0c;那请跟着此次教程学习在拥有小游戏源码的情况下该如何搭建起来 开始架设 1. 架设条件 石器时代架设需要准备&#xff1a; 一台linux 服务器&#xff0c;建议 CentOs 7.6 版本&#xf…

【ranger】CDP环境 更新 ranger 权限策略会发生低概率丢失权限策略的解决方法

一、问题描述&#xff1a; 我们的 kafka 服务在更新&#xff08;添加&#xff09; ranger 权限时&#xff0c;会有极低的概率导致 MM2 同步服务报错&#xff0c;报错内容 Not Authorized。但是查看 ranger 权限是赋予的&#xff0c;并且很早配置的权限策略也会报错。 相关组件…

JDK bug:ciObjectFactory::create_new_metadata:原因完全解析

文章目录 1、问题2.详细日志2.关键日志3.结论4.JDK&#xff1a;bug最终bug链接&#xff1a; 京东遇到过类似bug各位大佬如果有更详细的解答可以留言。 1、问题 服务不通&#xff0c;接口404&#xff0c;查看日志有一下截图&#xff0c;还有一个更详细的日志 2.详细日志 # #…

RPC(3):HttpClient实现RPC之GET请求

1HttpClient简介 在JDK中java.net包下提供了用户HTTP访问的基本功能&#xff0c;但是它缺少灵活性或许多应用所需要的功能。 HttpClient起初是Apache Jakarta Common 的子项目。用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包&#xff0c;并且它支持 H…

文件操作入门指南

目录 一、为什么使用文件 二、什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 三、文件的打开和关闭 3.1 文件指针 3.2 文件的打开和关闭 四、文件的顺序读写 ​编辑 &#x1f33b;深入理解 “流”&#xff1a; &#x1f342;文件的顺序读写函数介绍&#xff1a; …

VM安装Sonoma【笔记】

VMware Workstation安装MacOS Sonoma 1、配置虚拟机&#xff0c;根据系统性能调整参数&#xff1b; 2、先不焦急启动虚拟机&#xff0c;打开虚拟机存储目录&#xff0c;以文本方式打开.vmx文件&#xff08;这里以Sonoma.vmx为例&#xff09;&#xff1b; 这里只针对Inter CP…

Ansible自动化运维以及模块使用

ansible的作用 远程操作主机功能 自动化运维(playbook剧本基于yaml格式书写) ansible是基于python开发的配置管理和应用部署工具。在自动化运维中&#xff0c;现在是异军突起 ansible能够批量配置、部署、管理上千台主机。类似于Xshell的一键输入工具。不需要每次都切换主机…

监控k8s controller和scheduler,创建serviceMonitor以及Rules

目录 一、修改kube-controller和kube-schduler的yaml文件 二、创建service、endpoint、serviceMonitor 三、Prometheus验证 四、创建PrometheusRule资源 五、Prometheus验证 直接上干货 一、修改kube-controller和kube-schduler的yaml文件 注意&#xff1a;修改时要一个节…

MATLAB - 最优控制(Optimal Control)

系列文章目录 前言 - 什么是最优控制&#xff1f; 最优控制是动态系统满足设计目标的条件。最优控制是通过执行以下定义的最优性标准的控制律来实现的。一些广泛使用的最优控制方法有&#xff1a; 线性二次调节器 (LQR)/线性二次高斯 (LQG) 控制 模型预测控制 强化学习 极值…

K8s攻击案例:RBAC配置不当导致集群接管

01、概述 Service Account本质是服务账号&#xff0c;是Pod连接K8s集群的凭证。在默认情况下&#xff0c;系统会为创建的Pod提供一个默认的Service Account&#xff0c;用户也可以自定义Service Account&#xff0c;与Service Account关联的凭证会自动挂载到Pod的文件系统中。 …

Golang(壹)

爱情不需要华丽的言语&#xff0c;只需要默默的行动。 简介 应用领域&#xff1a; 下载vscode 使用vscode Go下载 - Go语言中文网 - Golang中文社区 下载sdk 解压到文件中&#xff0c;打开sdk解压文件 穿插dos操作系统知识点&#xff1a; 测试go语言环境 看到vscode 的目录结…

urllib2 HTTP头部注入

文章目录 注入原理例题 [SWPU 2016]web7 注入原理 参考文章 应用场景是具有SSRF漏洞&#xff0c;结合CRLF注入 我们以redis数据库为例&#xff0c;当存在SSRF时我们伪造以下请求 http://127.0.0.1%0d%0aCONFIG%20SET%20dir%20%2ftmp%0d%0aCONFIG%20SET%20dbfilename%20evil%…

ABAP与HANA集成 2:ABAP调用HANA存储过程或SQL语句

作者 idan lian 如需转载备注出处 需求 虽然是做BW模块&#xff0c;但是最近项目上种种&#xff0c;都需要给ABAP人员或者前台用户提供能供他们使用的表&#xff0c;就稍微研究了下ABAP和HANA的集成问题&#xff0c;因为我们BW更擅长的还是HANA&#xff0c;而且HANA的运行效…

C++学习笔记(十二)------is_a关系(继承关系)

你好&#xff0c;这里是争做图书馆扫地僧的小白。 个人主页&#xff1a;争做图书馆扫地僧的小白_-CSDN博客 目标&#xff1a;希望通过学习技术&#xff0c;期待着改变世界。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 文章目录 前言 一、继承关系…

元宇宙3d展厅全景导览系统为现代展会的举办带来了全新的可能性和机遇。

3D元宇宙展会搭建平台的亮点 随着科技的不断进步&#xff0c;3D元宇宙展会搭建平台已经成为了现代展会的新趋势。这种全新的展会形式不仅给人们带来了前所未有的视觉体验&#xff0c;还具备许多亮点和优势&#xff0c;让展会的举办更加高效、便捷和创新。 一、突破时空限制 3D元…