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中使用第三方库xlrd来写入Excel文件示例
Apr 05 Python
简单介绍Python中的filter和lambda函数的使用
Apr 07 Python
用Python计算三角函数之atan()方法的使用
May 15 Python
多版本Python共存的配置方法
May 22 Python
Python定时器实例代码
Nov 01 Python
Djang的model创建的字段和参数详解
Jul 27 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
Mar 06 Python
Python生成器next方法和send方法区别详解
May 30 Python
Keras 切换后端方式(Theano和TensorFlow)
Jun 19 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
Aug 20 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
Jan 12 Python
python 爬取天气网卫星图片
Jun 07 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中如何调用用户自定义函数
2013/08/06 PHP
完美解决PHP中的Cannot modify header information 问题
2013/08/12 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
2011/04/07 Javascript
js快速排序的实现代码
2013/12/08 Javascript
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
不得不分享的JavaScript常用方法函数集(下)
2015/12/25 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
ECMAScript6轮播图实践知识总结
2016/08/17 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
2016/10/31 Javascript
js操作浏览器的参数方法
2017/01/21 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
node实现登录图片验证码的示例代码
2018/04/20 Javascript
详解webpack+ES6+Sass搭建多页面应用
2018/11/05 Javascript
python中Flask框架简单入门实例
2015/03/21 Python
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
Django imgareaselect手动剪切头像实现方法
2015/05/26 Python
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
python高阶爬虫实战分析
2018/07/29 Python
分析python请求数据
2018/08/19 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
如何写出好的Java代码
2014/04/25 面试题
装修五一活动策划案
2014/01/23 职场文书
任命书范本大全
2014/06/06 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers
Python软件包安装的三种常见方法
2022/07/07 Python