黑马程序员——java高新技术——网络编程

本文详细介绍了网络编程的基础概念,包括网络模型、网络通讯要素、以及如何使用InetAddress类进行IP地址操作。重点阐述了UDP和TCP的区别与应用场景,并提供了UDP和TCP传输的实践案例。同时,文章还探讨了Socket和ServerSocket的使用方法,以及如何通过URL类进行远程资源访问。

点击打开链接 点击打开链接 点击打开链接 android培训、<a">点击打开链接 点击打开链接 java培训、期待与您交流!">点击打开链接 点击打开链接

 

网络编程

网络模型

l   OSI参考模型

l   TCP/IP参考模型

 

网络通讯要素

l   IP地址:网络中设备的标识,不易记忆,可用主机名,本地回环地址,127.0.0.1  主机名:localhost

l   端口号:用于标识进程的逻辑地址,不同进程的标识,有效端口:0~65535,其中0~1024系统使用或保留端口

l   传输协议:通讯的规则,常见协议:TCPUDP

 

网络通讯的一般过程

1.找到对方IP

2.数据要发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识。为了方便称呼这个数字,叫做 端口,逻辑端口。0~65535

3.定义一个通信规则。这个通讯规则成为协议。国际组织定义了通用协议TCP/IP通信。UDP

 

InetAddress类:此类表示互联网协议(IP)地址

static InetAddress  | getLocalHost():获取本地主机

String  |   getHostAddress():返回IP地址字符串

String  |   getHostName():获取此IP地址的主机名

static InetAdress  |   getByAddress(byte[] addr):再给定原始IP地址的情况下,返回InetAddress对象

Static InetAddress  |  getByAddress(String host,byte[] addr):根据给定主机和IP地址创建InetAddress

Static InetAddress  |  getByName(String host)在给定主机的情况下确定主机的IP地址。

static InetAddress[]  |  getAllBynames(String host):在给定主机名的情况下,根据系统上配置的名称服务返回其所组成的数组。

 

TCP和UDP

UDP:聊天,视频会议

   将数据及源和目的封装成数据包中,不需要建立连接

   每个数据报的大小限制在64K

   因无连接,是不可靠协议

   不需要建立连接,速度快

TCP:下载

   建立连接,形成传输数据的通道

   在连接中进行大数据量传输

   通过三次握手完成连接,是可靠协议

   必须建立连接,效率会稍低

 

UDP传输

DatagramSocket:此类表示用来发送和接收数据报包的套接字。

构造函数:DatagramSocketint port:指定端口

           DatagramSocket():

重要方法:

 void  |  send(DatagramPacket p):发送数据报包

 void  |  receive(DatagramPacket p) :接收数据报包

 

DatagramPacket 类:此类表示数据报包。

构造函数:

DatagramPacket(byte[] buf,int length)

DatagramPacket(byte[] buf,int length,InetAddress address,int port)

重要方法:

 InetAddress  |  getAddress():返回此数据报将要发往该主机或者从该机器接收到的IP地址。

  byte[]      |  getData():返回缓冲区数据

    int       |  getLength():返回将要发生或接收到的数据的长度

 int      |  getPort():获取此数据报将要发送往该主机或从该主机接收到的端口

 

通过UDP传输方式,将一段文字数据发送出去。

1.建立updSocket服务

2.提供数据,并将数据封装到数据包中

3.通过socket服务的发送功能,将数据包发送出去

4.关闭资源

 

定义一个应用程序,用于接收UDP传输的数据并处理

1.定义udpSocket服务,通常会接收一个端口,其实就是给这个网络应用程序定义数字标识,方便于明确哪些数据过来该应用程序可以处理。

2.定义一个数据包,因为要存储接收到的数据,数据包对象中有更多功能可以提前字节数据中的不同数据信息。

3.通过socket服务的receive方法将收到的数据存入已定义好的数据包中

4.通过数据包特有的功能,将这些不同的数据取出,打印在控制台上

5.关闭资源

 UDP练习:

import java.util.*;
import java.io.*;
import java.net.*;
class UDP3 
{
	public static void main(String[] args) 
	{
		new Thread(new UDPSend3()).start();
		new Thread(new UDPReceive3()).start();
	}
}

class UDPSend3 implements Runnable
{
	public void run()
	{
      try
      {
		DatagramSocket ds=new DatagramSocket();

		//建立一个IO流接收数据
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

		for(String str=br.readLine();str!=null;str=br.readLine())
		{
                         byte[] buf=str.getBytes();
			 DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),1002);
			 ds.send(dp);
			 if("over".equals(str))
				 break;
		}
		ds.close();
      }
      catch (Exception e)
      {
		  System.out.println(e);
      }
	   
	}
}

class UDPReceive3 implements Runnable
{
      public void run()
	{
	  
	   try
	   {
		  DatagramSocket ds=new DatagramSocket(1002);
		 while(true)
		 {
			byte[] buf=new byte[1024];
			DatagramPacket dp=new DatagramPacket(buf,buf.length);
			ds.receive(dp);
			String info=new String(buf,0,dp.getLength());
			System.out.println(dp.getAddress()+"::"+info);
			if("over".equals(info))
				break;
		 }
		 ds.close();
	   }
	   catch (Exception e)
	   {
		   System.out.println(e);
	   }
	}
}


 

TCP传输

SocketServerSocket

l 建立客户端和服务器端

l 建立连接后,通过Socket中的IO流进行数据的传输

l 关闭Socket

l 同样,客户端和服务器端是两个独立的应用程序。

 

Socket类:此类实现客服端套接字

常用构造函数:Socket()  Socket(InetAddress address,int port)  Socket() 

常用方法:

Void | close():关闭此套接字

Void | connect(SocketAddress endpoint):将此套接字连接到服务器。

InetAdddress | getInetAddress():返回此套接字连接的地址

InputStream | getInputStream():返回此套接字的输入流

OutputStream | getOutputStream():返回此套接字的输出流

Int  | getPort():返回此套接字连接到的远程端口

Void | shutdownInput():此套接字的输入流置于“流的末尾”。

Void | shutdowmOutput():禁用此套接字的输出流。

 

ServerSocke此类实现服务器套接字

常用构造函数:ServerSocket()    ServerSocket(int port)

常用方法:

Socket | accept():侦听并接受到此套接字的连接

 

URL类:代表一个统一资源定位符,它是指向互联网“资源”的指针。

URL(String spec)

重要方法:

String | getFile():获取此URL的文件名

String | getHost():获取此URL的主机名

String | getPath():获取此URL的路径部分

String | getProtocol():获取此URL的协议名称

String | getQuery():获取此URL的查询部分

URLConnection | openConnection():返回一个表示到URL所引用的远程对象的连接。

InputStream | openStream():打开到此URL的连接并返回一个用于从该连接读入的InputStream

 

URLConnection类:抽象类,代表应用程序和URL之间的通信连接。

重要方法:

InputStream | getInputStream():返回从此打开的连接读取的输入流

OutputStream | getOutputStream():返回写入到此链接的输入流。

 

客户端

通过查阅socket对象,发现在该对象建立时,就可以去连接指定主机,因为TCP是面向连接的,所以在建立socket服务时,就要有服务端存在,并连接成功,形成通路后,在该通道进行数据的传输。

步骤:

1.创建socket服务,并指定要连接的主机和端口。

   Socket(String host,int port);

2.为了发送数据,应该获取socket流中的输出流

 getOutputStream()

 Write()

3.关闭服务

 

服务端

1.建立服务端的socket服务,ServerSocket

   ServerSocketint port)接听一个端口

2.获取连接过来的客服端对象。

      通过accept()方法,获取Socket,没有连接就会等,所以这个方法是阻塞式的

3.客服端如果发送过来数据,那么服务端使用对应的客服端对象,并获取到该客服端对象的读取流来读取发过来的数据,并打印在控制台。

4.关闭服务端(可选)

 

//TCP终极练习
import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
class  TCP
{
	private Frame f;
	private TextField tf;
	private Button bt;
	private TextArea ta;
	TCP()
	{
		init();
	}
	public void init()
	{
		f=new Frame("我的浏览器");
		f.setBounds(100,100,600,600);
		f.setLayout(new FlowLayout());
		
		tf=new TextField(60);
		bt=new Button("转到");
		ta=new TextArea(30,66);

		f.add(tf);
		f.add(bt);
		f.add(ta);
        
		myEvent();
		f.setVisible(true);
	}
	public void myEvent()
	{
		bt.addActionListener(new ActionListener()
		{
           public void actionPerformed(ActionEvent e)
		   {
			try
            {
				ta.setText("");
			    String ip=tf.getText();
			    URL url=new URL(ip);
			    URLConnection uc=url.openConnection();
			    InputStream In = uc.getInputStream();
			    byte[] buf=new byte[1024];
				int len=0;
		    	while((len=In.read(buf,0,buf.length))!=-1)
		    	{
			    	ta.append(new String(buf,0,len));
			    }

            }
            catch (Exception ee)
            {
               throw new RuntimeException("登陆服务器失败!");
            }
		 }
		});
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
	}
	public static void main(String[] args) 
	{
		new TCP();
	}
}


 

