四、网络基础

Java网络编程实验 实验一:基本I/O类的使用 实验二:线程与同步 实验三:Internet寻址 实验四:TCP——实现时间协议 实验五:UDP——绘制温度曲线 实验六:Java网络编程综合运用 立即下载

Android基础网络第一天

01 网络html源码查看器

访问网络需要加Internet权限:android.permission.INTERNET

使用UrlConnection请求一个url地址获取内容:

// 1.创建一个Url对象
URL url = new URL(url_str);
// 2.获取一个UrlConnection对象
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
// 3.为UrlConnection对象设置一些请求的参数,请求方式,连接的超时时间 
connection.setRequestMethod("GET"); // 设置请求方式
connection.setConnectTimeout(1000*10); // 设置超时时间
// 4.在获取url请求的数据前需要判断响应码,200 :成功,206:访问部分数据成功   300:跳转或重定向  400:错误 500:服务器异常
int code = connection.getResponseCode();
if(code == 200){
    // 5.获取有效数据,并将获取的流数据解析成String
    InputStream inputStream = connection.getInputStream();
    String result = StreamUtils.streamToString(inputStream);

注意事项:

1. ANR:application not response 应用无响应; androoid中耗时的操作(请求网络,大文件的拷贝,数据库的操作)需要在子线程中做。
    09-02 01:52:40.711: E/ActivityManager(857): ANR in com.itheima.sourcelook (com.itheima.sourcelook/.MainActivity)

2. 4.0后网络操作强制在子线程中进行。因为网络访问是耗时的操作,可能会导致ANR
    09-02 01:57:32.879: W/System.err(1789):  android.os.NetworkOnMainThreadException

3.错误线程调用异常,子线程不能够更新UI(控件的内容)
        09-02 02:02:08.873: W/System.err(1858): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.


   主线程不能够做耗时的操作,网络请求就是耗时的操作需要放到子线程做。子线程不能更新控件的内容(更新Ui)。所以产生了矛盾,解决办法就是使用Handler.

02 消息机制的写法(重要) Handler

使用Handler的步骤:

// 1.主线程中创建一个Handler
private Handler handler = new Handler(){
    public void handleMessage(android.os.Message msg) {

    };
};

// 2.重写handler的handlermessage方法

// 3.子线程中创建一个Message对象,将获取的数据绑定给msg
Message msg = new Message();
// 另一种方式:Message msg = Messge.obtain;
msg.obj = result;
// 4.主线程中的handler对象在子线程中将message发送给主线程
handler.sendMessage(msg);

// 5.主线程中handlermessage方法接受子线程发来的数据,就可以做更新UI的操作。

// ***********主线程

// ☆☆☆1.在主线程中创建一个Handler对象
private Handler handler = new Handler(){
    // ☆☆☆2.重写handler的handlermessage方法,用来接收子线程中发来的消息
    public void handleMessage(android.os.Message msg) {
        // ☆☆☆5.接收子线程发送的数据,处理数据。
        Bitmap bitmap  = (Bitmap) msg.obj;
        // ☆☆☆6.当前方法属于主线程可以做UI的更新
        // 7.获取服务器返回的内容,显示到textview上
        img_pic.setImageBitmap(bitmap); // 设置ImageView的图片内容
        };
    };

// ************子线程
if(code == 200){
    // 5.获取有效数据,并将获取的流数据解析成String
    InputStream inputStream = connection.getInputStream();

    // 将一个读取流转换成一个图片 Drawable , Btimap:位图  ?????
    Bitmap bitmap = BitmapFactory.decodeStream(inputStream);


    // ☆☆☆3.子线中创建一个Message对象,为了携带子线程中获取的数据给主线程。
    Message msg = Message.obtain(); // 获取一个Message对象,内部实现是:如果之前的Message存在直接返回,不存在创建新的Message返回
    msg.obj = bitmap;//将获取的数据封装到msg中。
    // ☆☆☆4.使用handler对象将message发送到主线程。
    handler.sendMessage(msg);   
}

03 消息机制原理(重要)

有几个主要元素:

1.Message:用来携带子线程中的数据。
2.MessageQueue:用来存放所有子线程发来的Message.
3.Handler:用来在子线程中发送Message,在主线程中接受Message,处理结果
4.Looper:是一个消息循环器,一直循环遍历MessageQueue,从MessageQueue中取一个Message,派发给Handler处理。

原理看资料中的图。

04 网络图片查看器

    adb shell+  input text 内容;可以通过将内容输入到手机上的输入框。

    将一个读取流转换成bitmap对象:

    BitmapFactory:可以将文件,读取流,字节数组转换成一个Bitmap对象。
    Bitmap bitmap = BitmapFactory.decodeStream(InputStream in);

    imageView.setImageBitmap(bitmap);//设置图片内容

05 常见消息处理api(重要)

面试:子线程一定不能更新UI? SurfaceView :多媒体视频播放 ,可以在子线程中更新UI; Progress(进度)相关的控件:也是可以在子线程中更新Ui;审计机制:activity完全显示的时候审计机制才会去检测子线程有没有更新Ui.

1.使用activity的runOnUiThread方法更新ui,无论当前线程是否是主线程,都将在主线程执行.

runOnUiThread(new Runnable() {

    @Override
    public void run() {
        tv_simple.setText("我被更新了");
    }
});

2.使用handler直接post到主线程,handler需要在主线程创建
// 延迟多少毫米执行runnable。

mHandler.postDelayed(new Runnable() {

    @Override
    public void run() {
        tv_simple.setText("我被更新了");
    }
}, 1000*5);

应用场景:广告展示后,做页面跳转。

06 新闻客户端案例(重要) 项目 和 产品

第一次进入新闻客户端需要请求服务器获取新闻数据,做listview的展示,为了第二次再次打开新闻客户端时能快速显示新闻,需要将数据缓存到数据库中,下次打开可以直接去数据库中获取新闻直接做展示。
开发步骤:

1.写布局listview ok
2.找到listview,设置条目的点击事件。 ok
3.获取数据提供给listview做展示。

3.1:获取本地数据库缓存的新闻数据,让listview显示。如果没有网络不至于显示空界面。
3.2:请求服务器获取新闻数据,是一个json字符串,需要解析json,封装到list集合中。提供给listview展示。
public static String newsPath_url = "http://192.168.13.83:8080/lile/servlet/GetNewsServlet";
// 封装新闻的假数据到list中返回
public static ArrayList<NewsBean> getAllNewsForNetWork(Context context) {
    ArrayList<NewsBean> arrayList = new ArrayList<NewsBean>();
    try{
        // 1.请求服务器获取新闻数据
        // 获取一个url对象,通过url对象得到一个urlconnnection对象
        URL url = new URL(newsPath_url);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        // 设置连接的方式和超时时间
        connection.setRequestMethod("GET");
        connection.setConnectTimeout(10*1000);
        // 获取请求响应码
        int code = connection.getResponseCode();
        if(code == 200){
            // 获取请求到的流信息
            InputStream inputStream = connection.getInputStream();
            String result = StreamUtils.streamToString(inputStream);

            // 2.解析获取的新闻数据到List集合中。

            JSONObject root_json = new JSONObject(result); // 将一个字符串封装成一个json对象。
            JSONArray jsonArray = root_json.getJSONArray("newss"); // 获取root_json中的newss作为jsonArray对象

            for (int i = 0 ;i < jsonArray.length();i++){//循环遍历jsonArray
                // 获取一条新闻的json
                JSONObject news_json = jsonArray.getJSONObject(i); 

                NewsBean newsBean = new NewsBean();
                newsBean. id = news_json.getInt("id");
                newsBean. comment = news_json.getInt("comment");//评论数
                newsBean. type = news_json.getInt("type");//新闻的类型,0 :头条 1 :娱乐 2.体育
                newsBean. time = news_json.getString("time");
                newsBean. des = news_json.getString("des");
                newsBean. title = news_json.getString("title");
                newsBean. news_url = news_json.getString("news_url");
                newsBean. icon_url = news_json.getString("icon_url");

                arrayList.add(newsBean);
            }

            //3.清楚数据库中旧的数据,将新的数据缓存到数据库中
            new NewsDaoUtils(context).delete();
            new NewsDaoUtils(context).saveNews(arrayList);
        }

    }catch (Exception e) {
        e.printStackTrace();
    }
    return arrayList;
}
3.3: 获取服务端数据成功后,需要缓存到本地数据库,缓存前需要清空本地数据库。

4.创建一个Adapter继承BaseAdapter,封装4个方法,需要接收获取的新闻数据   ok

5.将adapter设置给listview。   ok

07 采用smartimageview 显示(开源的小项目)

github : 12306 出名

自定义的控件在布局文件中的引用都需要指定类的完整路径

08 smartimageview 的原理

1.自定义了一个MyImageview类继承了Imageview,添加三个构造方法

2.添加一个setImageUrl方法接受一个图片url

3.新建一个子线程去请求url获取图片资源

4.将获取的图片Bitmap通过handler发送给主线程,主线程设置给当前view.

5.在布局中引用MyImageview,需要指定完成的包名路径。

09 get方式提交数据到服务器

10 post方式提交数据到服务器

get方式和post方式的区别:

1.请求的URL地址不同:

2.请求头不同:

(1) post方式多了几个请求头:Content-Length、Cache-Control  Origin
        openConnection.setRequestProperty("Content-Length", body.length()+"");
        openConnection.setRequestProperty("Cache-Control", "max-age=0");
        openConnection.setRequestProperty("Origin", "http://192.168.13.83:8080");

(2) post方式还多了请求的内容:username=root&pwd=123
    // 设置UrlConnection可以写请求的内容
    openConnection.setDoOutput(true);
    // 获取一个outputstream,并将内容写入该流              openConnection.getOutputStream().write(body.getBytes());

3.请求时携带的内容大小不同

get:1k 
post:理论无限制
TCP——实现时间协议实验三 1.利用TCP协议实现一个可以从服务器读取时间的网络程序。 2.将该程序的客户端改为一个可以显示服务器时间的图形时钟界面,它每隔一秒从服务器读取服务器当前时间。 立即下载

相关推荐

java实验7 网络编程

使用InetAddress类的方法获取www.nwsuaf.edu.cn的主机的IP地址;获取本地机的名称和IP地址。程序运行结果如图所示

java实验八 网络编程 (无脑实验系列)

1.读取服务器端文件。 ²  实验要求: 创建一个URL对象,然后让URL对象返回输入流,通过该输入流读取URL所包含的资源文件。 package lzy; import java.awt.*; import java.awt.event.*; import java.net.*; import java.io.*; public class ReadURLSource { publ

LzyRapX 6560

实验二:线程的同步

操作系统实验 线程的同步 深入理解线程与进程的概念,在Windows环境下何时使用进程,何时使用线程?

网络基础——HCIA④

协议数据单元——规定数据分片的大小(实质是数据到达数据链路层的大小,默认1500字节)数据需要经过封装与解封装,原始数据=1500字节减去各层头部。到达数据链层的1500字节字节=原始数据+TCP协议头部(最小20字节)+ip协议头部UDP协议最小有固定的8字节协议头部IP协议也有可选的字节,固定数据占20字节。

2302_79978586的博客 612

天气温度曲线

天气温度变化曲线绘制DEMO

java网络编程实验

课程设计要求的网络编程,亲测可信,通过c/s模式,实现局域网内聊天,初学者编写,注释较多,比较简单易懂

网络基础(四)

网络基础(四) 传输层协议—TCP协议和UDP协议 传输层负责**端与端(端可以理解为端口,进一步理解就是端口)**之间的传输(也就是说,传输层是负责端口与端口之间的传输的),不论是传输层中的UDP协议还是TCP协议,都是负责端口和端口之间的数据传输,也就是说传输层只负责端口,不负责ip(ip是网络层在负责的),传输层重视的是端口,一个是源端口,一个是目的端口 端口的划分 端口的范围:0~2^16 知名端口: 0~1023,比如说http:80,https:443,ssh:22,ftp:21,teln

weixin_43831728的博客 910

文件操作和网络编程实验

文件操作和网络编程实验

网络基础知识点总结(四)

本文摘要: 本文系统梳理了RIP和OSPF两种动态路由协议的核心机制。RIP采用距离矢量算法,通过水平分割、毒性翻转和触发更新三种机制防止环路。OSPF作为链路状态协议,通过区域划分、LSA泛洪控制、Dijkstra算法等手段天然避免环路。文章详细对比了两者在路由计算、环路预防、收敛速度等方面的差异,并重点分析了OSPF多区域架构的优势(如减小LSDB、限制泛洪范围、支持路由汇总)。此外,还阐述了OSPF的LSA类型、DR/BDR选举机制等内容,为理解两种协议的技术特点提供了全面参考。

qq_74808952的博客 1145

ARM架构下的SLAM部署避坑指南:香橙派AIpro与D435i深度相机的实战解析

本文详细解析了在ARM架构的香橙派AIpro开发板上部署SLAM算法并与Intel D435i深度相机配合的实战经验。内容涵盖系统配置、ROS编译、驱动安装、算法优化等关键步骤,提供了具体的避坑指南和性能调优技巧,帮助开发者在嵌入式平台上高效实现实时SLAM应用。

f0g1h2的博客 983

[漏洞利用]利用五次Shift越权破解win7\win10开机密码

注:第一个学习和接触的Windows漏洞 文章目录本机实验环境前置知识漏洞原理漏洞介绍漏洞验证解决方法基本流程介绍详细步骤截图 本机实验环境 虚拟机:VMware Workstation 14 pro 操作系统:Windows10 前置知识 1、cmd工具路径 c:\windows\system32\cmd,按五次shift默认调用同目录下sethc文件,其路径为“c:\windows\system32\sethc.exe” 2、用户/账户密码存储位置 c:\windows\system32\config\

Y4tacker的博客 2万+

网络基础之四

ping [选项] IP地址/域名(如:www.baidu.com)-t 长ping(一直ping) Ctrl+c停止。在主机中有ARP缓存表,记录IP地址对应的Mac地址。-n 指定ping几次。-l 制定包的大小。-w 指定等待时间。tracert 查询经过多少次路由。作用:检测网络的双向联通性。是IP地址的辅助协议。

m0_58076958的博客 144

10xGenomics官方可视化工具——Loupe Browser

Loupe Browser是⼀款10xGenomics开发的交互式桌⾯应⽤程序,⽤于探索10x单细胞数据,可以用来找出感兴趣的细胞、找出显著差异表达的基因、鉴定细胞类型、探索细胞亚类和数据共享。

weixin_47195452的博客 3359

网络基础四 DNS DHCP 路由 FTP

第1章 网络基础 1.1 IP地址分类     IP地址的类别-按IP地址数值范围划分     IP地址的类别-按IP地址用途分类     IP地址的类别-按网络通信方式划分 1.2 局域网上网原理过程     DHCP原理过程详情。     http://blog.oldboyedu.com/autoinstall-kickstart/     http://www.zyop

惨绿少年 | 欢迎访问CLSN博客站点 http://clsn.io 785

TouchGFX在STM32上的移植全过程:超详细版指南

深入讲解将TouchGFX集成到STM32开发环境的每一步,涵盖配置、驱动适配与UI调试。无论是初学者还是进阶开发者,都能快速掌握TouchGFX在嵌入式平台的应用技巧。

weixin_42443533的博客 600

Coze平台智能体开发实战:打造测试工程师的AI助手

智能体是具备特定身份和能力的AI实体,由大语言模型(LLM)驱动,并通过插件、知识库和工作流扩展其能力。明确的角色定位:可以设定特定身份和专业领域扩展能力:通过插件连接外部工具和服务记忆能力:通过知识库存储和检索专属信息流程化处理:通过工作流执行复杂多步任务通过Coze平台创建测试工程师智能体,可以显著提升测试效率和质量。明确的角色定位:聚焦测试工程师的实际需求丰富的知识库:提供准确的领域知识支持合适的工具集成:通过插件连接现有工具链持续迭代优化:根据反馈不断改进智能体行为自动化测试生成。

hogwarts_beibei的博客 1005

网络基础(四)-传输层

进程之间的通信从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到三层(到网络层)的功能。进程之间通信流程“逻辑通信”是指运输层之间的通信好像是沿水平方向传送数据,但事实上,这两条数据并没有一条水平方向的物理连接,要传送的数据是沿着图中上下多次的虚线方向传送的。

Anthony_231 1004

Macbook Pro上如何修改brew源

一、需求说明 我的macbook电脑安装了中科大的brew源码,发现安装gpg工具失败,其他工具可以正常安装,为了能将gpg安装成功,就找了找切换brew源的方案,记录如下。 二、切换至国内源 由于使用github默认源有可能存在路径远或者部分服务访问超时的原因,切换至国内源可以提速。 2.1 替换brew.git $ cd "$(brew --repo)" # 中国科大: $ git remote set-url origin https://mirrors.ustc.edu.cn/brew.git #

bufegar0的博客 1080

网络基础四之网络层

网络层 IP协议 IP协议指:将数据从A主机到B主机进行跨网络传输的一种能力,既然是一种能力,说明并不会100%成功。这里需要区别几个概念: 名称 区别 主机 配有IP地址,但是不进行路由控制的设备 路由器 既配有IP地址,有能进行路由控制 节点 主机和路由器的统称 1.1 IP协议格式 说明: 名称 说明 4位版本号 指定当前IP版本号是IPV4...

DASHENG980503的博客 394

STM32 W5500 Freemodbus Modbus TCP协议功能实现

STM32F103VCT6 W5500(SPI1),实现Modbus-TCP协议的功能

坚韧与专注 2万+

【Claude Code 源码解析教程】第25章:测试与调试

Claude Code 作为复杂的 AI 编程助手,测试与调试是保证质量的关键环节。项目建立了完善的测试体系,包括单元测试、集成测试、端到端测试等多个层次,同时提供了丰富的调试工具和技巧。

rengang66的博客 212

网络基础(四)

想了解IP数据报从源主机到目的主机经过路往上各个路由器的IP地址 可以使用IP数据报的记录路由选项 人们使用Telnet的注意要目的通常是:使本地主机成为远程主机的仿真终端 电子邮件通过POP3协议将邮件下载到用户所在主机 web服务器不需要具有编辑web页面的功能 域名解析方式要求域名服务器系统一次性完成全部名字-地址的比较 这种解析的方式成为递归解析 SIP(会话发起协议)...

weixin_30446197的博客 875

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

菜狗的网安学习路线笔记——网络基础(四)

菜狗的网安学习路线笔记——网络基础(四) 文章目录菜狗的网安学习路线笔记——网络基础(四)前言一、ARPARP的位置ARP的作用ARP分组格式ARP的工作过程ARP欺骗防御措施通信协议通信协议三要素体系结构常用协议参考 前言 网络基础分为: 1.通信协议栈基础 OSI协议栈介绍 TCP协议详解 IP地址详解 网关、DNS、ARP、通信协议 2.交换技术 3.路由技术 4.应用技术 5.访问控制技术和NAT 一、ARP 地址解析协议,即ARP(Address Resolution Protocol)

weixin_45866113的博客 417

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

服务器开发系列(四)——网络基础

服务器开发系列文章之网络基础

oruchimaru0420的博客 3822

蓝牙模块HM-10手册

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

《网络基础学习之四》一步一步做网线

《网络基础学习之四》一步一步做网线 在上一篇我们全面了解了双绞线网线和同轴电缆网线制作所需的材料及工具,本篇就要接着就要利用上篇所介绍的材料和工具继续介绍具体的网线制作方法。通过本篇内容的学习,你可以全面掌握双绞线网线和细同轴电缆网线的制作方法。特别是双绞线网线的制作,因为这类网络目前应用最广,还要注意不同用途的双绞线网线制作方法(如直连线和交*线)。   一、...

weixin_33722405的博客 211

HCIA网络基础(四)

交换基础 企业网络分层模型 核心层 汇聚层 接入层 基础术语 冲突域:在共享式网络中,不同主机同时发送数据会产生信号冲突(HUB) 解决: CSMA/CD技术 广播域 双工模式 半双工:通信双方都能发送和接收...

1315963786的博客 2139
上一篇: 三、数据库入门和listview的基本使用
下一篇: 五、网络进阶
CoderLiLe
博客等级 码龄11年 2粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值