第10章 使用网络技术

第10章 网络安全技术 考试说明:选择题33-36,综合题(2-4分,考查IPS防火墙) 常考知识点: 数据备份策略、磁盘阵列备份方式 加密技术——对称加密、非对称加密 入侵防护系统——IPS(入侵防护系统) 防火墙技术——PIX配置过程 网络版防病毒软件的安装与配置 ... 阅读详情
  1. WebView 的用法
    相当与Android系统中的一个内置浏览器,可以很方便的在应用中展示各种网页,当然也可以设置成让他是否支持JavaScript。

  2. 使用HTTP协议访问网络
    2.1 HttpURLConnection
    (1)获取HttpURLConnection的实例,一般new出一个URL对象,传入目标的网络地址,并且调用openConnection()方法即可

URL url = new URL("http://www.baidu.com");
connection = (HttpURLConnection) url.openConnection();

(2)接下来我们用GET方法来设置connection进行请求数据

connection.setRequestMethod("GET");

(3)我们可以像浏览器一样对发出的请求做各种各样的定制了,比如超时的时间等等,我们这里设置的是8秒钟。

connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);

(4)之后,用getInputStream()可以获取服务器返回的输入流了,获取到输入流后我们可以用Java中的方法进行处理了

InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new  InputStreamReader(in));

(5)最后调用disconnect()将http连接关掉。
2.2 HttpClient
HttpClient是Apache提供的访问接口,能实现和HttpURLConnection一样的效果,但是他们的用法却有很大的不同。
(1)因为HttpClient是一个接口,所以我们不能new出一个实例,我们一般都是new出DefaultHttpClient的实例

HttpClient httpClient = new DefaultHttpClient();

(2)接下来,如果要发出GET请求,则需要创建一个HttpGet对象,若要发出POST请求,则创建HttpPost对象

//GET请求
HttpGet httpGet = new HttpGet("http://www.baidu.com");
httpClient.execute(httpGet);

//POST请求
HttpPost httpPost = new HttpPost("http://www.baidu.com");
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username", "admin"));
params.add(new BasicNameValuePair("password", "123456"));
httpClient.execute(httpPost);

(3)执行完execute方法后,就会返回一个HttpResponse对象,服务器所有的返回信息都会存储在该对象中,我们先从HttpResponse取出服务器返回的状态码,如果是200的话,我们就可以继续往下执行了

if (httpResponse.getStatusLine().getStatusCode() == 200) {
}

(4)接下来,我们可以在if中调用getEntity()返回一个HttpEntity实例,然后调用EntityUtils.toString()静态方法将entity转换成String,同时可以指定他的编码方式。

HttpEntity httpEntity = httpResponse.getEntity();
String response = EntityUtils.toString(httpEntity, "utf-8");

HttpClient相当于是一个增强版的HttpURLConnection,但是HttpClient也有他的局限性,比如说不能执行html中的JavaScript代码。

  1. 解析XML格式数据
    首先在我们的本机上面有一个get_data.xml文件,通过 http://127.0.0.1/get_data.xml 可以访问,然后他的内容如下
<apps>
    <app>
        <id>1</id>
        <name>Google Maps</name>
        <version>1.0</version>
    </app>
    <app>
        <id>2</id>
        <name>Chrome</name>
        <version>2.1</version>
    </app>
    <app>
        <id>3</id>
        <name>Google Play</name>
        <version>2.3</version>
    </app>
</apps>

解析XML文件有PULL,SAX,DOM等方式,我们这里只讲解前面两种方式
3.1 Pull解析方式
我们先来看一段使用Pull解析的代码

private void parseXMLWithPull(String xmlData) {
        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser xmlPullParser = factory.newPullParser();
            xmlPullParser.setInput(new StringReader(xmlData));
            int eventType = xmlPullParser.getEventType();
            String id = "";
            String name = "";
            String version = "";
            while (eventType != XmlPullParser.END_DOCUMENT) {
                String nodeName = xmlPullParser.getName();
                switch (eventType) {
                    case XmlPullParser.START_TAG: {
                        if ("id".equals(nodeName)) {
                            id = xmlPullParser.nextText();
                        } else if ("name".equals(nodeName)) {
                            name = xmlPullParser.nextText();
                        } else if ("version".equals(nodeName)) {
                            version = xmlPullParser.nextText();
                        }
                        break;
                    }
                    case XmlPullParser.END_TAG: {
                        if ("app".equals(nodeName)) {
                            Log.d("MainActivity", "id is " + id);
                            Log.d("MainActivity", "name is " + name);
                            Log.d("MainActivity", "version is " + version);
                        }
                    }
                    default:
                        break;
                }
                eventType = xmlPullParser.next();
            }
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

首先通过XmlPullParserFactory的实例获得XmlPullParser的对象,然后调用该对象的setInput()将服务器返回的xml数据传进去就可以开始解析了。在解析的过程中,getEventType()方法获得当前的解析事件,然后在一个while中不断的解析,如果当前的解析事件不为XmlPullParser.END_DOCUMENT,就说明还没有到达文档末尾,调用next()获取下一个解析事件。
在while中,用getName()获取当前节点的名字,nextText()获取当前节点的具体内容,这样每当解析完一个节点,就将他打印出来。

3.2 SAX解析方式
SAX解析的用法比Pull会麻烦一些,但在语义方面会更加清楚一点。
通常情况下我们会创建一个类来继承DefaultHandler,然后重写父类的5个方法

public class MyHandler extends DefaultHandler {
    //在开始解析Xml时调用
    @Override
    public void startDocument() throws SAXException {
    }

    //在开始解析某个节点时调用
    @Override
    public void startElement(String uri, String localName, 
    }

    //在获取节点内容时调用
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
    }

    //会在完成某个节点解析时调用
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
    }


    //会在完成整个XML解析时调用
    @Override
    public void endDocument() throws SAXException {
    }
}

4 JSON数据解析
4.1 使用JSONObject

private void parseJSONWithJSONObject(String jsonData) {
        try {
            JSONArray jsonArray = new JSONArray(jsonData);
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                String id = jsonObject.getString("id");
                String version = jsonObject.getString("version");
                String name = jsonObject.getString("name");
                Log.d("MainActivity", "id is ");
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

我们先把服务器返回的数据交给JSONArray,然后循环遍历JSONArray,取出来的每一个都是JSONObject,接下来只需用getString()取出即可
4.2 使用GSON
GSON是谷歌的开源库,处理JSON数据会比JSONObject更加的方便,简单。

5 网络编程的最佳实践
在我们编写App的时候,肯定会经常性的进行一些网络的请求,这样我们就需要大量的使用HttpURLConnection或者HttpClient,然后在每一次进行网络请求的背后,很多代码都是重复的,比如两次请求的不同点只是目标网络地址发生了变化。这就驱使我们来写一个HttpUtil类,该类提供一个静态方法供我们使用。
我们先写一个1.0版本的

public class HttpUtil {

    public static void sendHttpRequest(final String address) {
                HttpURLConnection connection = null;
                try {

                    URL url = new URL(address);
                    connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(8000);
                    connection.setReadTimeout(8000);
                    connection.setDoInput(true);
                    connection.setDoOutput(true);
                    InputStream in = connection.getInputStream();
                    BufferedReader br = new BufferedReader(new InputStreamReader(in));
                    StringBuilder response = new StringBuilder();
                    String line;
                    while ((line = br.readLine()) != null) {
                        response.append(line);
                    }
                } catch (Exception e) {
                    e.printStaceTrace();
                } finally {
                    if (connection != null)
                        connection.disconnect();
                }
    }
}

我们可以这样使用上面的类

String address = "http://www.baidu.com";
String response = HttpUtil.sendHttpRequest(address);

但这会引起一个问题,就是这些代码是在主线程里面执行的,所以可能会引起App的阻塞,出现ANR问题。因为我们并没有在HttpUtil中开启新线程,但是我们也不能直接开启一个新线程,因为这样就不能返回数据了。我们可以用Java的回调机制。
首先需要定义一个接口,比如命名为HttpCallbackListener

public interface HttpCallbackListener {

    void onFinish(String response);

    void onError(Exception e);
}

接着,修改HttpUtil中的代码,如下

public class HttpUtil {

    public static void sendHttpRequest(final String address, final HttpCallbackListener listener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection connection = null;
                try {

                    URL url = new URL(address);
                    connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(8000);
                    connection.setReadTimeout(8000);
                    connection.setDoInput(true);
                    connection.setDoOutput(true);
                    InputStream in = connection.getInputStream();
                    BufferedReader br = new BufferedReader(new InputStreamReader(in));
                    StringBuilder response = new StringBuilder();
                    String line;
                    while ((line = br.readLine()) != null) {
                        response.append(line);
                    }
                    **if (listener != null) {
                        listener.onFinish(response.toString());
                    }**
                } catch (Exception e) {
                    **if (listener != null) {
                        listener.onError(e);
                    }**
                } finally {
                    if (connection != null)
                        connection.disconnect();
                }
            }
        }**).start()**;
    }
}
《网络安全应急响应技术实战指南》知识点总结(第10章 流量劫持网络安全应急响应) 一、流量劫持概述 1、流量劫持简介 是一种通过在应用系统中植入恶意代码、在网络中部署恶意设备、使用恶意软件等手段,控制客户端与服务端之间的流量通信、篡改流量数据或改变流量走向,造成非预期行为的网络攻击技术。如流氓软件、广告弹窗、网址跳转。 流量劫持的主要目的: 引流推广、钓鱼攻击、访问限制、侦听窃密。 2、常见流量劫持 1)DNS劫持 DNS是一项互联网服务,用于网站域名与IP地址的相互转换。 DNS劫持又称域名劫持,是指控制DNS查询解析的记录,在劫持的网络中拦截DNS请求,分析匹配请求域名,返回虚假IP 阅读详情

