Java核心类库之(网络编程:网络编程入门、UDP通信程序、TCP通信程序)

article/2025/9/26 16:54:20

目录

    • 1 网络编程入门
      • 1.1 网络编程概述
      • 1.2 网络编程三要素
      • 1.3 IP地址
      • 1.4 InetAddress的使用
      • 1.5 端口
      • 1.6 协议
    • 2 UDP通信程序
      • 2.1 UDP通信原理
      • 2.2 UDP发送数据
      • 2.3 UDP接收数据
      • 2.4 范例
    • 3 TCP通信程序
      • 3.1 TCP通信原理
      • 3.2 TCP发送数据
      • 3.3 TCP接收数据
      • 3.4 案例
        • 3.4.1 练习一:服务器给出反馈
        • 3.4.2 练习二:客户端数据来源于键盘录入
        • 3.4.3 练习三:服务器数据写入文本文件
        • 3.4.4 练习四:客户端数据来源于文本文件
        • 3.4.5 练习五:上传文件服务器给出反馈
        • 3.4.6 练习六:多线程实现文件上传

1 网络编程入门

1.1 网络编程概述

  • 计算机网络:是指将地理位置不同的具有独立功能的多台计算机及 其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统
    在这里插入图片描述
  • 网络编程:在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据交换

1.2 网络编程三要素

IP地址

  • 要想让网络中的计算机能够 互相通信,必须为每台计算机指定一个标识号, 通过这个标识号来指定要接收数据的计算机和识别发送的计算机,而IP地址就是这个标识号。也就是设备的标识

端口

  • 网络的通信, 本质上是两个应用程序的通信。每台计算机都有很多的应用程序,那么在网络通信时,如何区分这些应用程序呢?如果说IP地址可以唯一标识网络中的设备 ,那么端口号就可以唯一标识设备中的应用程序了。也就是应用程序的标识

协议

  • 通过计算机网络可以使多 台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守-定的规则,这就好比在道路中行驶的汽车-定要遵守交通规则一 样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定, 通信双方必须同时遵守才能完成数据交换。常见的协议有UDP协议和TCP协议

1.3 IP地址

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

  • IP地址分为两大类

    • IPv4:是给每个连接在网络上的主机分配一个32bit地址。 按照TCP/IP规定,IP地址用二进制来表示, 每个P地址长32bit,也就是4个字节。例如一个采用I进制形式的IP地址是11000000 101010000000001 01000010" ,这么长的地址,处理起来也太费劲了。为了方便使用,IP地址经常被写成+进制的形式,中间使用符号"分隔不同的字节。于是,. 上面的IP地址可以表示为"192168. 1.66" . IP地址的这种表示法叫做"盼+进制表示法”, 这显然比1和0容易记忆得多

    • IPv6:由于互联网的蓬勃发展, IP地址的需求量愈来愈大,但是网络地址资源有限,使得IP的分配越发紧张。为了扩大地址空间,通过IPv6重新定义地址空间,采用128位地址长度,每16个字节-组,分成8组十六进制数,这样就解决了网络地址资源数量不够的问题

  • 常用命令

    • ipconfig: 查看本机P地址
    • ping IP地址:检查网络是否连通
  • 特殊IP地址127.0.0.1:是回送地址,可以代表本机地址,一般用来测试使用

1.4 InetAddress的使用

  • 为了方便我们对IP地址的获取和操作, Java提供了一个类InetAddress供我们使用

  • InetAddress:此类表示Internet协议(IP) 地址

  • 导包:import java.net.InetAddress

方法名说明
static InetAddress getByName(String host)确定主机名称的IP地址。 主机名称可以是机器名称,也可以是IP地址
String getHostName()获取此IP地址的主机名
String getHostAddress()返回文本显示中的IP地址字符串
  • 范例
