Android基于TCP和URL协议的网络编程示例【附demo源码下载】


Posted in Python onJanuary 23, 2018

本文实例讲述了Android基于TCP和URL协议的网络编程。分享给大家供大家参考,具体如下:

手机本身是作为手机终端使用的,因此它的计算能力,存储能力都是有限的。它的主要优势是携带方便,可以随时打开,而且手机通常总是处于联网状态。因此网络支持对于手机应用非常重要。

Android完全支持JDK本身的TCP,UDP网络通信API,也可以使用ServerSocket,Socket来建立基于TCP/IP协议的网络通信,也可以使用DatagramSocket,Datagrampacket来建立基于UDP协议的网络通信。Android也支持JDK提供的URL,URLConnection等网络通信API。Android还内置了HttpClient,和HttpUrlConnection这样可以非常方便地发送HTTP请求,并获取Http响应。

——基于TCP协议的编程

使用Socket,ServerSocket编程:

使用多线程,handler机制完成网络编程.

注意:由于手机无线上网的IP地址通常都是由移动运营公司动态分配的,一般不会有自己固定的IP地址,因此很少在手机上运行服务器端,服务器端通常运行在有固定IP的服务器上。

——访问网络资源必须放在子线程中
——需要添加访问网络的权限
——IP地址,不能写成127.0.0.1.
——使用Handler机制解析返回的数据
——注意解决乱码问题

——使用URL进行网络编程

——使用URL访问网络资源

URL对象代表统一资源定位符。它是指向互联网中的资源。该资源可以使简单的文件或目录。也可以是对更复杂的对象的引用。

URL的格式:protocol://host:port/resourceName

可以使用构造器创建URL对象,一旦获得URL对象,可以调用如下的方法访问该URL对应的资源:

String getFile():获取URL的资源名
String getHost():获取URL的主机名
String getPath():获取URL的路径部分
int getPort():获取URL的端口号
String getProtocol():获取URL的协议名称
String getQuery():获取URL的查询字符串部分
InputStream url.openStream():打开URL的连接,返回一个读取该资源的InputStream。

代码编写:

1.服务器的编写:

使用Socket和ServerSocket:

public class serverTest {
 public static void main(String[] args) {
  try {
    ServerSocket serverSocket=new ServerSocket(7777);
    System.out.println("服务器已经在7777端口上启动了");
    while (true) {
      //有阻塞的功能,拿不到socket下面的方法也不会执行
      Socket socket=serverSocket.accept();
      System.out.println("有客户端发出请求了");
      new ServerThread(socket).start();
    }
  } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  }
 }
}

ServerThread继承Thread:

public class ServerThread extends Thread{
  private Socket socket;
  OutputStream outputStream;
  public ServerThread(Socket socket) {
    this.socket=socket;
  }
  @Override
  public void run() {
    // TODO Auto-generated method stub
    try {
      outputStream=socket.getOutputStream();
      outputStream.write(("服务器端的时间"+new Date()).getBytes("UTF-8"));
      outputStream.flush();
      outputStream.close();
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    super.run();
  }
}

2.客户端的编写:

关键代码:

public void click(View view){
  new Thread(){
    public void run() {
      try {
        //客户端从服务端获取数据
        Socket client=new Socket("169.254.244.141", 7777);
        BufferedReader bufferedReader=
            new BufferedReader
            (new InputStreamReader
                (client.getInputStream()));
        String text=bufferedReader.readLine();
        //tv.setText(text);
        //线程复用
        Message msg= Message.obtain();
        msg.what=0x123;
        msg.obj=text;
        handler.sendMessage(msg);
      } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    };
  }.start();
}

从服务器端得到时间~

效果图如下:

Android基于TCP和URL协议的网络编程示例【附demo源码下载】

附:完整实例代码点击此处本站下载

希望本文所述对大家Android程序设计有所帮助。

Python 相关文章推荐
网站渗透常用Python小脚本查询同ip网站
May 08 Python
CentOS中升级Python版本的方法详解
Jul 10 Python
LRUCache的实现原理及利用python实现的方法
Nov 21 Python
Python爬虫工程师面试问题总结
Mar 22 Python
APIStar:一个专为Python3设计的API框架
Sep 26 Python
深入了解python中元类的相关知识
Aug 29 Python
Python TCP通信客户端服务端代码实例
Nov 21 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
python 贪心算法的实现
Sep 18 Python
python工具dtreeviz决策树可视化和模型可解释性
Mar 03 Python
Python+tkinter实现高清图片保存
Mar 13 Python
Python实现PS图像抽象画风效果的方法
Jan 23 #Python
matplotlib作图添加表格实例代码
Jan 23 #Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
Jan 23 #Python
Django实现组合搜索的方法示例
Jan 23 #Python
50行Python代码实现人脸检测功能
Jan 23 #Python
Python基于OpenCV实现视频的人脸检测
Jan 23 #Python
Python求出0~100以内的所有素数
Jan 23 #Python
You might like
浅析iis7.5安装配置php环境
2015/05/10 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
php通过各种函数判断0和空
2020/07/04 PHP
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
如何使用Vuex+Vue.js构建单页应用
2016/10/27 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
Node.js搭建小程序后台服务
2018/01/03 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
JavaScript动态创建二维数组的方法示例
2019/02/01 Javascript
VuePress 静态网站生成方法步骤
2019/02/14 Javascript
Vue Echarts实现可视化世界地图代码实例
2019/05/07 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
[01:35]辉夜杯战队访谈宣传片—LGD
2015/12/25 DOTA
Python脚本暴力破解栅栏密码
2015/10/19 Python
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
使用pytorch进行图像的顺序读取方法
2018/07/27 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
numpy库reshape用法详解
2020/04/19 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
Ruby如何实现动态方法调用
2012/11/18 面试题
高二历史教学反思
2014/01/25 职场文书
电厂职工自我鉴定
2014/02/20 职场文书
大学生活自我评价
2014/04/09 职场文书
团拜会策划方案
2014/06/07 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
活动总结报告怎么写
2014/07/03 职场文书
兵马俑的导游词
2015/02/02 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
MySQL 时间类型的选择
2021/06/05 MySQL
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL