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 相关文章推荐
Django中redis的使用方法(包括安装、配置、启动)
Feb 21 Python
用python爬取租房网站信息的代码
Dec 14 Python
python 移动图片到另外一个文件夹的实例
Jan 10 Python
对python For 循环的三种遍历方式解析
Feb 01 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
详解Python用三种方式统计词频的方法
Jul 29 Python
Python的bit_length函数来二进制的位数方法
Aug 27 Python
Python实现的爬取豆瓣电影信息功能案例
Sep 15 Python
执行Django数据迁移时报 1091错误及解决方法
Oct 14 Python
适合Python初学者的一些编程技巧
Feb 12 Python
Django 解决阿里云部署同步数据库报错的问题
May 14 Python
python如何导入依赖包
Jul 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
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
使用NetBeans + Xdebug调试PHP程序的方法
2011/04/12 PHP
PHP 图片水印类代码
2012/08/27 PHP
有关于PHP中常见数据类型的汇总分享
2014/01/06 PHP
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
原生javascript实现addClass,removeClass,hasClass函数
2016/02/25 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
利用JQuery阻止事件冒泡
2016/12/01 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
2017/03/09 Javascript
js实现旋转木马效果
2017/03/17 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
VUE+Element实现增删改查的示例源码
2020/11/23 Vue.js
vuex的使用步骤
2021/01/06 Vue.js
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
python如何导入依赖包
2020/07/13 Python
Python本地及虚拟解释器配置过程解析
2020/10/13 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
Brasty罗马尼亚:购买手表、香水、化妆品、珠宝
2020/04/21 全球购物
广州品高软件.net笔面试题目
2012/04/18 面试题
EJB实例的生命周期
2016/10/28 面试题
幼儿园安全责任书
2014/04/14 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
2014优秀党员事迹材料
2014/08/14 职场文书
2014年学生工作总结
2014/11/20 职场文书
房贷工资证明范本
2015/06/12 职场文书
小学体育课教学反思
2016/02/16 职场文书
SQL Server使用PIVOT与unPIVOT实现行列转换
2022/05/25 SQL Server