内容概要:本文详细介绍了一种基于Simulink的表贴式永磁同步电机(SPMSM)有限控制集模型预测电流控制(FCS-MPCC)仿真系统。通过构建PMSM数学模型、坐标变换、MPC控制器、SVPWM调制等模块,实现了对电机定子电流的高精度跟踪控制,具备快速动态响应和低稳态误差的特点。文中提供了完整的仿真建模步骤、关键参数设置、核心MATLAB函数代码及仿真结果分析,涵盖转速、电流、转矩和三相电流波形,验证了MPC控制策略在动态性能、稳态精度和抗负载扰动方面的优越性,并提出了参数自整定、加权代价函数、模型预测转矩控制和弱磁扩速等优化方向。; 适合人群:自动化、电气工程及其相关专业本科生、研究生,以及从事电机控制算法研究与仿真的工程技术人员;具备一定的电机原理、自动控制理论和Simulink仿真基础者更佳; 使用场景及目标:①用于永磁同步电机模型预测控制的教学演示、课程设计或毕业设计项目;②作为电机先进控制算法(如MPC、MPTC)的仿真验证平台;③支撑科研中对控制性能优化(如动态响应、抗干扰能力)的研究需求; 阅读建议:建议读者结合Simulink环境动手搭建模型,深入理解各模块间的信号流向与控制逻辑,重点掌握预测模型构建、代价函数设计与开关状态选择机制,并可通过修改电机参数或控制策略进行拓展实验,以增强实践与创新能力。
根据原作 https://pan.quark.cn/s/23d6270309e5 的源码改编 湖北省黄石市2021年中考数学试卷所包含的知识点广泛涉及了中学数学的基础领域,涵盖了实数、科学记数法、分式方程、几何体的三视图、立体几何、概率统计以及代数方程等多个方面。 接下来将对每道试题所关联的知识点进行深入剖析:1. 实数与倒数的定义:该题目旨在检验学生对倒数概念的掌握程度,即一个数a的倒数表达为1/a,因此-7的倒数可表示为-1/7。 2. 科学记数法的运用:科学记数法是一种表示极大或极小数字的方法,其形式为a×10^n,其中1≤|a|<10,n为整数。 此题要求学生运用科学记数法表示一个天文单位的距离,将1.4960亿千米转换为1.4960×10^8千米。 3. 分式方程的求解方法:考察学生解决包含分母的方程的能力,题目要求找出满足方程3/(2x-1)=1的x值,需通过消除分母的方式转化为整式方程进行解答。 4. 三视图的辨认:该题目测试学生对于几何体三视图(主视图、左视图、俯视图)的认识,需要识别出具有两个相同视图而另一个不同的几何体。 5. 立体几何与表面积的计算:题目要求学生计算由直角三角形旋转形成的圆锥的表面积,要求学生对圆锥的底面积和侧面积公式有所了解并加以运用。 6. 统计学的基础概念:题目涉及众数、平均数、极差和中位数的定义,要求学生根据提供的数据信息选择恰当的统计量。 7. 方程的整数解求解:考察学生在实际问题中进行数学建模的能力,通过建立方程来计算在特定条件下帐篷的搭建方案数量。 8. 三角学的实际应用:题目通过在直角三角形中运用三角函数来求解特定线段的长度。 利用正弦定理求解AD的长度是解答该问题的关键。 9. 几何变换的应用:题目要求学生运用三角板的旋转来求解特定点的...
Python基于改进粒子群IPSO与LSTM的短期电力负荷预测研究内容概要:本文围绕“Python基于改进粒子群IPSO与LSTM的短期电力负荷预测研究”展开,提出了一种结合改进粒子群优化算法(IPSO)与长短期记忆网络(LSTM)的混合预测模型。通过IPSO算法优化LSTM网络的关键参数(如学习率、隐层节点数等),有效提升了模型在短期电力负荷预测中的精度与收敛速度。文中详细阐述了IPSO算法的改进策略(如引入自适应惯性权重、变异机制等),增强了全局搜索能力与避免早熟收敛,并利用实际电力负荷数据进行实验验证,结果表明该IPSO-LSTM模型相较于传统LSTM、PSO-LSTM等方法在预测准确性(如MAE、RMSE指标)方面表现更优。研究为电力系统调度、能源管理提供了高精度的负荷预测技术支持。; 适合人群:具备一定Python编程基础、熟悉基本机器学习算法的高校研究生、科研人员及电力系统相关领域的技术人员,尤其适合从事负荷预测、智能优化算法应用研究的专业人士。; 使用场景及目标:①应用于短期电力负荷预测,提升电网调度的精确性与稳定性;②为优化算法(如粒子群算法)与深度学习模型(如LSTM)的融合应用提供实践案例;③可用于学术研究、毕业论文复现或电力企业智能化改造的技术参考。; 阅读建议:建议读者结合文中提到的IPSO与LSTM原理进行理论学习,重点关注参数优化机制的设计思路,并动手复现实验部分,通过对比不同模型的预测结果加深理解。同时可拓展尝试将该方法应用于其他时序预测场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值