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 域名分析工具实现代码
Jul 15 Python
Python中为feedparser设置超时时间避免堵塞
Sep 28 Python
python之matplotlib学习绘制动态更新图实例代码
Jan 23 Python
python 字符串和整数的转换方法
Jun 25 Python
python操作excel的方法
Aug 16 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
Jan 07 Python
Python遍历文件夹 处理json文件的方法
Jan 22 Python
tensorflow求导和梯度计算实例
Jan 23 Python
pytorch梯度剪裁方式
Feb 04 Python
python next()和iter()函数原理解析
Feb 07 Python
Python轻量级web框架bottle使用方法解析
Jun 13 Python
python爬取代理ip的示例
Dec 18 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
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
基础的WordPress插件制作教程
2015/11/24 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
js几个不错的函数 $$()
2006/10/09 Javascript
jquery 指南/入门基础
2007/11/30 Javascript
javascript温习的一些笔记 基础常用知识小结
2011/06/22 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
2014/05/08 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
详解vue-router和vue-cli以及组件之间的传值
2017/07/04 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
2017/08/03 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
2019/05/10 Javascript
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
2020/07/30 Python
CSS3解决移动页面上点击链接触发色块的问题
2016/06/03 HTML / CSS
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
美味咖啡的顶级烘焙师:Cafe Britt
2018/03/15 全球购物
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
EMPHASIS艾斐诗官网:周生生旗下原创精品珠宝品牌
2020/12/17 全球购物
信息技术专业个人自我评价
2013/12/11 职场文书
反腐倡廉警示教育活动总结
2014/05/05 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis