JAVA 基础 网络编程

尚硅谷课程

InetAdress类的创建和使用

InetAddress inet = InetAddress.getByName("www.badu.com");

inet = InetAddress.getByName("xxx.xxx.xx.x");

System.out.println(inet); //  控制台输出的格式为: www.badu.com/xxx.xxx.xx.x

inet.getHostName();

inet.getHostAddress();


inet.getLocalHost();//获取本地主机

将优先从本机 host文件中获取



ip 和端口

16位的整数0~65535,其中,0~1023被预先定义的服务通信占用,应当使用1034~65535中的端口

进行通信,避免发生端口冲突

端口号和IP地址的组合得出一个网络套接字


TCP协议:

使用TCP协议前,须建立TCP连接,形成传输数据通道

传输前,采用“三次握手”,是可靠的

TCP协议进行通信的两个应用进程:客户端、服务端

传输完毕,需释放已建立的连接,效率低


UDP协议:

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

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

因无需连接,故是不可靠的

发送数据结束时无需释放资源,速度快


socket编程,简单例子

@Test
public void client() throws UnknownHostException, IOException{
Socket so = new Socket(InetAddress.getByName("127.0.0.1"),9999);
OutputStream out = so.getOutputStream();
String str = "java网络编程";
out.write(str.getBytes());
out.close();
so.close();
System.out.println("客户端发送结束");
}

@Test
public void server() throws IOException{
ServerSocket ss = new ServerSocket(9999);
Socket so = ss.accept();
InputStream in = so.getInputStream();
byte b[]= new byte[1024];
int len = 0;
while((len =in.read(b))!= -1){
System.out.println(new String(b, 0, len));
}
in.close();
so.close();
ss.close();
System.out.println("服务端接收结束");
}


so.shutdownOutput();//显示的告诉服务端发送完毕  节点流 阻塞式  


类DatagramSocket和DatagramPacket实现了基于UDP协议网络程序

UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报

一定能够安全送到目的地,也不能确定什么时候可以抵达。

DatagramPacket对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。

UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接


udp编程实现

@Test
public void send() throws IOException{
DatagramSocket ds = new DatagramSocket();
byte [] b = new byte[1024];
b = "udp数据".getBytes();
DatagramPacket dp = new DatagramPacket(b, 0, b.length, InetAddress.getByName("127.0.0.1"), 9090);
ds.send(dp);
ds.close();
}

@Test
public void receive() throws IOException{
DatagramSocket ds = new DatagramSocket(9090);
byte[] b = new byte[1024];
DatagramPacket dp = new DatagramPacket(b,0,b.length);
ds.receive(dp);
String str = new String(dp.getData(),0,dp.getLength());
System.out.println(str);
ds.close();
}

URL编程

url:统一资源定位符,它表示Internet上的某一资源

由5部分组成 :<传输协议>://<主机名>:<端口号>/<文件名>

类URL的构造方法都生命抛出非运行时异常,必须要对这一异常进行处理,通常是用try-catch语句进行捕获

一个URL对象生存后,其属性是不能被改变的,但可以通过它给定的方法来获取这些属性

public String getProtocol() 获取该URL的协议名

public String getHost() 获取该URL的主机名

public String getPort() 获取该URL的端口号

public String getPath() 获取该URL的文件路径

public String getFile() 获取该URL的文件名

public String getRef() 获取该URL在文件中的相对位置

public String getQuery() 获取该URL的查询名(查询条件)


URL的方法openStream();能从网络上读取数据

若希望输出数据,则必须先与URL建立连接,然后才能对其进行读写,此时需要使用

URLConnection:表示到URL所引用的远程对象的连接,当与一个URL建立连接时,首先要在一个

URL对象上通过方法

openConnection()生成对应的URLConnection对象。如果连接过程失败,将产生IOException

即:有数据输入,又有数据输出,则考虑使用URLConnection类

@Test
public void urlTest() throws IOException {
URL url = new URL("http://127.0.0.1:9090/xxx/test.txt");
InputStream in = url.openStream();
byte b[] = new byte[20];
int len = 0;
while ((len = in.read(b)) != -1) {
String str = new String(b, 0, len);
System.out.println(str);
}
in.close();
// 将获取的数据,读取,并输出到本地
URLConnection urlcon = url.openConnection();
InputStream intp = urlcon.getInputStream();
FileOutputStream fotp = new FileOutputStream(new File("test.txt"));
byte[] b1 = new byte[20];
int len1 = 0;
while ((len1 = intp.read(b1)) != -1) {
fotp.write(b1, 0, len1);
}
fotp.close();
intp.close();
}



内容概要:本文详细介绍了基于FPGA的144输出通道可切换电压源系统的设计与实现,涵盖系统总体架构、FPGA硬件设计、上位机软件设计以及系统集成方案。系统由上位机控制软件(PC端)、FPGA控制核心和高压输出模块(144通道)三部分组成。FPGA硬件设计部分详细描述了Verilog代码实现,包括PWM生成模块、UART通信模块和温度监控模块。硬件设计说明中提及了FPGA选型、PWM生成方式、通信接口、高压输出模块和保护电路的设计要点。上位机软件采用Python编写,实现了设备连接、命令发送、序列控制等功能,并提供了一个图形用户界面(GUI)用于方便的操作和配置。 适合人群:具备一定硬件设计和编程基础的电子工程师、FPGA开发者及科研人员。 使用场景及目标:①适用于需要精确控制多通道电压输出的实验环境或工业应用场景;②帮助用户理解和掌握FPGA在复杂控制系统中的应用,包括PWM控制、UART通信及多通道信号处理;③为研究人员提供一个可扩展的平台,用于测试和验证不同的电压源控制算法和策略。 阅读建议:由于涉及硬件和软件两方面的内容,建议读者先熟悉FPGA基础知识和Verilog语言,同时具备一定的Python编程经验。在阅读过程中,应结合硬件电路图和代码注释,逐步理解系统的各个组成部分及其相互关系。此外,实际动手搭建和调试该系统将有助于加深对整个设计的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值