相关推荐

《计算机网络简易速速上手小册》第10章:未来网络技术趋势(2024 最新版)

通过在数据产生的地点进行实时分析和处理,边缘计算能够降低响应时间,减少网络传输的数据量,提高系统的整体效率和可靠性。随着 IoT 和 5G 技术的快速发展,边缘计算应运而生,它将数据处理的过程从云中心转移到网络的边缘,近距离处理数据,从而减少延迟,提高处理速度,使得实时数据处理成为可能。在这个案例中,我们将使用 Python 模拟量子密钥分发的过程。随着人工智能(AI)技术的迅猛发展,它在网络管理中的应用越来越广泛,从自动化网络配置、故障诊断,到安全防护和流量优化,AI 正在彻底改变网络管理的方式。

江帅帅 1535

URL转码

import java.io.UnsupportedEncodingException; import java.net.URLDecoder; /** * Covert the encoded URL to decoded URL * @author p * */ public class CoderConverter { public static Strin...

iteye_7838的博客 150

网络视频核心开发技术第10章:源代码解析与应用

视频编码标准如H.264/AVC、H.265/HEVC、VP9等,它们定义了压缩和解压视频的详细规则。这些标准能够高效压缩视频文件,降低存储和传输所需的带宽。例如,H.264广泛应用于高清视频广播,而H.265/HEVC则支持更高的压缩效率,为4K甚至8K视频提供了可能。视频解码是编码的逆过程,涉及接收压缩的视频数据,将其解压,并最终转换回能够显示的视频信号。解码流程一般包括读取编码数据、熵解码、变换与逆量化、以及帧重建等步骤。

weixin_29009401的博客 843

url 中文转码

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34184158的博客 557

STM32duino LSM6DSO驱动库:低功耗IMU工程化实践

惯性测量单元(IMU)是智能终端与工业设备实现运动感知的核心传感器,其性能关键在于数据精度、实时响应与系统功耗的协同优化。LSM6DSO作为集成加速度计与陀螺仪的六轴MEMS器件,依托片上有限状态机(FSM)和机器学习核心(MLC),支持自由落体检测、计步器、6D方向识别等硬件自治功能,显著降低主控CPU负载。在STM32平台下,通过深度耦合HAL/LL库、显式引脚管理、DMA加速SPI传输及EXTI中断协同,可实现亚毫秒级事件响应与微安级待机功耗。本文聚焦STM32duino生态中LSM6DSO驱动的工程

weixin_36304957的博客 552

西门子机床数据采集实战:从828D到840DSL的CNC设备联网与实时监控

本文深入探讨了西门子机床数据采集的实战方案,重点解析了从828D到840DSL等CNC设备如何实现免授权、低成本联网与实时监控。文章通过对比不同型号系统的数据接口差异,提供了详细的配置步骤、核心数据点清单以及避坑指南,旨在帮助工厂技术人员经济高效地挖掘机床数据价值,提升生产管理效率。

weixin_29181861的博客 1332

计算机网络与互联网(10.4网络新技术)--第10章

计算机网络与互联网(10.4网络新技术)–第10章

weixin_44723534的博客 339

STM32CubeIDE离线安装芯片PACK包全攻略(附离线包下载与导入步骤)

本文详细介绍了在STM32CubeIDE中离线安装芯片PACK包的完整流程,包括官方和第三方资源获取方法、本地安装步骤及常见问题解决方案。特别针对网络隔离环境下的嵌入式开发需求,提供了实用的版本管理和自动化部署技巧,帮助开发者高效完成芯片固件支持包的离线配置。

weixin_30825581的博客 303

8月9日 第 10 章 看看精彩的世界,使用网络技术

如果我们在 sendHttpRequest()方法中开启了一个线程来发起 HTTP 请求,那么服务器响应的数据是无法进行返回的,所有的耗时逻辑都是在子线程里进行的,sendHttpRequest()方法会在服务器还没来得及响应的时候就执行结束了,也就无法返回响应的数据了。因此,一般会在网络上传输一些格式化后的数据,这种数据会有一定的结构规则和语义,当另一方收到数据消息之后,就可以按照相同的结构规则进行解析,从而取出想要的那部分内容。在获取到服务器响应的数据后,我们就可以对它进行解析和处理了。

lin_li17的博客 1111

SAP SmartForms字体 :从OTF缓存溢出到完美解决

精准诊断:遇到错误,首先区分是图片过大还是字体嵌入导致。删除图片测试是最快的判别方法。字体上传规范始终从SE73入口上传用于表单打印的字体。强烈建议应用SAP Note 1301018,确保上传时勾选“不替换其他字体”,避免系统自动替换引发的意外问题。如需为同一字体族上传粗体、斜体等变体,请在SE73初始屏幕上勾选对应的属性框(如BOLD),然后分别上传对应的字体文件(如上传过程中,系统会提示输入RTF控制序列信息,这是确保打印预览正常显示的关键步骤,必须正确填写。方案选型快速止血:采用方案一(

Pegasus666的博客 295

100天精通Python(爬虫篇)——第118天:selenium自动化操作浏览器基础大总结

一、Selenium框架环境搭建 1. 下载模块 2. 安装浏览器驱动WebDriver 二、基础操作 1. 打开浏览器 2. 无界面模式 3. 元素定位 4. 元素操作 5. 前进后退 6. 执行js 7.页面等待 隐式等待(常用) 显式等待(了解) 三、进阶操作 1. 使用代理ip 2. 修改请求头 3. 隐藏指纹特征.....................

努力让自己发光,对的人才能迎着光而来 10万+

三级网络技术:第10章——网络安全技术

网络安全技术 考点分析 必备图表 MindMap 网络安全技术MindMap

快乐修勾的博客 162

TurboQuant: Online Vector Quantization with Near-optimal Distortion Rate

这篇被 ICLR 2026 接收的论文提出了一种名为TurboQuant的全新在线向量量化(Vector Quantization, VQ)算法。该研究的核心目标是解决大语言模型(LLM)在长上下文推理时面临的 KV Cache 显存消耗瓶颈,以及大规模向量数据库在近似最近邻检索中的存储与延迟问题。有别于现有技术,TurboQuant 是一种无需任何校准数据、无需训练的在线算法(Data-oblivious)。

c_cpp_csharp的专栏 120

视频教程-第10章-广域网技术-网络技术

第10章-广域网技术 国家信息监理工程师,10年以上网络及运维实战经验,负责...

weixin_29544781的博客 146

【AI智能体】最强AI编程利器 Claude Code 从部署到项目实战详解

最强AI编程利器 Claude Code 从部署到项目实战详解

congge 4511

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

第10章 C#网络通信技术与实战应用

摘要 本章详细介绍了C#中的网络通信技术,重点分析了TCP协议的核心特性和编程实现。TCP协议通过连接导向机制、可靠传输保证和有序数据流传递确保通信质量,采用三次握手建立连接,并通过确认应答、超时重传等机制保证数据传输可靠性。在C#中可通过System.Net.Sockets命名空间直接操作套接字或使用WCF框架实现TCP通信,前者适合精细控制场景,后者更适合企业级应用开发。文章提供了完整的TCP服务器与客户端实现示例,包含连接建立、数据传输和资源清理全过程,展示了多线程处理客户端连接、消息接收与响应的具体

小宝哥Code的专栏 512

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

深入理解Linux网络技术内幕 第10章 帧的接收

帧的接收通知内核已接收NAPI和netif_rxNAPI 通知内核已接收NAPI和netif_rx Linux驱动程序通知内核接收报文有两种方式: netif_rx函数 NAPI机制 NAPI NAPI混合中断和轮询,不适用纯粹的中断事件驱动模型。 ...

weixin_44793395的博客 954

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

视频教程-《Linux系统编程、网络编程》第10章 网络编程-物联网技术

《Linux系统编程、网络编程》第10章 网络编程 2008年毕业于沈阳航...

weixin_26987495的博客 194

软考网络工程师笔记 - 第10章.组网技术

1.根据交换方式分优势劣势端口速率。

人生需要动态规划 学习需要贪心算法 1271

软考-中级-网络工程师-笔记-第10章-组网技术

第10章 组网技术 10.1 交换机基础 10.1.1 交换机分类 根据交换方式分类 根据交换的协议层 交换机结构划分 配置方式划分 管理类型划分 层次结构划分:核心交换机、汇聚交换机、接入交换机 10.1.3 交换机性能参数 端口类型 传输模式 交换容量 包转发率 MAC地址数量:交换机MAC地址表中存储最大MAC地址数量 VLAN表项 10.2 路由器基础 10.2.1 路由器接口 广域网WAN端口和局域网LAN端口 RJ45端口:常规以太网电口 以太网光口:SC/GBIC/SFP/SPF+/

sinat_34066134的博客 707

阅读郭霖《第一行代码》的笔记——第10章 看看精彩的世界,使用网络技术

1、WebView的用法下面是一个很简单的例子,就是显示百度首页。布局文件:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android

持续学习,刻意练习 1306

计算机网络与互联网(10.1计算机网络概述)--第10章

计算机网络与互联网(10.1计算机网络概述)–第10章

weixin_44723534的博客 142

网络中所连接的计算机在10台左右时多采用,《计算机网络技术基础》 第1章 计算机网络概述 单元测试 附答案...

《计算机网络技术基础》第1章计算机网络概述单元测试一、判断1、同一办公室中的计算机互联不能称为计算机网络。()2、UNIX和Linux都是网络操作系统。()3、对等网通常适用于计算机数量较少时组建的网络,所以,220台计算机不能组建成对等网。()4、计算机网络中的共享资源指的是硬件资源。()5、局域网的覆盖范围较小,一般从几米到几千米。()6、国际互联网(Internet)是广域网的一种形式。()...

weixin_35378583的博客 1447

《Hello-Agents》第8-10章深度解读:记忆、上下文工程与智能体通信协议(Java 开发者视角)

先学概念和设计:第 8~10 章理论很精彩,理解"记忆 / 检索 / 上下文 / 通信协议"四类能力,比纠结特定版本源码更重要。想跑代码:pip install "hello-agents[all]==0.2.8" # 第8/9章# 或pip install "hello-agents[all]==0.2.9" # 第10章需要 Python 3.10+,并在.env配置 LLM 的 API key;第 10 章 MCP 客户端还要npx/ Node 环境。建立自己的框架图。

qq_40021451的博客 485

网规:第1章 计算机网络原理-1.10服务质量控制技术

1.10服务质量控制技术(P246-271) 1、IntServ A、定义:最初试图在因特网中将网络提供的服务划分为不同类别的是IEEE提出的综合服务IntServ。IntServ可对单个的应用会话提供服务质量的保证。 B、特点: (1)资源预留 (2)呼叫建立 C、分类 IntServ定义了三种服务: (1)有保证的服务:为端到端的分...

weixin_34075268的博客 336
上一篇: 自定义ActionBar
下一篇: 第2章 Activity
coder_ken
博客等级 码龄12年 14粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值