package test;import java.net.InetAddress;
import java.net.UnknownHostException;public class Demo {public static void main(String[] args) throws UnknownHostException {//1,static InetAddress getByName(String host) 	确定主机名称的IP地址。 主机名称可以是机器名称,也可以是IP地址
//        InetAddress address = InetAddress.getByName("YM");InetAddress address = InetAddress.getByName("192.168.128.1"); //推荐使用System.out.println(address); //YM/192.168.128.1//2,String getHostName() 	获取此IP地址的主机名String hostName = address.getHostName();System.out.println(hostName); //YM//3,String getHostAddress() 	返回文本显示中的IP地址字符串String hostAddress = address.getHostAddress();System.out.println(hostAddress); //192.168.128.1}
}

1.5 端口

  • 端口:设备上应用程序的唯一标识
  • 端口号:用两个字节表示的整数,它的取值范围是0~65535。其中, 0~ 1023之间的端口号用于些知名的网络服务和应用,普通的应用程序需要使用1024以上的端口号。如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败

1.6 协议

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

UDP协议

  • 用户数据报协议(User Datagram Protocol)
  • UDP是无连接通信协议, 即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外-台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
  • 由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频视频和普通数据的传输
  • 例如视频会议通常采用UDP协议, 因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生大影响。但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议

TCP协议

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

  • TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过“三次握手"

  • 三次握手:TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠

    • 第一次握手,客户端向服务器端发出连接请求,等待服务器确认
    • 第二次握手,服务器端向客户端回送一个响应, 通知客户端收到了连接请求
    • 第三次握手,客户端再次向服务器端发送确认信息,确认连接
      在这里插入图片描述
  • 完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛。例如上传文件、下载文件、 浏览网页等

2 UDP通信程序

2.1 UDP通信原理

  • UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象, 但是这两个Socket只是发送,接收数据的对象因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念

  • Java提供了DatagramSocket类作为基于UDP协议的Socket

2.2 UDP发送数据

  • 发送数据的步骤
    • 1、创建发送端的Socket对象(DatagramSocket):DatagramSocket()
    • 2、创建数据, 并把数据打包:DatogramPacket (byte[] buf, int Length, InetAddress address, int port)
    • 3、调用DatagramSocket对象的方法发送数据:void send(DatagramPacket p)
    • 4、关闭发送端:void close()
  • 范例
package test;import java.io.IOException;
import java.net.*;public class Demo {public static void main(String[] args) throws IOException {//1、创建发送端的Socket对象(DatagramSocket)DatagramSocket ds = new DatagramSocket();//2、创建数据, 并把数据打包//DatogramPacket (byte[] buf, int Length, InetAddress address, int port)// 构造一个数据包,发送长度为length的数据 包到指定主机上的指定端口号。byte[] bys = "hello,java".getBytes();DatagramPacket dp = new DatagramPacket(bys,bys.length, InetAddress.getByName("127.0.0.1"),10086);//3、调用DatagramSocket对象的方法发送数据//void send(DatagramPacket p)ds.send(dp);//4、关闭发送端ds.close();}
}

2.3 UDP接收数据

  • 接收数据的步骤
    • 1、创建接收端的Socket对象(DatagramSocket):DatagramSocket(int port)
    • 2、创建一个数据包, 用于接收数据:DatagramPacket(byte[] buf, int length)
    • 3、调用DatagramSocket对象的方法接收数据:void receive(DatagramPacketp)
    • 4、解析数据包, 并把数据在控制台显示:byte[] getData()int getLength()
    • 5、关闭接收端:void close()
package test;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;public class ReceiveDemo {public static void main(String[] args) throws IOException {//1、创建接收端的Socket对象(DatagramSocket):DatagramSocket(int port)DatagramSocket ds = new DatagramSocket(10086);//2、创建一个数据包, 用于接收数据//DatagramPacket(byte[] buf, int length):构造一个DatagramPacket用来接收长度为length的数据包byte[] bys = new byte[1024];DatagramPacket dp = new DatagramPacket(bys, bys.length);//3、调用DatagramSocket对象的方法接收数据:void receive(DatagramPacketp)ds.receive(dp);//4、解析数据包, 并把数据在控制台显示:// byte[] getData():返回数据缓冲区 int getLength()byte[] datas = dp.getData();//int getlength():返回要发送的数据长度或接收的数据长度int len = dp.getlength();String dataString = new String(datas,0,len);System.out.println("数据是:"+dataString);//5、关闭接收端:void close()ds.close();}
}

2.4 范例

在这里插入图片描述

  • 发送端
package test;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class SendDemo {public static void main(String[] args) throws IOException {//1、创建发送端的Socket对象(DatagramSocket):DatagramSocket()DatagramSocket ds = new DatagramSocket();//键盘录入数据BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String line;while ((line = br.readLine()) != null) {if ("886".equals(line)) {break;} else {//创建数据并把数据打包byte[] bys = line.getBytes();DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("127.0.0.1"), 1001);//3、调用DatagramSocket对象的方法发送数据:void send(DatagramPacket p)ds.send(dp);}}ds.close();}
}
  • 接收端
package test;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;public class ReceiveDemo {public static void main(String[] args) throws IOException {//创建接收端的Socket对象(DatagramSocket):DatagramSocket(int port)DatagramSocket ds = new DatagramSocket(1001);while(true) {//创建一个数据包接收数据byte[] bys = new byte[1024];DatagramPacket dp = new DatagramPacket(bys, bys.length);//调用DatagramSocket对象的方法接收数据:void receive(DatagramPacketp)ds.receive(dp);//解析数据包, 并把数据在控制台显示:byte[] getData()、int getLength()System.out.println("数据是:" + new String(dp.getData(), 0, dp.getLength()));}//关闭
//        ds.close();}
}

3 TCP通信程序

3.1 TCP通信原理

  • TCP通信协议是一种可靠的网络协议, 它在通信的两端名建立一个Socke对象, 从而在通信的两端形成网络虚拟链路
  • 一旦建立了 虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信
  • Java对基于TCP协议的的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生l0流来进行网络通信
  • Java为客户端提供了Socket类,为服务器端提供了ServerSocket类

3.2 TCP发送数据

  • 发送数据的步骤
    • 1、创建客户端的Socket对象(Socket):Socket(String host, int port)
    • 2、获取输出流,写数据:OutputStream对象的getOutputStream()方法
    • 3、释放资源:void close()
  • 范例:
package test;import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;public class ClientDemo {public static void main(String[] args) throws IOException {//1、创建客户端的Socket对象(Socket):Socket(String host, int port)Socket s = new Socket("127.0.0.1",1000);//2、获取输出流,写数据:OutputStream对象的getOutputStream()方法OutputStream os = s.getOutputStream();os.write("hello,java".getBytes());//3、释放资源:void close()s.close();}
}

3.3 TCP接收数据

  • 接收数据的步骤

    • 1、创建服务 器端的Socket对象(ServerSocket):ServerSocket(int port)
    • 2、监听客户端连接, 返回个Socket对象:Socket accept()
    • 3、获取输入流, 读数据,并把数据显示在控制台:InputStream对象的getInputStream()方法
    • 4、释放资源:void close()
  • 范例

package test;import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;public class SeverDemo {public static void main(String[] args) throws IOException {//1、创建服务 器端的Socket对象(ServerSocket):ServerSocket(int port)ServerSocket ss = new ServerSocket(1000);//2、监听客户端连接, 返回个Socket对象:Socket accept()Socket s = ss.accept();//3、获取输入流, 读数据,并把数据显示在控制台:InputStream对象的getInputStream()方法InputStream is = s.getInputStream();byte[] bys = new byte[1014];int len = is.read(bys);String data = new String(bys,0,len);System.out.println(data);//4、释放资源:void close()s.close();ss.close();}
}

3.4 案例

3.4.1 练习一:服务器给出反馈

在这里插入图片描述

  • 客户端
package test;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;public class ClientDemo {public static void main(String[] args) throws IOException {//1、创建客户端的Socket对象(Socket):Socket(String host, int port)Socket s = new Socket("127.0.0.1",1000);//2、获取输出流,写数据:OutputStream对象的getOutputStream()方法OutputStream os = s.getOutputStream();os.write("hello,java".getBytes());//接收服务器反馈InputStream is = s.getInputStream();byte[] bys = new byte[1024];int len = is.read(bys);String data = new String(bys,0,len);System.out.println("客户端:"+data);//3、释放资源:void close()s.close();//客户端:数据已经收到}
}
  • 服务器
package test;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class SeverDemo {public static void main(String[] args) throws IOException {//1、创建服务 器端的Socket对象(ServerSocket):ServerSocket(int port)ServerSocket ss = new ServerSocket(1000);//2、监听客户端连接, 返回个Socket对象:Socket accept()Socket s = ss.accept();//3、获取输入流, 读数据,并把数据显示在控制台:InputStream对象的getInputStream()方法InputStream is = s.getInputStream();byte[] bys = new byte[1014];int len = is.read(bys);String data = new String(bys,0,len);System.out.println("服务器:"+data);//给出反馈OutputStream os = s.getOutputStream();os.write("数据已经收到".getBytes());//4、释放资源:void close()s.close();ss.close();//服务器:hello,java}
}

3.4.2 练习二:客户端数据来源于键盘录入

在这里插入图片描述

  • 客户端
package test;import java.io.*;
import java.net.Socket;public class ClientDemo {public static void main(String[] args) throws IOException {//创建客户端的Socket对象(Socket):Socket(String host, int port)Socket s = new Socket("127.0.0.1",1000);//数据来源于键盘录入,直到886停止System.out.println("请输入数据");BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//封装输出流对象BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line;while((line= br.readLine())!=null) {if("886".equals(line)) {break;}//获取输出流对象bw.write(line);bw.newLine();bw.flush();}//释放资源s.close();//        hello
//        886}
}
  • 服务器
package test;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class SeverDemo {public static void main(String[] args) throws IOException {//1、创建服务 器端的Socket对象(ServerSocket):ServerSocket(int port)ServerSocket ss = new ServerSocket(1000);//2、监听客户端连接, 返回个Socket对象:Socket accept()Socket s = ss.accept();//3、获取输入流, 读数据,并把数据显示在控制台:InputStream对象的getInputStream()方法
//        InputStream is = s.getInputStream();
//        InputStreamReader isr = new InputStreamReader(is);
//        BufferedReader br = new BufferedReader(isr);BufferedReader br  = new BufferedReader(new InputStreamReader(s.getInputStream()));String line;while((line=br.readLine())!=null) {System.out.println(line);}//4、释放资源:void close()s.close();//hello}
}

3.4.3 练习三:服务器数据写入文本文件

在这里插入图片描述

  • 服务器
package test;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class SeverDemo {public static void main(String[] args) throws IOException {//1、创建服务 器端的Socket对象(ServerSocket):ServerSocket(int port)ServerSocket ss = new ServerSocket(1000);//2、监听客户端连接, 返回个Socket对象:Socket accept()Socket s = ss.accept();//3、获取输入流, 读数据,并把数据显示在控制台:InputStream对象的getInputStream()方法BufferedReader br  = new BufferedReader(new InputStreamReader(s.getInputStream()));//把数据写入文本文件BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\test\\java.txt"));String line;while((line=br.readLine())!=null) {bw.write(line);bw.newLine();bw.flush();}//4、释放资源:void close()bw.close();ss.close();//文件中数据:hello}
}

3.4.4 练习四:客户端数据来源于文本文件

在这里插入图片描述

  • 客户端
package test;import java.io.*;
import java.net.Socket;public class ClientDemo {public static void main(String[] args) throws IOException {//创建客户端的Socket对象(Socket):Socket(String host, int port)Socket s = new Socket("127.0.0.1",1000);//封装文本文件数据BufferedReader br  =new BufferedReader(new FileReader("E:\\test\\fos.txt"));//封装输出流对象BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line;while((line= br.readLine())!=null) {//获取输出流对象bw.write(line);bw.newLine();bw.flush();}//释放资源br.close();s.close();}
}

3.4.5 练习五:上传文件服务器给出反馈

![在这里插入图片描述](https://img-blog.csdnimg.cn/5505

  • 客户端
package test;import java.io.*;
import java.net.Socket;public class ClientDemo {public static void main(String[] args) throws IOException {//创建客户端的Socket对象(Socket):Socket(String host, int port)Socket s = new Socket("127.0.0.1",1000);//封装文本文件数据BufferedReader br  =new BufferedReader(new FileReader("E:\\test\\fos.txt"));//封装输出流对象BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line;while((line= br.readLine())!=null) {//获取输出流对象bw.write(line);bw.newLine();bw.flush();}//        //自定义结束标记
//        bw.write("886");
//        bw.newLine();
//        bw.flush();s.shutdownOutput();//Socket类中方法:表示输出结束//接收反馈BufferedReader brClient = new BufferedReader(new InputStreamReader(s.getInputStream()));String data = brClient.readLine(); //等待读取数据System.out.println("服务器的反馈:"+data); //服务器的反馈:文件上传成功//释放资源br.close();s.close();}
}
  • 服务端
package test;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class SeverDemo {public static void main(String[] args) throws IOException {//1、创建服务 器端的Socket对象(ServerSocket):ServerSocket(int port)ServerSocket ss = new ServerSocket(1000);//2、监听客户端连接, 返回个Socket对象:Socket accept()Socket s = ss.accept();//3、获取输入流, 读数据,并把数据显示在控制台:InputStream对象的getInputStream()方法BufferedReader br  = new BufferedReader(new InputStreamReader(s.getInputStream()));//把数据写入文本文件BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\test\\java.txt"));String line;while((line=br.readLine())!=null) { //等待读取数据
//            if("886".equals(line)) {
//                break;
//            }bw.write(line);bw.newLine();bw.flush();}//给出反馈BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));bwServer.write("文件上传成功");bwServer.newLine();bwServer.flush();//4、释放资源:void close()bw.close();ss.close();}
}

3.4.6 练习六:多线程实现文件上传

在这里插入图片描述

  • 服务端
package test;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class SeverDemo {public static void main(String[] args) throws IOException {//创建服务 器端的Socket对象(ServerSocket):ServerSocket(int port)ServerSocket ss = new ServerSocket(1000);while(true) {//监听客户端连接, 返回个Socket对象:Socket accept()Socket s = ss.accept();//为每一个客户端开启一个线程new Thread(new ServerThread(s)).start();}}
}
  • 服务端多线程
package test;import java.io.*;
import java.net.Socket;public class ServerThread implements Runnable {private Socket s;public ServerThread(Socket s) {this.s = s;}@Overridepublic void run() {try {//接收数据写入文本文件BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//            BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\test\\java.txt"));//解决名称冲突问题,上传到不同文件中int count = 0;File file = new File("E:\\test\\["+count+"]java.txt");while(file.exists()) {count++;file = new File("E:\\test\\["+count+"]java.txt");}BufferedWriter bw = new BufferedWriter(new FileWriter(file));String line;while ((line=br.readLine()) != null) {bw.write(line);bw.newLine();bw.flush();}//给出反馈BufferedWriter bwSever  =new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));bwSever.write("文件上传成功");bwSever.newLine();bwSever.flush();//释放资源s.close();}catch (IOException e) {e.printStackTrace();}}
}

http://chatgpt.dhexx.cn/article/DwUINC6y.shtml

相关文章

Java网络编程入门(软件结构、网络通信协议、网络编程三要素)

文章目录 🐕软件结构🐶网络通信协议🦁协议分类🐅网络编程三要素🐆协议🐎IP地址🦌端口号 🐕软件结构 C/S结构 :全称为Client/Server结构,是指客户端和服务器结…

黑客编程入门 之 网络编程入门

网络编程入门 前言Socket技术详细介绍Socket 编程所需函数服务器/客户 代码 前言 “任何职业都可以成为黑客。你可以是一个木匠黑客。不一定是高科技。只要与技能有关,并且倾心专注于你正在做的事情,你就可能成为黑客。” ——引自《黑客伦理与信息时代精…

WinPcap网络编程入门——1. 获取设备列表

WinPcap网络编程入门——1. 获取设备列表 系列教程章节直达: Winpcap网络编程入门——1. 获取设备列表; 上节中我们简单介绍了 WinPcap 的相关资料,配置好了开发环境,现在就让我们正式开始网络编程开发吧! 1. 基本开…

网络编程入门(代码很详细)

网络编程 1.1概述 计算机网络:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算…

网络编程——(1)网络编程入门

一、软件架构 1.1C/S结构: 全称Client/Server结构,是指客户端和服务器结构。常见的程序有QQ、迅雷等。 1.2 B/S结构: 全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。 两种架构各有优势&#xf…

网络编程入门

1.网络编程入门 1.1网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 网…

线性代数学习笔记——第六讲——矩阵的转置

1. 矩阵转置的定义(矩阵的行和列互换位置) 2. 矩阵转置的性质之一:矩阵转置一次后再转置一次,等于矩阵自身(有点像一个两状态开关,在开与关之间来回切换) 3. 对称矩阵的充要条件是矩阵转置一次后…

转置矩阵、对称矩阵、反对称矩阵以及向量的反对称矩阵

一、转置矩阵 假设矩阵 A 如下表示: 则其转置矩阵表示为: 二、对称矩阵 若矩阵 B 与其转置矩阵相等,则称矩阵 B 为对称矩阵,如: 三、反对称矩阵 若矩阵 C 与其转置矩阵取负后相等,则称矩阵 C 为反对称矩…

Java编程之转置矩阵

一、题目 利用随机函数产生36个10~30之间的整数给一个6*6的矩阵赋值。 (1)求最大元素,并指出其在矩阵中的所有出现位置; (2)求该矩阵的转置矩阵。 二、实验代码 package fighting; import java.util.Rand…

FPGA 矩阵转置

这里写目录标题 1 功能2 开发环境3 框架4 转置公式5 Simulation第一部分第二部分第三部分 6 Matlab代码产生FIFO数据产生转置矩阵 7 HDL仿真文件顶层文件FIFO顶层文件FIFO读FIFO写RAM顶层文件 8 IP配置FIFORAMROM 9 Reference 1 功能 通过tb读取本地数据保存到FIFO&#xff0c…

MATLAB的转置

小席的碎碎叨:   以前处理的数据通常都是实数矩阵,一直认为MATLAB中的转置可用实现,并没有发现有什么不对。但是,这段时间在做线性调频信号的干扰抑制的仿真,其信号矩阵都是复数矩阵,依然在需要转置的时候…

矩阵转置(transpose、T)

1.T T 适用于一、二维数组的转置 transpose 适用于高维数组,需要用到一个由轴编号组成的元组,才能进行转置 In [1]: import numpy as npIn [2]: arr np.arange(20).reshape(4,5)#生成一个4行5列的数组In [3]: arr Out[3]: array([[ 0, 1, 2, 3, 4]…

线性代数:转置矩阵(matrix transpose)和逆矩阵(matrix inverse)

这一篇是为了后面着色效果的数学基础做积累,之前我们使用矩阵的大部分情况都是直接的仿射空间变换,就是仿射空间A变换到仿射空间B,使用矩阵也都是如下: 矩阵T*齐次坐标V 齐次坐标V 其计算细节也就是矩阵行与向量列的点积&#xf…

转置矩阵(matrix transpose)和逆矩阵(matrix inverse)的相关公式

转载自: https://blog.csdn.net/yinhun2012/article/details/84236202 这一篇是为了后面着色效果的数学基础做积累,之前我们使用矩阵的大部分情况都是直接的仿射空间变换,就是仿射空间A变换到仿射空间B,使用矩阵也都是如下: 矩阵T…

转置矩阵(Transpose of a matrix)

定义 给定一个矩阵 A,将矩阵的行列互换得到的新矩阵称为转置矩阵,记为 ,。转置矩阵的行列式不变,即 。转置矩阵由下列动作建立: 将 A 的横行写为 的纵列;将 A 的纵列写成 的横行。 形式来说&#xff0…

数据结构--3.3 矩阵转置

矩阵转置 结构体创建初始化转置打印测试代码运行结果 1.稀疏矩阵的压缩存储,至少需要存储以下信息: 矩阵中各非 0 元素的值,以及所在矩阵中的行标和列标; 矩阵的总行数和总列数; 上图是一个稀疏矩阵,若对…

D2D与其他短距离通信技术

本篇文章主要对D2D和其他短距离通信技术(WIFI\NFC\zigbee\蓝牙、超宽带、微站)做了比较,从运营商投入、基础设施、应用、最大传输速率、最大传输距离、频率、标准、特征等方面

D2D引擎与GDI\GDI+绘制效果对比

本例主要是对比D2D和GDI在绘制文字、线条的区别,以及D2D与GDI在绘制图片时的区别。 D2D是基于COM组件开发的,使用前的CoInitialize(NULL)是必须的;另外,GDI的初始化GdiplusStartup()也别忘了。 废话少说&…

D2D加载图片资源(2)

※先给大家认识下什么是WIC WIC全称是Windows Image Component,是一套扩展的API,用来处理数字图像,它是基于COM组件的。该API包含非常丰富的图像处理函数。 详细可以点击百度文库再看看 http://baike.baidu.com/view/414115.htm?fraladdi…

5G关键技术,D2D通信-ielab

D2D(device to device)技术是指两个对等的用户节点之间直接进行通信的一种通信方式。在由D2D通信用户组成的分散式网路中,每个用户节点都能发送和接收信号,并具有自动路由(转发消息)的功能。网路的参与者共用它们所拥有的一部分硬…