网络编程_TCP通信综合练习:

1

image.png

//client::
public class Client {public static void main(String[] args) throws IOException {//多次发送数据//创建socket对象,填写服务器的ip以及端口Socket s=new Socket("127.0.0.1",10000);//获取输出流OutputStream op = s.getOutputStream();//因为要不断发送数据,所以可以使用Sacnner录入数据,结合循环将数据发出去Scanner sc=new Scanner(System.in);while (true) {//键盘录入System.out.println("请输入一个数据");String str = sc.next();//如果输入886就退出发送if ("886".equals(str)){break;}op.write(str.getBytes());}//关流s.close();}
}
//Server:
public class Server {public static void main(String[] args) throws IOException {//不断接收//创建ServerSocket对象ServerSocket ss = new ServerSocket(10000);//等待客户端来连接Socket socket = ss.accept();//创建一个输入流对象InputStream is = socket.getInputStream();//转换流:字节转字符InputStreamReader isr = new InputStreamReader(is);int b;while ((b = isr.read()) != -1) {System.out.print((char) b);}//关流socket.close();//关闭通道ss.close();//关闭服务器}
}

先启动服务器,再启动客户端
控制台:
image.pngimage.png

2

image.png

//client
public class Client {public static void main(String[] args) throws IOException {//客户端:发送一条数据,接收服务端反馈的消息并打印//服务器:接收数据并打印,再给客户端反馈消息//1.创建Socket对象并连接服务端Socket socket = new Socket("127.0.0.1",10000);//2.写出数据String str = "见到你很高兴!";OutputStream os = socket.getOutputStream();os.write(str.getBytes());//写出一个结束标记,(结束输出流)socket.shutdownOutput();//3.接收服务端回写的数据InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is);int b;while ((b = isr.read()) != -1){System.out.print((char)b);}//释放资源socket.close();}
}//Server
public class Server {public static void main(String[] args) throws IOException {//客户端:发送一条数据,接收服务端反馈的消息并打印//服务器:接收数据并打印,再给客户端反馈消息//1.创建对象并绑定10000端口ServerSocket ss = new ServerSocket(10000);//2.等待客户端连接Socket socket = ss.accept();//3.socket中获取输入流读取数据InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is);int b;//细节://read方法会从连接通道中读取数据//但是,需要有一个结束标记,此处的循环才会停止//否则,程序就会一直停在read方法这里,等待读取下面的数据while ((b = isr.read()) != -1){System.out.println((char)b);}//4.回写数据String str = "到底有多开心?";OutputStream os = socket.getOutputStream();os.write(str.getBytes());//释放资源socket.close();ss.close();}
}

image.pngimage.png

3

image.png
下面的例子是传输图片,所以使用字节流

//Client
public class Client {public static void main(String[] args) throws IOException {//创建Socket对象连接服务器Socket s = new Socket("127.0.0.1", 10000);//读取图片文件:使用字节流//图片较大:使用缓冲流BufferedInputStream bis = new BufferedInputStream(new FileInputStream("..\\netcode\\clientdir\\a.jpg"));//在通道中获取字节流,输入数据到服务端BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());//边读边写byte[] bytes = new byte[1024];int len;while ((len = bis.read(bytes)) != -1) {bos.write(bytes, 0, len);}bos.flush();//结束标识s.shutdownOutput();//接受服务端回馈:字节流-->字符流---->缓冲流BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));int b;while((b=br.read())!=-1){System.out.print((char) b);}//关流s.close();}
}//server
public class Server {public static void main(String[] args) throws IOException {//创建ServerSocket对象ServerSocket ss = new ServerSocket(10000);//等待客户端连接Socket socket = ss.accept();//获取通道中传来的数据//字节流读取字节//缓冲流提升效率BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());//输出到本地BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("..\\netcode\\serverdir\\a.jpg"));byte[] bytes = new byte[1024];int len;while ((len = bis.read(bytes)) != -1) {bos.write(bytes, 0, len);}bos.flush();//返回信息:字节流-->字符流---->缓冲流BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bw.write("上传成功");bw.newLine();bw.flush();//关流socket.close();ss.close();}}

image.pngimage.png

4.

image.png

//client
public class Client {public static void main(String[] args) throws IOException {//创建Socket对象连接服务器Socket s = new Socket("127.0.0.1", 10000);//读取图片文件:使用字节流//图片较大:使用缓冲流BufferedInputStream bis = new BufferedInputStream(new FileInputStream("..\\netcode\\clientdir\\a.jpg"));//在通道中获取字节流,输入数据到服务端BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());//边读边写byte[] bytes = new byte[1024];int len;while ((len = bis.read(bytes)) != -1) {bos.write(bytes, 0, len);}bos.flush();//结束标识s.shutdownOutput();//接受服务端回馈:字节流-->字符流---->缓冲流BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));int b;while((b=br.read())!=-1){System.out.print((char) b);}//关流s.close();}
}//Server
public class Server {public static void main(String[] args) throws IOException {//创建ServerSocket对象ServerSocket ss = new ServerSocket(10000);//等待客户端连接Socket socket = ss.accept();//获取通道中传来的数据//字节流读取字节//缓冲流提升效率BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());//随机uuid、String str = UUID.randomUUID().toString().replace("-", "");//输出到本地BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("..\\netcode\\serverdir\\" + str + ".jpg"));byte[] bytes = new byte[1024];int len;while ((len = bis.read(bytes)) != -1) {bos.write(bytes, 0, len);}bos.flush();//返回信息:字节流-->字符流---->缓冲流BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bw.write("上传成功");bw.newLine();bw.flush();//关流socket.close();ss.close();}}

image.png

5.

image.png
服务端不停止,用户端一直传
思路:可以在服务端使用循环嵌套:
如下:

public class Server {public static void main(String[] args) throws IOException {//创建ServerSocket对象ServerSocket ss = new ServerSocket(10000);while (true) {//等待客户端连接Socket socket = ss.accept();//获取通道中传来的数据//字节流读取字节//缓冲流提升效率BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());//随机uuid、String str = UUID.randomUUID().toString().replace("-", "");//输出到本地BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("..\\netcode\\serverdir\\" + str + ".jpg"));byte[] bytes = new byte[1024];int len;while ((len = bis.read(bytes)) != -1) {bos.write(bytes, 0, len);//当第一个用户还在传输时,服务端代码还会在这不断循环}bos.flush();//返回信息:字节流-->字符流---->缓冲流BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bw.write("上传成功");bw.newLine();bw.flush();//关流socket.close();//断开当前通道//ss.close();//关闭服务器    ----这里不可以让服务器关闭}}
}

但是循环有弊端,它是一种单线程,如果说此时要传输的文件很大,当第一个用户还在传输时,服务端代码还会停止在第25行,此时就无法和第二个用户产生连接(只有完成一次循环后,才能和下一个用户进行数据连接),所以我们可以用多线程来改进。使多个用户可以同时传输数据,服务端也可以同时读取多个用户的数据

//多线程
public class MyThread  extends Thread{Socket socket;public MyThread (Socket socket){this.socket=socket;}@Overridepublic void run() {//获取通道中传来的数据//字节流读取字节//缓冲流提升效率try {BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());//随机uuid、String str = UUID.randomUUID().toString().replace("-", "");//输出到本地BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("..\\netcode\\serverdir\\" + str + ".jpg"));byte[] bytes = new byte[1024];int len;while ((len = bis.read(bytes)) != -1) {bos.write(bytes, 0, len);}bos.flush();//返回信息:字节流-->字符流---->缓冲流BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bw.write("上传成功");bw.newLine();bw.flush();} catch (IOException e) {throw new RuntimeException(e);}finally {//5.释放资源if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}//Server
public class Server {public static void main(String[] args) throws IOException {//创建ServerSocket对象ServerSocket ss = new ServerSocket(10000);while (true) {//等待客户端连接Socket socket = ss.accept();new MyThread(socket).start();//ss.close();}}
}//client....

6.

image.png
使用自定义线程池

//Server
public class Server {public static void main(String[] args) throws IOException {//1创建线程池对象ThreadPoolExecutor pool = new ThreadPoolExecutor(3,//核心线程数量16,//线程池总大小60,//空闲时间TimeUnit.SECONDS,//单位new ArrayBlockingQueue<>(2),//队列Executors.defaultThreadFactory(),//线程工厂,让线程池如何创建线程对象new ThreadPoolExecutor.AbortPolicy()//拒绝策略);//2创建ServerSocket对象ServerSocket ss = new ServerSocket(10000);while (true) {//3等待客户端连接Socket socket = ss.accept();//开启一条线程//一个用户就对应服务端的一条线程//调用submit方法传入myRunnable对象pool.submit((new MyRunnable(socket)));//ss.close();}}
}
//MyRunnable
public class MyRunnable implements Runnable {Socket socket;public MyRunnable(Socket socket){this.socket=socket;}@Overridepublic void run() {//获取通道中传来的数据//字节流读取字节//缓冲流提升效率try {BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());//随机uuid、String str = UUID.randomUUID().toString().replace("-", "");//输出到本地BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("..\\netcode\\serverdir\\" + str + ".jpg"));byte[] bytes = new byte[1024];int len;while ((len = bis.read(bytes)) != -1) {bos.write(bytes, 0, len);}bos.flush();//返回信息:字节流-->字符流---->缓冲流BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bw.write("上传成功");bw.newLine();bw.flush();} catch (IOException e) {throw new RuntimeException(e);}finally {//5.释放资源if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
//client.....

7.

image.png

public class Server {public static void main(String[] args) throws IOException {//客户端:多次发送数据//服务器:接收多次接收数据,并打印//1.创建对象绑定10000端口ServerSocket ss = new ServerSocket(10000);//2.等待客户端来连接Socket socket = ss.accept();//3.读取数据InputStreamReader isr = new InputStreamReader(socket.getInputStream());int b;while ((b = isr.read()) != -1){System.out.print((char)b);}//4.释放资源socket.close();ss.close();}
}

首先启动服务端:
再在浏览器输入:
image.png
获得到数据:
image.png

8.

image.png
client

package A;import java.io.*;
import java.net.Socket;
import java.util.Scanner;public class Client1 {public static void main(String[] args) throws IOException {/*** 每一个客户端都是一个线程*/while (true) {//1.与服务端建立连接Socket socket = new Socket("127.0.0.1", 10000);System.out.println("服务器已连接");//2生成聊天界面System.out.println("==============欢迎来到黑马聊天室================");System.out.println("1登录");System.out.println("2注册");System.out.println("请输入您的选择:");//3键盘录入Scanner sc = new Scanner(System.in);String choose = sc.nextLine();//判断:switch (choose) {case "1"://登录逻辑login(socket);break;case "2"://注册逻辑break;default:System.out.println("没有该选项");}}}/*** //登录** @param socket* @throws IOException*/private static void login(Socket socket) throws IOException {//1输入账户和密码Scanner sc = new Scanner(System.in);System.out.println("请输入用户名");String username = sc.nextLine();System.out.println("请输入密码");String password = sc.nextLine();//***登录要求使用username=zhangsan&password=123这种格式发给服务端//2拼接StringBuilder sb = new StringBuilder();sb.append("username=").append(username).append("&password=").append(password);//3提交给服务器验证BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));//第一次是告诉服务器是此时登陆操作是什么bw.write("login");bw.newLine();//这两个要配套使用bw.flush();//第二次告诉服务器用户端输入的账号密码bw.write(sb.toString());bw.newLine();bw.flush();//接收服务端的回馈消息BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));String message = br.readLine();if ("1".equals(message)) {System.out.println("登陆成功,可以开始聊天");//开一条单独的线程,专门用来接收服务端转发过来的聊天记录new Thread(new ClientMyRunnable(socket)).start();//将要说的话传给服务器,交给服务器转发给其他客户端talk2All(bw);} else if ("2".equals(message)) {System.out.println("密码不正确");} else {System.out.println("用户名不存在,请先注册");}}private static void talk2All(BufferedWriter bw) throws IOException {Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入你要说的话");String message = sc.nextLine();bw.write(message);bw.newLine();bw.flush();}}
}class ClientMyRunnable implements Runnable {Socket socket;//构造public ClientMyRunnable(Socket socket) {this.socket = socket;}@Overridepublic void run() {//循环包裹,不断读取服务端发过来的信息(接受群发消息)while (true) {try {BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));String message = br.readLine();System.out.println(message);} catch (IOException e) {throw new RuntimeException(e);}}}
}

server

package A;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.Buffer;
import java.nio.file.attribute.UserPrincipal;
import java.util.ArrayList;
import java.util.Properties;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;public class Server {//成员位置方便调用static  ArrayList<Socket>list=new ArrayList<>();public static void main(String[] args) throws IOException {//1创建ServerSocket对象,并连接10000端口ServerSocket ss = new ServerSocket(10000);//2把本地文件中的正确用户名和密码都获取到Properties prop = new Properties();FileInputStream fis = new FileInputStream("..\\Chat\\account.txt");prop.load(fis);fis.close();//只要来了一个客户端,就开一个条线程while (true) {//等待服务端连接Socket socket = ss.accept();System.out.println("有客户端来连接");//开始处理线程任务new Thread(new MyRunnable(socket, prop)).start();}}
}//-----------------------------------------------------------------------
class MyRunnable implements Runnable {Socket socket;Properties prop;//构造public MyRunnable(Socket socket, Properties prop) {this.socket = socket;this.prop = prop;}@Overridepublic void run() {/*** 每一个线程要做的事情*/try {//1读取客户端传来的信息BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//第一次读取的是用户的操作String choose = br.readLine();while (true) {switch (choose) {case "login" -> login(br);case "register" -> register();}}} catch (IOException e) {throw new RuntimeException(e);}}/*** 1.获取用户端输入的帐号、密码* 2.与正确的账号密码比较* 3.写出不同情况的返回信息*/public void login(BufferedReader br) throws IOException {System.out.println("用户执行了登陆操作");//第二次读取的是用户端传递过来的拼接信息:username=zhangsan&password=123String userInfo = br.readLine();//获取真正的账号密码:切割String s1 = userInfo.split("&")[0];String s2 = userInfo.split("&")[1];String usernameInput = s1.split("=")[1];String passwordInput = s2.split("=")[1];System.out.println("账号是:" + usernameInput);System.out.println("密码是:" + passwordInput);//比较if (prop.containsKey(usernameInput)) {//用户名一致,就比较密码//先获取当前正确密码String rellyPassword = (String) prop.get(usernameInput);if (passwordInput.equals(rellyPassword)) {//登陆成功,给用户端返回信息messageToClient("1");//登陆成功,可以开始聊天//登陆成功后需要将当前socket对象存储起来Server.list.add(socket);//接收客户端发送的信息并打印在控制台talk2All(br,usernameInput);} else {//密码不正确,给用户端返回信息messageToClient("2");//密码不正确}} else {//用户名不存在,给用户端返回信息:messageToClient("3");//用户名不存在,请先注册}}private void talk2All(BufferedReader br, String usernameInput) throws IOException {//聊天死循环while(true){//接收客户端发送的信息String message = br.readLine();System.out.println(usernameInput+"发送过来了消息:"+message);//群发for (Socket s : Server.list) {//s以此表示每一个socket对象messageToClient(s,usernameInput+"发送过来了消息:"+message);}}}/***因为三种情况:登陆成功、密码不正确、用户名不存在都要返回信息给客户端,所以干脆抽取成方法* @param message*/public void messageToClient(String message) throws IOException {//获取输出流BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bw.write(message);bw.newLine();bw.flush();}/*** 重载的messageToClient* @param socket* @param message*/public void messageToClient(Socket socket,String message) throws IOException {//获取输出流,将数据写给当前的socket通道对象BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bw.write(message);bw.newLine();bw.flush();}/*** 注册逻辑*/private static void register() {System.out.println("用户执行了注册操作");}}

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

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

相关文章

云手机受欢迎背后的原因及未来展望

随着办公模式的演变&#xff0c;云手机的热潮迅速兴起。在各种办公领域&#xff0c;云手机正展现出卓越的实际应用效果。近年来&#xff0c;跨境电商行业迎来了蓬勃发展&#xff0c;其与国内电商的差异不仅体现在整体环境上&#xff0c;更在具体的操作层面呈现出独特之处。海外…

OpenAI划时代大模型——文本生成视频模型Sora作品欣赏(二)

Sora介绍 Sora是一个能以文本描述生成视频的人工智能模型&#xff0c;由美国人工智能研究机构OpenAI开发。 Sora这一名称源于日文“空”&#xff08;そら sora&#xff09;&#xff0c;即天空之意&#xff0c;以示其无限的创造潜力。其背后的技术是在OpenAI的文本到图像生成模…

AES加密中的CBC和ECB

目录 1.说明 2.ECB模式&#xff08;base64&#xff09; 3.CBC模式 4.总结 1.说明 AES是常见的对称加密算法&#xff0c;加密和解密使用相同的密钥&#xff0c;流程如下&#xff1a; 主要概念如下&#xff1a; ①明文 ②密钥 用来加密明文的密码&#xff0c;在对称加密算…

OpenCV 入门讲解

OpenCV 入门讲解 OpenCV&#xff08;Open Source Computer Vision Library&#xff09; 是一个开源的计算机视觉库&#xff0c;它提供了许多高效实现计算机视觉算法的函数&#xff0c;从基本的滤波到高级的物体检测都有涵盖。OpenCV 使用 C/C 开发&#xff0c;同时也提供了 Pyt…

【HarmonyOS】鸿蒙开发之Button组件——第3.4章

按钮类型 Capsule&#xff08;默认值&#xff09;&#xff1a;胶囊类型 Button("默认样式").height(40)//高度.width(90)//宽度.backgroundColor(#aabbcc)//背景颜色运行结果: Normal&#xff1a;矩形按钮&#xff0c;无圆角 Button({type:ButtonType.Normal}){Te…

Cesium 问题——加载 gltf 格式的模型之后太小,如何让相机视角拉近

文章目录 问题分析问题 刚加载的模型太小,如何拉近视角放大 分析 在这里有两种方式进行拉近视角, 一种是点击复位进行视角拉近一种是刚加载就直接拉近视角// 模型三加载 this.damModel = new Cesium.Entity({name: "gltf模型",position:</

js设计模式:单例模式

作用: 保证一个类只有一个实例,并且提供一个全局的访问位置。 可以用来实现全局的一些状态管理或者独一无二的数据 示例: class Wjt{constructor(name,idNumber,gender){this.name namethis.idNumber idNumberthis.gender gender}//可以直接使用Wjt调用的静态方法static …

java 培训班预定管理系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java 培训班预定管理系统是一套完善的java web信息管理系统 采用serlvetdaobean&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xf…

【Jvm】性能调优(上)线上问题排查工具汇总

文章目录 一.互联网概念1.产品闭环和业务闭环2.软件设计中的上游和下游3.JDK运行时常量池 二.CPU相关概念1.查询CPU信息2.CPU利用率&#xff08;CPU utilization&#xff09;和 CPU负载&#xff08;CPU load&#xff09;2.1.如何理解CPU负载2.2.top命令查看CPU负载均值2.3.CPU负…

进程链信任-父进程欺骗

文章目录 前记普通权限的父进程欺骗ShllCode上线进程提权基础进程提权注入 前记 父进程欺骗作用&#xff1a; 进程链信任免杀进程提权 检测&#xff1a; etw 普通权限的父进程欺骗 #include<stdio.h> #include<windows.h> #include <TlHelp32.h>DWORD …

Matlab|基于支持向量机的电力短期负荷预测【最小二乘、标准粒子群、改进粒子群】

目录 主要内容 部分代码 结果一览 下载链接 主要内容 该程序主要是对电力短期负荷进行预测&#xff0c;采用三种方法&#xff0c;分别是最小二乘支持向量机&#xff08;LSSVM&#xff09;、标准粒子群算法支持向量机和改进粒子群算法支持向量机三种方法对负荷进行…

代码随想录刷题笔记 DAY 29 | 非递减子序列 No.491 | 全排列 No.46 | 全排列 II No. 47

文章目录 Day 2901. 非递减子序列&#xff08;No. 491&#xff09;1.1 题目1.2 笔记1.3 代码 02. 全排列&#xff08;No. 46&#xff09;2.1 题目2.2 笔记2.3 代码 03. 全排列 II&#xff08;No. 47&#xff09;3.1 题目3.2 笔记3.3 代码 Day 29 01. 非递减子序列&#xff08;…

docker ubuntu tomcat 换源 安装软件

第一种办法参考docker中ubuntu容器更换apt源_ubuntu更改apt源 with dockerfile-CSDN博客 sed -i s/archive.ubuntu.com//mirrors.aliyun.com/g /etc/apt/sources.list sed -i s/security.ubuntu.com//mirrors.aliyun.com/g /etc/apt/sources.list apt update apt install vim…

- 工程实践 - 《QPS百万级的有状态服务实践》02 - 冷启动和热更新

本文属于专栏《构建工业级QPS百万级服务》 继续上篇《QPS百万级的有状态服务实践》01 - 存储选型实践。如图1架构&#xff0c;我们已经解决了数据生产的问题。 图1 但是我们的服务已经在运行了&#xff0c;并实时处理大量的请求&#xff0c;我们如何把内存中的数据版本更新呢。…

09_Java集合

一、Java集合框架概述 一方面&#xff0c; 面向对象语言对事物的体现都是以对象的形式&#xff0c;为了方便对多个对象的操作&#xff0c;就要对对象进行存储。另一方面&#xff0c;使用Array存储对象方面具有一些弊端&#xff0c;而Java 集合就像一种容器&#xff0c;可以动态…

模型超参数寻优

参考某篇QSAR的sci论文设置 根据上图&#xff0c;我设置我的XGBoost模型&#xff1a; # 定义要搜索的超参数的候选值 param_grid {model__learning_rate: [0.1, 0.01, 0.001], # 调整学习率model__n_estimators: [50, 100, 200, 300,400,500], # 调整树的数量model__max_de…

【MySQL】变量、流程控制

一、变量 在MySQL的存储过程与函数中&#xff0c;可以使用变量来存储查询或计算的中间结果数据&#xff0c;或者输出最终的结果数据。它可以分为用户自定义变量与系统变量 1、系统变量 1&#xff09;系统变量分为全局变量&#xff08;需要使用关键字global&#xff09;和会话…

JRT监听-PDF-Excel-Img

依赖全新设计&#xff0c;我们无需再顾虑历史兼容性的束缚&#xff1b;同时&#xff0c;基于多年来累积的深入需求理解&#xff0c;JRT监听机制巧妙地借助CMD命令模式&#xff0c;达成了监听的全面统一。无论是PDF、Excel还是图片文件&#xff0c;都不再需要特殊对待或额外区分…

unity学习(15)——服务器组装(1)

1.新建好的c#项目如下&#xff1a; 文件夹中内容如下&#xff1a; 此时已经可以通过vs2022打开.sln文件&#xff0c;就可以打开项目了。 2.我们把逆向后&#xff08;主程序&#xff09;的内容的代码粘贴过去。有些逆向功底&#xff0c;很快可以定位到&#xff0c;服务器的入口…

【Java EE初阶十八】网络原理(三)

3. 网络层 网络层要做的事情主要是两方面&#xff1a; 1)、地址管理&#xff1a;制定一系列的规则,通过地址,描述出网络上一个设备的位置&#xff1b; 2)、路由选择&#xff1a;网络环境是比较复杂的&#xff0c;从一个节点到另一个节点之间&#xff0c;存在很…