- 浏览: 146637 次
- 性别:
- 来自: 上海
-
文章分类
最新评论
-
gaobo8993:
看了不是很懂,学习一下吧
struts多模块的一些问题 -
zhaofangtao:
对了,还有个问题
我们3A4C发送数据量稍大的订单时候,比如 ...
webMethods之Developer (2) -
zhaofangtao:
hi
谢谢你的知识分享
我半道出家还是半桶水,想请教您webm ...
webMethods之Developer (2) -
dr2tr:
刚看到eye上面另一位老兄的文章,http://lucasle ...
Singleton和Double Check
Lesson09A-1.rmvb
网络编程概述
java网络编程类:java.net包
UDP通信:DatagramSocket类
TCP通信服务器端:ServerSocket类; 还有Socket类可用于TCP通信的服务器端和客户端。
**************************************************************************
Lesson09A-2.rmvb
UDP网络程序:DatagramSocket类,DatagramPacket类,InetAddress类
DatagramSocket类
public DatagramSocket()
public DatagramSocket(int port)
public DatagramSocket(int port, InetAddress laddr) //拥有多个IP地址的计算机
DatagramSocket的close方法,释放资源
send(DatagramPacket p)方法,发送UDP数据包
receive(Datagrampacket p)方法,接受UDP数据包
DatagramPacket类:数据的容器(集装箱)
public DatagramPacket(byte[] buf, int length) //数据接收时使用,buf是缓冲区,未必被完全使用
public DatagramPacket(byte[] buf, int length, InetAddress address, int port) //数据发送时使用,后两个参数指定接受方的IP和端口
getInetAddress方法和getPort方法获取发送方的IP和端口。
GetData和getLength方法:分别返回buf和实际接受到的数据长度
InetAddress类,用于表示IP地址的类
getByName静态方法:由hostname(或者IP)获得InetAddress
getHostAddress方法:返回InetAddress中包装的IP地址(以xxx.xxx.xxx.xxx的字符串返回)
这里还牵涉到byte与String的转换问题
另外,当传送的String中包含UNICODE字符(如中文字符)时,不能简单地用String.length()获得String的字节数(因为length返回的是字符数),而必须用String.getBytes().length获得其长度,作为构造DatagramPacket的参数。
实例程序:
发送:注意注释部分
import java.net.*;
public class UdpSend {
public static void main(String[] args) throws Exception{
DatagramSocket ds = new DatagramSocket();
String msg = "你好, guy!哈哈"; //在程序中,我们发现,如果字符串的“哈哈”二字去除,则即使在以下的msg.getBytes().length改为msg.length(),程序也能正常处理中文部分。即:只有在尾部的中文会被忽略,不知道为什么?
DatagramPacket dp = new DatagramPacket(msg.getBytes(), msg.getBytes().length, InetAddress.getByName("127.0.0.1"),1000);
ds.send(dp);
ds.close();
}
}
接收:
import java.net.*;
public class UdpRcv {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket(1000);
byte[] b = new byte[1024];
DatagramPacket dp = new DatagramPacket(b, b.length);
ds.receive(dp);
System.out.println("received msg: " + new String(dp.getData(), 0, dp.getLength()));
}
}
Lesson09A-3.rmvb
用UDP编写网络聊天程序
1.程序中必须新建一个线程用来处理接收操作
new Thread(new Runnable(){
public void run(){
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, 1024);
while(true){
try{
ds.receive(dp);
//显示内容处理
}catch(Exception e){
if(!ds.isClosed()){
e.printStackTrace();
}
}
}
}
}).start();
2.本程序可以给本机发信,也可以通过广播地址,广播发信。但是不能透过网关通信。
在程序编写中遇到的问题:
1.为JList添加一个选项用哪个函数?List有add,JList没有。
程序代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
/**
* Sample application using Frame.
*
* @author
* @version 1.00 06/02/04
*/
public class ChattingRFrame extends JFrame {
List jl = new List();
JPanel jp = new JPanel();
JTextField jtf_IP = new JTextField(15);
JTextField jtf_msg = new JTextField(20);
DatagramSocket ds = null;
/**
* The constructor.
*/
public ChattingRFrame() {
try{
ds = new DatagramSocket(10000);
}catch(Exception e){
e.printStackTrace();
}
new Thread(new Runnable(){
public void run() {
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, 1024);
while(true){
try{
ds.receive(dp);
String msg = new String(dp.getData(), 0, dp.getLength());
jl.add(dp.getAddress().toString() + ": " + msg, 0); //显示内容处理
}catch(Exception e){
if(!ds.isClosed()){
e.printStackTrace();
}
}
}
}
}).start();
this.getContentPane().add(jl, "Center");
this.getContentPane().add(jp, "South");
jp.setLayout(new BorderLayout());
jp.add(jtf_IP, BorderLayout.WEST);
jp.add(jtf_msg, BorderLayout.EAST);
setSize(new Dimension(400, 400));
jtf_msg.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
jl.add("I said: " + jtf_msg.getText(), 0);
try{
byte [] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(
jtf_msg.getText().getBytes(), jtf_msg.getText().getBytes().length, InetAddress.getByName(jtf_IP.getText()), 10000);
ds.send(dp);
}catch(Exception ex){
ex.printStackTrace();
}
jtf_msg.setText("");
}
}
);
// Add window listener.
this.addWindowListener
(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
ds.close();
ChattingRFrame.this.windowClosed();
}
}
);
}
/**
* Shutdown procedure when run as an application.
*/
protected void windowClosed() {
// TODO: Check if it is safe to close the application
// Exit application.
System.exit(0);
}
}
Lesson09A-4.rmvb
内网私有IP通过网关代理上网的原理
内网机器的 内网机IP:内网机port 被网关机改装成 网关IP:随机port ;另外,网关机维护一张IP转发表。记录由 内网机IP:内网机port 到 网关IP:特定随机port 的映射。IP转发表是有一定时效性的,表中某条记录一定时间不被使用的话会被清除。
可以修改之前的程序,使之能在内外网通信(当然,通信必须由内网机器发起)
(怎么改????)
Lesson09B-1
TCP网络程序:分为服务器程序(ServerSocket)和客户机程序(Socket)
通信流程:
1.服务器程序新建ServerSocket类,调用accept方法等待客户的连接
2.客户机程序创建一个Socket类,请求与服务器连接
3.服务器接收客户的连接请求,并创建一个新的Socket与该客户建立专线连接
4.建立了连接的两个Socket在一个单独的线程(由服务器程序创建)上对话
5.服务器开始等待新的连接请求,当新的连接请求到达时,重复2-5
ServerSocket类
public ServerSocket() //构造后还要用bind方法,以下三个都不用bind
public ServerSocket(int port) //最常用
public ServerSocket(int port, int backlog) //backlog指定可与服务器连接的客户机数量,默认50
public ServerSocket(int port, int backlog, InetAddress bindAddr) //计算机上有多张网卡(多个IP)
与DatagramSocket一样,需要用close方法释放连接
accept方法,等待客户端的连接请求(一旦连接完成,返回一个Socket对象);无连接请求时,accept一直保持阻塞状态
Socket类
public Socket(); //构造后还要用connect方法,才能被使用,适用于用一个Socket轮询多个服务器。
public Socket(String host, int port); //host指定IP地址
public Socket(InetAddress address, int port);
//以下两种构造方式适合于一台机器上有多张网卡(多IP)的情况
public Socket(String host, int port, InetAddress localAddr, int localPort);
public Socket(InetAddress address, int port, InetAddress localAddr, int localPort);
以上所有的构造函数都用于客户端;服务器端的Socket用accept方法返回
getInputStream和getOutputStream返回Socket的输入输出流对象。
InputStream.read(byte[])方法用来读取客户端发送过来的数据,返回数据的字节长度。
OutputStream.write(byte[])方法用来向客户端发送信息。
InputStream和OutputStream需要关闭。(close)
服务器端程序的close顺序
1.InputStream, OutputStream(因为这两个是在Socket的基础上获得的(getInputStream和getOutputStream))
2.Socket(因为这是在ServerSocket的基础上产生的(accept返回))
3.ServerSocket
可以用BufferedReader类包装InputStream和OutputStream,使之在字节流和字符流间方便的自由转换,如:
InputStream is = s.getInputStream() //s是一个Socket对象
BufferedReader br = new BufferedReader(new InputStreamReader(is));
然后可以用br.readLine(),br.read()等方法方便的一次读取一行等。
另外,BufferReader也需要close.(在InputStream的close之前)
对于OutputStream,可以用PrintWriter包装
如:OutputStream os = s.getOutputStream();
PrintWriter pw = new PrintWriter(os);
PrintWriter的println函数可以向客户端发出一行字符串(并换行),并且这个换行符可以根据操作系统的不同作变化(在Linux产生的换行符为'\n',Windows下为'\n';这与PrintStream不同,PrintStream无论在哪个操作系统的换行符都是'\n').另外,在用PrintWriter时,默认的自动刷新是关闭的,需要在构造函数中指定打开自动刷新;//??而PrintStream的自动刷新是开启的。
以下是程序的代码:
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10000);
Socket s = ss.accept();
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
// PrintWriter pw = new PrintWriter(os/*,true*/);
// pw.println("Welcome , haha!");
PrintStream ps = new PrintStream(os);
ps.println("Welcome , haha!");
//os.write("Welcome , haha!".getBytes());
/*这种写法的话,这个程序接收一个字符后就与客户机断开了。
byte[] buf = new byte[1024];
int length = is.read(buf);
*/
//用BufferedReader包装
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//System.out.println(new String(buf, 0, length));
//System.out.println(new String(buf, 0, length));
System.out.println(br.readLine());
//pw.println("you said: " + br.readLine());
ps.println("you said: " + br.readLine());
br.close();//br也要关闭(是不是br关闭了,is就不用close了???)
is.close();//注意下面的关闭顺序
os.close();
s.close();
ss.close();
}
}
Lesson09B-2
编写完善的TCP服务器模型,能接受多个客户端连接,并且能独立互不干扰地完成相应要点:
1.TCP服务器程序要想能接收多个客户端连接,需要循环调用ServerSocket.accept方法。
2.服务器程序与每个客户端连接的会话过程不能相互影响,需要在独立的线程中运行(多线程)
3.一个线程服务对象与一个服务器端Socket对象相关联,共同完成与一个客户端的对话。
程序如下:
import java.net.*;
import java.io.*;
public class TCPServerThread implements Runnable {
private Socket s = null;
public TCPServerThread(Socket s) throws Exception{
this.s = s;
}
public void run(){
try{
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
PrintWriter pw = new PrintWriter(os, true);
pw.println("Welcome to ReverseServer");
while(true){ //几乎所有TCP服务器程序模型都是如这个程序,区别就在于这个循环体里的内容
String clientStr = br.readLine();
boolean exit = false;
try{
exit = clientStr.equalsIgnoreCase("exit");
}catch(NullPointerException exc){
ConverseServer.lessConnector(); //非exit退出,也需要减少连接数
}
if(exit){
break;
}
StringBuffer sb = new StringBuffer(clientStr);
StringBuffer ServerStrBuf = sb.reverse(); //TIPS:字符串的反转可以用StringBuffer的reverse方法实现。
pw.println(clientStr + " -> " + ServerStrBuf.toString());
br.close(); //问题:br.close之后是不是is就不需要close了?
pw.close(); //pw.close后os就不需要close了?
s.close();
ConverseServer.lessConnector();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
import java.net.*;
import java.io.InputStream;
import java.io.OutputStream;
public class ConverseServer {
private static int connectNum = 0;
public static void addConnector(){
connectNum++;
System.out.println("one logon! " + ConverseServer.getConnectNum() + " connected totally");
}
public static void lessConnector(){
connectNum--;
System.out.println("one exited! " + ConverseServer.getConnectNum() + " connected totally");
}
public static int getConnectNum(){
return connectNum;
}
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10000);
boolean run = true;
while(run){
Socket s = ss.accept();
ConverseServer.addConnector();
new Thread(new TCPServerThread(s)).start();
}
ss.close();
}
}
检测解决端口冲突问题
netstat查看当前已被占用的端口
解决方法:通过一个配置参数指定TCP服务程序的端口号(命令提示行中的参数或保存一个配置文件)
TCP客户端程序的编写
1、创建Socket
2、getInputStream和getOutputStream
3、定义BufferedReader和PrintWriter;另外,与服务器端程序不同的是,通常需要定义键盘输入流(的包装)(BufferedReader keyBr = new BufferedReader(new InputStreamReader(System.in));)。之后用keyBr获取客户端的输入,然后用PrintWriter对象的println方法将输入内容发送到服务器。
以下是(上一个服务器端程序配套的)客户端程序实例:
import java.net.*;
import java.io.*;
public class TCPClient {
public static void main(String[] args) throws Exception{
Socket s = new Socket("127.0.0.1", 10000);
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
BufferedReader br_keyboard = new BufferedReader(new InputStreamReader(System.in)); //读取客户端本地的键盘输入
BufferedReader br_server = new BufferedReader(new InputStreamReader(is)); //读取来自服务器的信息
PrintWriter pw = new PrintWriter(os, true); //用于向服务器发送信息
while(true){
System.out.println(br_server.readLine());
String input = br_keyboard.readLine();
pw.println(input);
if(input.equalsIgnoreCase("exit")){
break;
}
}
//close操作在while循环之后
br_server.close();
br_keyboard.close();
pw.close();
s.close();
}
}
在TCP网络连接上传递对象
ObjectInputStream(像BufferedReader一样包装InputStream对象即可,public ObjectInputStream(InputStream))和ObjectOutputStream(像PrintWriter一样包装OutputStream对象即可,public ObjectOutputStream(OutputStream))
!!!要传递的类必须实现Serializable接口
以下是简单的实例程序
import java.io.*;
public class Student implements Serializable{ //必须实现Serializable接口,否则会报异常
public int stu_id;
public String stu_name;
public Student(int id, String name){
stu_id = id;
stu_name = name;
}
}
import java.net.*;
import java.io.*;
public class TCPObjectClient {
public static void main(String[] args) throws Exception{
Socket s = new Socket("127.0.0.1", 10000);
InputStream is = s.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is); //这是传输Object与传输String的区别之处
Student stu = (Student)ois.readObject();
System.out.println(stu.stu_id);
System.out.println(stu.stu_name);
}
}
import java.net.*;
import java.io.*;
public class TCPObject {
public static void main(String[] args) throws Exception{
ServerSocket ss = new ServerSocket(10000);
Socket s = ss.accept();
OutputStream os = s.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os); ////这是传输Object与传输String的区别之处
Student stu = new Student(1, "stuName1");
oos.writeObject(stu);
oos.close();
s.close();
ss.close();
}
}
Lession9c-1
访问Internet网络资源
java.net包中的URL,URLDecoder,URLEncoder,URLConnection,HttpURLConnection等类
URL:Uniform Resource Locator
组成:协议、主机名、段口号、资源名。(资源名大小写敏感)
URL编码规则:
空格转为+;
数字字母不变
其他字符用其在当前字符集中的十六进制表示,并在每个字节前加%。空格也可用%20表示。
URLEncoder和URLDecoder用来实现编码和解码
HTTP协议会话过程
HTTP1.0:
步骤:1.客户机发出请求建立连接2.客户机发出请求信息3.服务器发出响应信息4.服务器关闭连接
浏览器主动请求,服务器被动接受。每一次信息请求都新建一个连接,而不是多个请求共享一个连接
HTTP1.1
每一个网页中多个信息请求(如同一页面中多个图片的信息请求)和应答可以在同一个连接中完成
HTTP消息:消息头可实现有条件的信息传送
HTTP请求消息
包括:一个请求行(GET /文件名 HTTP/1.1),若干消息头(Host,Connection,Accept-Language等)以及实体内容
HTTP响应消息
包括:一个状态行,若干消息头(Server,Date,Content-Length等)以及实体内容
几个重要的HTTP消息头
Connection:请求消息头,指定处理完本次请求/响应后,客户机与服务器是否继续保持连接。设置值为Keep-Alive(默认)和close
Accept-Lanaguage:请求消息头,指定客户机期望服务器返回的文档的语言
Content-Length:响应消息头,实体内容的长度(字节数)
Range:请求消息头, 用于指定服务器只需返回文档中的部分内容及内容范围(对断电续传很有用)
格式:1)Range:bytes=100-599
2)Range:bytes=100-(要求服务器返回第100字节后的内容)
3)Range:bytes=-100(返回最后100字节)
Content-Range:响应消息头,指定服务器返回的部分实体内容的位置信息
格式:Content-Range: bytes 2543-4532/7898(共7898字节,取2543-4532字节)
Lession9c-2
URL类
构造函数(可引发MalformedURLException异常)
public URL(String spec)
public URL(String protocol, String host, int port, String file)
public URL(String protocol, String host, int port, String file, URLStreamHandler handler(协议处理器))
public URL(URL context, String spec)
getProtocol, getHost, getPort, getFile方法
URL类中的openConnection方法调用协议处理器(URLStreamHandler)的openConnection方法返回URLConnection,然后调用URLConnection方法可以获得网页资源中的具体内容
工厂设计模式
URL类的setURLStreamHandlerFactory(URLStreamHandlerFactory fac)静态方法,其中的参数URLStreamHandlerFatory指定协议名和协议处理器的对应关系
URLStreamHandlerFactory类的createURLStreamHandler(String protocol)方法用来建立与协议名protocol相应的协议处理器(URLStreamHandler)
其实JVM内部也维护着一个协议名和协议处理器的对照表,当程序没有用setURLStreamHandlerFactory设置URLStreamHandlerFactory,或者createURLStreamHandler(String protocol)返回null时,JVM将会用它的内部的对照表设置prococol对应的协议处理器。但当JVM内部也没有这样的protocol名时,则会报MalformedURLException异常。
当要用一个或多个自定义的协议处理器时,才需要编写实现了URLStreamHandlerFactory接口的类,并实现createURLStreamHandlerFactory方法
JVM最多只能调用一次setURLStreamHandlerFactory方法,并且应在创建任何URL实例对象前被调用
工厂类
设某类(抽象类或者接口)有多个子类(或实现),则可建立一个工厂类,通过这个工厂类的某个函数(的参数)确定生产哪个子类(或实现)
URLConnetion和HTTPURLConnection类
获取信息内容
URLConnection连接过程:在实例对象建立后,网络连接也未必建立
因此在连接建立前,可以用它的setRequestProperty方法设置消息头。
在连接建立后,就可以用各种方法获取服务器返回的各种信息,如getHeaderFields等。连接建立后,setRequestProperty方法将被忽略。
getInputStream和getOutputStream方法
getHeaderFilder, getContentLength, getContentEncoding, getContentType等方法
一个HttpURLConnection只能用于一次会话请求(一次请求,一次回应),但一个HTTP连接可以被多个HttpURLConnection实例对象共享,调用disconnect方法可以彻底关闭底层共享网络。
Lession9c-3
编程:用URLConnection和HttpURLConnection类访问WEB站点
要点:
1、建立URL对象
2、建立HttpURLConnection对象(URL.openConnection()方法)
3、用setRequestProperty设置HttpURLConnection对象的部分参数
4、调用HttpURLConnection对象的connect方法(如果后面有get方法,这步可以省略)
5、调用各种get方法
一个简单的程序示例,获取google首页的源代码:
import java.net.*;
import java.io.*;
public class URLConnection {
public static void main(String[] args) throws Exception{
URL u = new URL("http://www.google.com");
HttpURLConnection huc = (HttpURLConnection)u.openConnection();
huc.setRequestProperty("Accept-Language","zh-cn");
InputStream is = huc.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
System.out.println("content of google");
String content = null;
while((content = br.readLine()) != null){
System.out.println(content);
}
}
}
相关推荐
本章学习笔记重点介绍了Servlet的基本概念和生命周期管理,以及相关的寒假作业安排。对于Java Web开发者来说,掌握Servlet的工作原理及其生命周期是非常重要的。同时,按照计划完成寒假作业可以帮助巩固所学知识,并...
作者在寒假期间进行了知识整理,说明这份资料包含了作者的学习心得和经验教训。从“大部分知识点都是在网上找的,然后结合自己的”可以推测,这份压缩包可能包括了网络上各种优质的学习资源,同时融入了作者个人的...
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
8c71b76fb2ec10cf50fc6b0308d3dcfc_9545878e2b97a84b2e089ece58da9e82
Android逆向过程学习
内容概要:本文详细介绍了基于西门子S7-200 PLC的糖果包装控制系统的设计与实现。首先阐述了PLC在工业自动化领域的优势及其在糖果包装生产线中的重要性。接着深入探讨了系统的硬件连接方式,包括传感器、执行机构与PLC的具体接口配置。随后展示了关键的编程实现部分,如糖果计数、包装执行、送膜控制、称重判断以及热封温度控制等具体梯形图代码片段。此外,还分享了一些实用的经验技巧,如防止信号抖动、PID参数优化、故障诊断方法等。最后总结了该系统的优势,强调其对提高生产效率和产品质量的重要作用。 适合人群:从事工业自动化控制、PLC编程的技术人员,尤其是对小型PLC系统感兴趣的工程师。 使用场景及目标:适用于糖果制造企业,旨在提升包装生产线的自动化程度,确保高效稳定的生产过程,同时降低维护成本并提高产品一致性。 其他说明:文中不仅提供了详细的理论讲解和技术指导,还结合实际案例进行了经验分享,有助于读者更好地理解和掌握相关知识。
内容概要:本文详细介绍了参与西门子杯比赛中关于三部十层电梯系统的博图V15.1程序设计及其WinCC画面展示的内容。文中不仅展示了电梯系统的基本架构,如抢单逻辑、方向决策、状态机管理等核心算法(采用SCL语言编写),还分享了许多实际调试过程中遇到的问题及解决方案,例如未初始化变量导致的异常行为、状态机遗漏空闲状态、WinCC画面动态显示的挑战以及通信配置中的ASCII码解析错误等问题。此外,作者还特别提到一些创意性的设计,如电梯同时到达同一层时楼层显示器变为闪烁爱心的效果,以及节能模式下电梯自动停靠中间楼层的功能。 适合人群:对PLC编程、工业自动化控制、电梯调度算法感兴趣的工程技术人员,尤其是准备参加类似竞赛的学生和技术爱好者。 使用场景及目标:适用于希望深入了解PLC编程实践、掌握电梯群控系统的设计思路和技术要点的人士。通过学习本文可以更好地理解如何利用PLC进行复杂的机电一体化项目的开发,提高解决实际问题的能力。 其他说明:文章风格幽默诙谐,将严肃的技术话题融入轻松的生活化比喻之中,使得原本枯燥的专业知识变得生动有趣。同时,文中提供的经验教训对于从事相关领域的工作者来说非常宝贵,能够帮助他们少走弯路并激发更多创新思维。
慧荣量产工具合集.zip
内容概要:本文详细介绍了永磁同步电机(PMSM)的FOC(磁场定向控制)和SVPWM(空间矢量脉宽调制)算法的仿真模型。首先解释了FOC的基本原理及其核心的坐标变换(Clark变换和Park变换),并给出了相应的Python代码实现。接下来探讨了SVPWM算法的工作机制,包括扇区判断和占空比计算的方法。此外,文章还讨论了电机的PI双闭环控制结构,即速度环和电流环的设计与实现。文中不仅提供了详细的理论背景,还分享了一些实用的编程技巧和注意事项,帮助读者更好地理解和应用这些算法。 适合人群:电气工程专业学生、从事电机控制系统开发的技术人员以及对永磁同步电机控制感兴趣的科研人员。 使用场景及目标:① 学习和掌握永磁同步电机的FOC控制和SVPWM算法的具体实现;② 提供丰富的代码示例和实践经验,便于快速搭建和调试仿真模型;③ 探讨不同参数设置对电机性能的影响,提高系统的稳定性和效率。 其他说明:文章强调了在实际应用中需要注意的一些细节问题,如坐标变换中的系数选择、SVPWM算法中的扇区判断优化以及PI控制器的参数调整等。同时,鼓励读者通过动手实验来加深对各个模块的理解。
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
Android逆向过程学习
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
3dmax插件
# 【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar中文文档.zip】 中包含: 中文文档:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar中文文档.zip,java,spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar,org.springframework.ai,spring-ai-autoconfigure-vector-store-qdrant,1.0.0-M7,org.springframework.ai.vectorstore.qdr
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
内容概要:本文详细介绍了平方根容积卡尔曼滤波(SRCKF)在永磁同步电机(PMSM)控制系统中的应用及其相对于传统CKF的优势。文章首先指出传统CKF在处理协方差矩阵时存在的数值不稳定性和非正定问题,导致系统性能下降。接着,作者通过引入SRCKF,利用Cholesky分解和QR分解来确保协方差矩阵的正定性,从而提高状态估计的精度和稳定性。文中展示了具体的电机模型和状态方程,并提供了详细的代码实现,包括状态预测、容积点生成以及观测更新等关键步骤。此外,文章还分享了实际调试过程中遇到的问题及解决方案,如选择合适的矩阵分解库和处理电机参数敏感性。最终,通过实验数据对比,证明了SRCKF在突加负载情况下的优越表现。 适合人群:从事永磁同步电机控制研究的技术人员、研究生及以上学历的研究者。 使用场景及目标:适用于需要高精度状态估计的永磁同步电机控制系统的设计与优化,特别是在处理非线性问题和提高数值稳定性方面。 其他说明:文章引用了相关领域的权威文献,如Arasaratnam的TAC论文和Zhong的《PMSM无传感器控制综述》,并强调了实际工程实践中代码调试的重要性。
# 【tokenizers-***.jar***文档.zip】 中包含: ***文档:【tokenizers-***-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【tokenizers-***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【tokenizers-***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【tokenizers-***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【tokenizers-***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: tokenizers-***.jar***文档.zip,java,tokenizers-***.jar,ai.djl.huggingface,tokenizers,***,ai.djl.engine.rust,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,djl,huggingface,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【tokenizers-***.jar***文档.zip】,再解压其中的 【tokenizers-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件; # Maven依赖: ``` <dependency> <groupId>ai.djl.huggingface</groupId> <artifactId>tokenizers</artifactId> <version>***</version> </dependency> ``` # Gradle依赖: ``` Gradle: implementation group: 'ai.djl.huggingface', name: 'tokenizers', version: '***' Gradle (Short): implementation 'ai.djl.huggingface:tokenizers:***' Gradle (Kotlin): implementation("ai.djl.huggingface:tokenizers:***") ``` # 含有的 Java package(包): ``` ai.djl.engine.rust ai.djl.engine.rust.zoo ai.djl.huggingface.tokenizers ai.djl.huggingface.tokenizers.jni ai.djl.huggingface.translator ai.djl.huggingface.zoo ``` # 含有的 Java class(类): ``` ai.djl.engine.rust.RsEngine ai.djl.engine.rust.RsEngineProvider ai.djl.engine.rust.RsModel ai.djl.engine.rust.RsNDArray ai.djl.engine.rust.RsNDArrayEx ai.djl.engine.rust.RsNDArrayIndexer ai.djl.engine.rust.RsNDManager ai.djl.engine.rust.RsSymbolBlock ai.djl.engine.rust.RustLibrary ai.djl.engine.rust.zoo.RsModelZoo ai.djl.engine.rust.zoo.RsZooProvider ai.djl.huggingface.tokenizers.Encoding ai.djl.huggingface.tokenizers.HuggingFaceTokenizer ai.djl.huggingface.tokenizers.HuggingFaceTokenizer.Builder ai.djl.hu
3
pchook源码纯源码不是dll
# 【spring-ai-azure-store-1.0.0-M7.jar中文-英文对照文档.zip】 中包含: 中文-英文对照文档:【spring-ai-azure-store-1.0.0-M7-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【spring-ai-azure-store-1.0.0-M7.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【spring-ai-azure-store-1.0.0-M7.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【spring-ai-azure-store-1.0.0-M7.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【spring-ai-azure-store-1.0.0-M7-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: spring-ai-azure-store-1.0.0-M7.jar中文-英文对照文档.zip,java,spring-ai-azure-store-1.0.0-M7.jar,org.springframework.ai,spring-ai-azure-store,1.0.0-M7,org.springframework.ai.vectorstore.azure,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,springframework,spring,ai,azure,store,中文-英文对照API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【spring-ai-azure-store-1.0.0-M7.jar中文-英文对照文档.zip】,再解