Java核心类库篇8——网络编程

Java核心类库篇8——网络编程

1、七层网络模型

  • OSI(Open System Interconnect),即开放式系统互联,是ISO(国际标准化组织)组织在1985 年研究的网络互连模型。

  • 当发送数据时,需要对发送的内容按照上述七层模型进行层层加包后发送出去。

  • 当接收数据时,需要对接收的内容按照上述七层模型相反的次序层层拆包并显示出来

在这里插入图片描述

2、协议

计算机在网络中实现通信就必须有一些约定或者规则,这种约定和规则就叫做通信协议,通信协议 可以对速率、传输代码、代码结构、传输控制步骤、出错控制等制定统一的标准。

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

  • 面向连接的协议
  • 建立连接 => 进行通信 => 断开连接
  • 在传输前采用"三次握手"方式
  • 在通信的整个过程中全程保持连接,形成数据传输通道
  • 保证了数据传输的可靠性和有序性
  • 是一种全双工的字节流通信方式,可以进行大数据量的传输
  • 传输完毕后需要释放已建立的连接,发送数据的效率比较低

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

  • 非面向连接的协议
  • 在通信的整个过程中不需要保持连接,其实是不需要建立连接
  • 不保证数据传输的可靠性和有序性
  • 是一种全双工的数据报通信方式,每个数据报的大小限制在64K内
  • 发送数据完毕后无需释放资源,开销小,发送数据的效率比较高,速度快

3、IP与端口

  • IP地址是互联网中的唯一地址标识,本质上是由32位二进制组成的整数,叫做IPv4,当然也有128 位二进制组成的整数,叫做IPv6,目前主流的还是IPv4
  • 端口号本质上是16位二进制组成的整数,表示范围是:0 ~ 65535,其中0 ~ 1024之间的端口号通 常被系统占用,建议编程从1025开始使用
  • IP地址 - 可以定位到具体某一台设备
  • 端口号 - 可以定位到该设备中具体某一个进程
  • 网络编程需要提供:IP地址 + 端口号,组合在一起叫做网络套接字(InetSocketAddress):Socket

4、TCP网络编程

ServerSocket

方法声明功能介绍
public ServerSocket(int port)根据参数指定的端口号来构造对象
public Socket accept()侦听并接收到此套接字的连接请求
public void close()用于关闭套接字

Socket

方法声明功能介绍
public Socket(String host, int port)根据指定主机名和端口来构造对象
public InputStream getInputStream()用于获取当前套接字的输入流
public OutputStream getOutputStream()用于获取当前套接字的输出流
public void close()用于关闭套接字

4.1、客户端发给服务器端

public class Server {public static void main(String[] args) {ServerSocket serverSocket = null;Socket socket = null;InputStream inputStream=null;try {serverSocket = new ServerSocket(8099);System.out.println("等待客户端连接");socket = serverSocket.accept();System.out.println("终于等到你");//Thread.sleep(10000);inputStream = socket.getInputStream();int len=0;byte[] buffer = new byte[1024];while ((len=inputStream.read(buffer))!=-1){System.out.println(new String(buffer,0,len));}} catch (IOException | InterruptedException e) {e.printStackTrace();} finally {if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (serverSocket!=null){try {serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
public class Client {public static void main(String[] args) {Socket socket = null;OutputStream outputStream=null;try {socket = new Socket("127.0.0.1", 8099);outputStream = socket.getOutputStream();outputStream.write("hello, i am ruoye!".getBytes());outputStream.flush();socket.shutdownOutput();} catch (IOException e) {e.printStackTrace();} finally {if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}

4.2、服务器响应

字节输入输出流会出现问题read无法读到-1,此时应当

outputStream.flush();
socket.shutdownOutput();

但在多次通信时,关闭流显然不合适

public class Server {public static void main(String[] args) {ServerSocket serverSocket = null;Socket socket = null;InputStream inputStream=null;OutputStream outputStream=null;try {serverSocket = new ServerSocket(8099);System.out.println("等待客户端连接");socket = serverSocket.accept();System.out.println("终于等到你");
//            Thread.sleep(10000);inputStream = socket.getInputStream();int len=0;byte[] buffer = new byte[1024];while ((len=inputStream.read(buffer))!=-1){System.out.println(new String(buffer,0,len));}System.out.println("服务器收到消息");outputStream = socket.getOutputStream();outputStream.write("i know".getBytes());outputStream.flush();socket.shutdownOutput();System.out.println("服务器发送消息");} catch (IOException e) {e.printStackTrace();} finally {if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (serverSocket!=null){try {serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
public class Client {public static void main(String[] args) {Socket socket = null;OutputStream outputStream=null;InputStream inputStream=null;try {socket = new Socket("127.0.0.1", 8099);outputStream = socket.getOutputStream();outputStream.write("hello, i am ruoye!".getBytes());System.out.println("客户端发送消息成功");outputStream.flush();socket.shutdownOutput();inputStream = socket.getInputStream();int len=0;byte[] buffer = new byte[1024];while ((len=inputStream.read(buffer))!=-1){System.out.println(new String(buffer,0,len));}System.out.println("客户端接收消息");} catch (IOException e) {e.printStackTrace();} finally {if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}

4.3、DataInputStream流

public class Server {public static void main(String[] args) {ServerSocket serverSocket = null;Socket socket = null;InputStream inputStream=null;OutputStream outputStream=null;try {serverSocket = new ServerSocket(8099);System.out.println("等待客户端连接");socket = serverSocket.accept();System.out.println("终于等到你");
//            Thread.sleep(10000);inputStream = socket.getInputStream();DataInputStream dataInputStream=new DataInputStream(inputStream);System.out.println(dataInputStream.readUTF());System.out.println("服务器收到消息");outputStream = socket.getOutputStream();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF("i know!");System.out.println("服务器发送消息");} catch (IOException e) {e.printStackTrace();} finally {if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (serverSocket!=null){try {serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
public class Client {public static void main(String[] args) {Socket socket = null;OutputStream outputStream=null;InputStream inputStream=null;try {socket = new Socket("127.0.0.1", 8099);outputStream = socket.getOutputStream();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF("i am ruoye!");System.out.println("客户端发送消息成功");System.out.println("================="+outputStream);outputStream.write("hello, i am ruoye!".getBytes());inputStream = socket.getInputStream();DataInputStream dataInputStream=new DataInputStream(inputStream);System.out.println(dataInputStream.readUTF());System.out.println("客户端接收消息");} catch (IOException e) {e.printStackTrace();} finally {if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}

4.4、简易聊天室

public class Server {public static void main(String[] args) {ServerSocket serverSocket = null;Socket socket = null;InputStream inputStream=null;OutputStream outputStream=null;try {serverSocket = new ServerSocket(8099);System.out.println("等待客户端连接");socket = serverSocket.accept();System.out.println("终于等到你");while (true) {inputStream = socket.getInputStream();DataInputStream dataInputStream=new DataInputStream(inputStream);String s = dataInputStream.readUTF();System.out.println(s);if ("bye".equalsIgnoreCase(s)){break;}outputStream = socket.getOutputStream();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF("收到"+s);}} catch (IOException e) {e.printStackTrace();} finally {if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (serverSocket!=null){try {serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
public class Client {public static void main(String[] args) {Socket socket = null;OutputStream outputStream=null;InputStream inputStream=null;Scanner scanner=new Scanner(System.in);try {socket = new Socket("127.0.0.1", 8099);outputStream = socket.getOutputStream();while (true) {String next = scanner.next();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF(next);if ("bye".equalsIgnoreCase(next)){break;}inputStream = socket.getInputStream();DataInputStream dataInputStream=new DataInputStream(inputStream);System.out.println(dataInputStream.readUTF());}} catch (IOException e) {e.printStackTrace();} finally {if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}

4.5、多人聊天室

public class Server {public static void main(String[] args) {ServerSocket serverSocket = null;try {serverSocket = new ServerSocket(8099);while (true){System.out.println("等待客户端连接");Socket socket = serverSocket.accept();System.out.println("终于等到你");new Thread(new Conversation(socket)).start();}} catch (IOException e) {e.printStackTrace();} finally {if (serverSocket!=null){try {serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
public class Conversation implements Runnable {private Socket socket;public Conversation(Socket socket) {this.socket = socket;}@Overridepublic void run() {InputStream inputStream=null;OutputStream outputStream=null;try {while (true) {inputStream = socket.getInputStream();DataInputStream dataInputStream=new DataInputStream(inputStream);String s = dataInputStream.readUTF();System.out.println("收到 "+socket.getInetAddress()+" "+socket.getPort()+"的消息:"+s);if ("bye".equalsIgnoreCase(s)){break;}outputStream = socket.getOutputStream();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF("收到 "+socket.getInetAddress()+" "+socket.getPort()+":"+s);}} catch (IOException e) {e.printStackTrace();} finally {if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
public class Client {public static void main(String[] args) {Socket socket = null;OutputStream outputStream=null;InputStream inputStream=null;Scanner scanner=new Scanner(System.in);try {socket = new Socket("127.0.0.1", 8099);outputStream = socket.getOutputStream();while (true) {String next = scanner.next();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF(next);if ("bye".equalsIgnoreCase(next)){break;}inputStream = socket.getInputStream();DataInputStream dataInputStream=new DataInputStream(inputStream);System.out.println(dataInputStream.readUTF());}} catch (IOException e) {e.printStackTrace();} finally {if (outputStream!=null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream!=null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket!=null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}

5、UDP网络编程

DatagramSocket

用于描述发送和接收数据报的套接字(包裹投递服务的发送或接收点)

方法声明功能介绍
public DatagramSocket()使用无参的方式构造对象
public DatagramSocket(int port)根据参数指定的端口号来构造对象
public void receive(DatagramPacket p)用于接收数据报存放到参数指定的位置
public void send(DatagramPacket p)用于将参数指定的数据报发送出去
public void close()关闭Socket并释放相关资源

DatagramPacket

要用于描述数据报(用来实现无连接包裹投递服务)

方法声明功能介绍
public DatagramPacket(byte[] buf, int length)根据参数指定的数组来构造对象,用于接 收长度为length的数据报
public DatagramPacket(byte[] buf, int length, InetAddress address, int port)根据参数指定数组来构造对象,将数据报 发送到指定地址和端口
public InetAddress getAddress()用于获取发送方或接收方的通信地址
public int getPort()用于获取发送方或接收方的端口号
public int getLength()用于获取发送数据或接收数据的长度

InetAddress

方法声明功能介绍
public static InetAddress getLocalHost()用于获取当前主机的通信地址
public static InetAddress getByName(String host)根据参数指定的主机名获取通信地址

5.1、简易广播

public class Receive {public static void main(String[] args) {DatagramSocket datagramSocket = null;try {datagramSocket = new DatagramSocket(8099);byte[] bytes=new byte[512];DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length);System.out.println("等待发送消息");datagramSocket.receive(datagramPacket);System.out.println("等待到的内容"+new String(bytes));} catch (IOException e) {e.printStackTrace();} finally {if (datagramSocket!=null){datagramSocket.close();}}}
}
public class Send {public static void main(String[] args) {DatagramSocket datagramSocket = null;try {datagramSocket = new DatagramSocket(8100);String str="hello udp!";DatagramPacket datagramPacket = new DatagramPacket(str.getBytes(), str.length(),new InetSocketAddress("127.0.0.1",8099));datagramSocket.send(datagramPacket);} catch (IOException e) {e.printStackTrace();} finally {if (datagramSocket!=null){datagramSocket.close();}}}
}

5.1、带回复的广播

public class Receive {public static void main(String[] args) {DatagramSocket datagramSocket = null;try {datagramSocket = new DatagramSocket(8099);byte[] bytes=new byte[512];DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length);System.out.println("等待发送消息");datagramSocket.receive(datagramPacket);System.out.println("等待到的内容"+new String(bytes,0,datagramPacket.getLength()));String str = "i know";DatagramPacket datagramPacket1 = new DatagramPacket(str.getBytes(), str.length(),datagramPacket.getAddress(),datagramPacket.getPort());datagramSocket.send(datagramPacket1);} catch (IOException e) {e.printStackTrace();} finally {if (datagramSocket!=null){datagramSocket.close();}}}
}
public class Send {public static void main(String[] args) {DatagramSocket datagramSocket = null;try {datagramSocket = new DatagramSocket(8100);String str="hello udp!";DatagramPacket datagramPacket = new DatagramPacket(str.getBytes(), str.length(),new InetSocketAddress("127.0.0.1",8099));datagramSocket.send(datagramPacket);byte[] bytes=new byte[512];DatagramPacket datagramPacket1 = new DatagramPacket(bytes,bytes.length);System.out.println("等待回复消息");datagramSocket.receive(datagramPacket1);System.out.println("等待到的回复内容"+new String(bytes,0,datagramPacket1.getLength()));} catch (IOException e) {e.printStackTrace();} finally {if (datagramSocket!=null){datagramSocket.close();}}}
}

6、URL

统一资源定位器

<传输协议>://<主机名>:<端口号>/<资源地址>
方法声明功能介绍
URL(String spec)根据参数指定的字符串信息构造对象
String getProtocol()获取协议名称
String getHost()获取主机名称
int getPort()获取端口号
String getPath()获取路径信息
String getFile()获取文件名
URLConnection openConnection()获取URLConnection类的实例

URLConnection

方法声明功能介绍
InputStream getInputStream()获取输入流
void disconnect()断开连接
public class Test {public static void main(String[] args) {try {URL url = new URL("https://www.baidu.com/");System.out.println(url.getProtocol());System.out.println(url.getHost());System.out.println(url.getPort());} catch (MalformedURLException e) {e.printStackTrace();}}
}

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

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

相关文章

linux网站如何添加swf支持,linux下安装swftools和openOffice

1.openOffice下载地址&#xff1a;http://download.openoffice.org/all_rc.html#untested-full 下载 Linux 32-bit Intel rpm 包 版本自选 2.安装openOffice 1】 tar -zxvf OOo_3.2.1_Linux_x86_install-rpm-wJRE_zh-CN.tar.gz 2】 cd OOO320_m18_native_packed-1_zh-CN1.openO…

Java番外篇1——正则表达式

Java番外篇1——正则表达式 1、什么是正则表达式 正则表达式定义了字符串的模式正则表达式可以用来搜索、编辑或处理文本正则表达式并不仅限于某一种语言&#xff0c;但是在每种语言中有细微的差别 2、正则表达式规则 2.1、普通字符 普通字符包括没有显式指定为元字符的所…

linux 1号硬盘不能用,linux 挂载硬盘的疑问 : IDE1 上的接口无法使用.

状况说明:我将在linux系统上挂载多块硬盘(目前是redhat9).我通过3块硬盘试验.问题出现:无论如何链接 IDE1 上的硬盘, /dev/hdc 都无法 mount.数据:1. 使用 fdisk -l : 不会显示接到 IDE1 上的硬盘(目前只试验了在 IDE1 上接 1个硬盘,用 master 端口).2. 使用 fdisk /dev/hdc : …

Java番外篇2——jdk8新特性

Java番外篇2——jdk8新特性 1、Lambda 1.1、无参无返回值 public class Test {interface Print{void print();}public static void main(String[] args) { // Print printnew Print() { // Override // public void print() { // …

linux同花顺乱码,打开同花顺软件全是问号

官方答案&#xff1a;字体库字体乱码【原因分析】&#xff1a;系统字体缺失&#xff0c;损坏。【解决方案】方案一&#xff1a;使用360电脑门诊进行修复1.打开【360安全卫士】—【电脑专家】搜索乱码&#xff0c;然后会弹出如下六个解决方案&#xff0c;根据当前计算机的故障现…

Java番外篇3——线程池

Java番外篇3——线程池 1、多线程产生的问题 多次创建并销毁线程。而创建并销毁线程的过程势必会消耗内存 2、线程池 降低系统资源消耗&#xff0c;通过重用已存在的线程&#xff0c;降低线程创建和销毁造成的消耗提高系统响应速度&#xff0c;当有任务到达时&#xff0c;通…

嵌入式linux组件,嵌入式Linux系统的几大组件!

原标题&#xff1a;嵌入式Linux系统的几大组件&#xff01;本文概述了Linux系统的几大组件&#xff0c;描述了这些组件之间的关系。文章解释了术语&#xff0c;并描述看似很基础的细节。每个Linux系统都有许多主要组件。其中一个组件(引导加载程序)从技术上讲是Linux之外的&…

linux iptables找不到,centos /etc/sysconfig/下找不到iptables文件解决方法

本想做些防火墙策略。防火墙策略都是写在/etc/sysconfig/iptables文件里面的。可我发现我也没有这个文件。[rootxiaohuai /]# cd /etc/sysconfig/[rootxiaohuai sysconfig]# lsatd firstboot irqbalance network-scripts rhn sysstatauditd grub kdump ntpd rngd sysstat.iocon…

Java番外篇4——BigInteger与BigDecimal

Java番外篇4——BigInteger与BigDecimal 为了解决大数运算的问题 操作整型&#xff1a;BigInteger操作小数&#xff1a;BigDecimal 1、BigInteger 方法声明功能介绍public BigInteger abs()返回大整数的绝对值public BigInteger add(BigInteger val)返回两个大整数的和publ…

linux cd 命令案例,15个关于Linux的‘cd’命令的练习例子

命令名称&#xff1a;cd代表&#xff1a;切换目录使用平台&#xff1a;所有Linux发行版本执行方式&#xff1a;命令行权限&#xff1a;访问自己的目录或者其余指定目录级别&#xff1a;基础/初学者1.从当前目录切换到/usr/local avitecmint:~$ cd /usr/local avitecmint:/usr/l…

c语言字符串strchr,Strchr()C语言字符串处理功能

strchr()函数不如strcpy()&#xff0c;strcat()&#xff0c;strcmp()&#xff0c;strupr()&#xff0c;strlwr()&#xff0c;strlen()直观c strchr函数&#xff0c;因此需要代码理解:代码来自C语言开发入门和项目实战书:#include#includeint main(){字符字符串[50];char * str&…

Java数据库篇1——数据库配置

Java数据库篇1——数据库配置 1、数据库 数据库(DataBase) 就是存储和管理数据的仓库本质是一个文件系统, 还是以文件的方式,将数据保存在电脑上 2、数据库的优点 存储方式优点缺点内存速度快不能够永久保存,数据是临时状态的文件数据是可以永久保存的使用IO流操作文件, 不…

C语言中输入123求位权,数反转 - it610.com

32位系统c语言中&#xff1a;char取值范围:-128~127unsigned char取值范围:0~255int取值范围:-2147483648~2147483647unsigned int取值范围:0~429496729564位系统下C语言中int还是占4字节&#xff0c;32位&#xff0c;与32位系统中没有区别64位系统下&#xff0c;采用64位编译器…

Java数据库篇2——数据库基本操作

Java数据库篇2——数据库基本操作 1、启动、停止、服务 net start mysqlnet stop mysql2、登入登出 本地 Mysql -u用户名 -p密码Mysql -u用户名 -p回车 密码远程 Mysql -hIP地址 -u用户名 -p密码Mysql -hIP地址 -u用户名 -p回车 密码退出 Quit Exit

c语言加密shell脚本,shell脚本加密

如何保护自己编写的shell程序要保护自己编写的shell脚本程序&#xff0c;方法有很多&#xff0c;最简单的方法有两种&#xff1a;1、加密 2、设定过期时间&#xff0c;下面以shc工具为例说明&#xff1a;一、下载安装shc工具shc是一个加密shell脚本的工具.它的作用是把shell脚本…

Java数据库篇3——SQL

Java数据库篇3——SQL 结构化查询语言(Structured Query Language)简称SQL&#xff0c;是一种特殊目的的编程语言&#xff0c;是一种数据库 查询和程序设计语言&#xff0c;用于存取数据以及查询、更新和管理关系数据库系统 1、SQL分类 分类说明数据定义语言简称DDL(Data De…

c语言分配飞机10个座位,leetcode1227(飞机座位分配)--C语言实现

对于第一个乘客来说 他有三种选择坐在正确的(自己的位置), 那么后面的乘客都不会乱&#xff0c;所以第n个乘客可以坐到自己的位置, 1/n * 1.坐在第n个乘客的位置&#xff0c;那么第n个乘客肯定无法坐到自己的位置, 1/n * 0.坐在[1,n-1]之间的某个位置K.对于第K个乘客而言&#…

Java数据库篇4——表的约束

Java数据库篇4——表的约束 1、非空约束 字段不允许为空 #创建表的时候添加 Create table 表名(列1 数据类型 not null&#xff0c;列2 数据类型&#xff0c;列3 数据类型 ); #创建表以后添加 Alter table 表名 modify 列名 数据类型 not null&#xff1b; #删除 Alter tabl…

c语言数组转置原理,为什么这个数组转置不对?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼原数组是1,2,34,5,67,8,9转置后的数组是1,4,72,5,83,6,9但结果出来的是乱七八糟的数字&#xff0c;而且最后提示出错#includevoid TransposedArray(int Arr[3][3]){shortint i,j;shortint Med;for(i0;i<2;i){for(j0;j<2;j){i…

Java数据库篇5——事务

Java数据库篇5——事务 1、什么是事务 事务是一个整体,由一条或者多条SQL 语句组成,这些SQL语句要么都执行成功,要么都执行失败, 只要有 一条SQL出现异常,整个操作就会回滚,整个业务执行失败 2、事物的特征 原子性&#xff1a;事务是不可再分的最小的操作单位一致性&#x…