超基础的网络编程04:URL编程

网络编程04:URL编程

标签: 网络编程


万维网和URL

万维网(WWW)是一个资料空间。在这个空间中有一样有用的事物:“资源”。“资源”由一个“统一资源定位符”来表示,即URL。这些资源通过超文本传输协议(http)传送给使用者,而后者通过点击链接来获取资源。

URL(Uniform Resource Locator):统一资源定位符,它表示 Internet 上某一资源的地址。通过 URL 我们可以访问 Internet 上的各种网络资源,比如最常见的 www,ftp 站点。浏览器通过解析给定的 URL 可以在网络上查找相应的文件或其他资源。

URL的基本结构由5部分组成:
<传输协议>://<主机名>:<端口号>/<文件名>
例如: http://192.168.1.100:8080/helloworld/index.jsp

超文本传输协议HTTP

HTTP是面向事物的应用层协议,它规定了在浏览器和服务器之间的请求和相应的格式和规则。这里简单介绍HTTP协议,具体在Java Web中详解。

HTTP的操作过程

从协议执行过程来说,浏览器要访问WWW服务器时,首先要完成对WWW服务器的域名解析。一旦获取了服务器的IP地址,浏览器将通过TCP向服务器发送连接建立请求。

万维网工作方式大致如下图所示:

工作方式

每个万维网服站点都有一个服务器进程,不断地监听TCP的端口80(默认),当监听到连接请求后便与浏览器建立连接。TCP连接建立后,浏览器就向服务器发送请求获取某一Web页面的HTTP请求。服务器收到HTTP请求后,将构建所请求的Web页必须的信息,并通过HTTP响应返回给浏览器。浏览器再将信息进行解释,然后将Web显式给用户,最后TCP连接释放。

GET 和 POST

Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。对应着对资源的查,改,增,删4个操作。

在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。

  • GET - 从指定的资源请求数据,用于获取/查询资源信息。

  • POST - 向指定的资源提交要被处理的数据,一般用于更新资源信息。

GET方法

请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:

/test/demo_form.asp?name1=value1&name2=value2

有关 GET 请求的其他一些注释:

  • GET 请求可被缓存
  • GET 请求保留在浏览器历史记录中
  • GET 请求可被收藏为书签
  • GET 请求不应在处理敏感数据时使用
  • GET 请求有长度限制
  • GET 请求只应当用于取回数据
POST 方法

请注意,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:

POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2

有关 POST 请求的其他一些注释:

  • POST 请求不会被缓存
  • POST 请求不会保留在浏览器历史记录中
  • POST 不能被收藏为书签
  • POST 请求对数据长度没有要求
  • +

URL类

构造方法

为了表示URL,java.net 中实现了类 URL。我们可以通过下面的构造器来初始化一个 URL 对象:

  • public URL (String spec);
    通过一个表示URL地址的字符串可以构造一个URL对象。
    例如:URL url = new URL ("http://www.baidu.com/");

  • public URL(URL context, String spec);:通过基 URL 和相对 URL 构造一个 URL 对象。例如:URL downloadUrl = new URL(url, “download.html")

  • public URL(String protocol, String host, String file);:
    通过指定的通信协议,主机名,文件名来创建一个URL
    例如:new URL(“http”, “www.baidu.com”, “download. html”);

  • public URL(String protocol, String host, int port, String file);
    通过指定的通信协议,主机名,端口号,文件名来创建一个URL
    例如: URL gamelan = new URL(“http”, “www.baidu.com”, 80, “download.html”);

类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有两种方法可以用来访问Interent上资源。

openStream()

利用URL类的openStream()方法,能从网络上读取数据。openStream()方法与指定的URL建立连接并返回InputStream类的对象。

能从网络上读取数据

若希望输出数据,例如向服务器端的 CGI (公共网关接口-Common Gateway Interface-的简称,是用户浏览器和服务器端的应用程序进行连接的接口)程序发送一些数据,则必须先与URL建立连接,然后才能对其进行读写,此时需要使用 URLConnection 。

OpenConnection

使用URL的openConnection()方法创建一个URLConnection类的对象,表示到URL所引用的远程对象的连接。。再通过URLConnection对象获取相应的输入/输出流。

当与一个URL建立连接时,首先要在一个 URL 对象上通过方法 openConnection() 生成对应的 URLConnection 对象。如果连接过程失败,将产生IOException.

例子

package charNet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class TestURL {
    public static void main(String[] args) throws Exception {
        //创建一个URL对象
        URL url = new URL("https://www.baidu.com/");

        System.out.println(url.getProtocol());
        System.out.println(url.getHost());
        System.out.println(url.getPort());
        System.out.println(url.getFile());

        //如何读取服务端的资源
        InputStream is = url.openStream();
        byte[] b = new byte[1024];
        int len;
        while ((len = is.read(b)) != -1) {
            String str = new String(b,0,len);
            System.out.println(str);
        }
        is.close();

        //如何既有数据的输入,又有数据的输出,则考虑使用URLConnection
        URLConnection urlConnection = url.openConnection();
        InputStream is1 = urlConnection.getInputStream();
        FileOutputStream fos = new FileOutputStream(new File("abc.txt"));
        byte[] b1 = new byte[20];
        int len1;
        while ((len1 = is1.read()) != -1) {
            fos.write(b1,0,len1);
        }
        fos.close();
        is1.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值