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远程登录代码
Apr 29 Python
python实现的用于搜索文件并进行内容替换的类实例
Jun 28 Python
Python网络爬虫实例讲解
Apr 28 Python
Python3 单行多行万能正则匹配方法
Jan 07 Python
使用Python opencv实现视频与图片的相互转换
Jul 08 Python
python实现简单聊天室功能 可以私聊
Jul 12 Python
numpy中三维数组中加入元素后的位置详解
Nov 28 Python
python Popen 获取输出,等待运行完成示例
Dec 30 Python
解决Python中报错TypeError: must be str, not bytes问题
Apr 07 Python
Python实现转换图片背景颜色代码
Apr 30 Python
基于python 将列表作为参数传入函数时的测试与理解
Jun 05 Python
tensorflow+k-means聚类简单实现猫狗图像分类的方法
Apr 28 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控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
PHP 批量删除 sql语句
2009/06/05 PHP
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
PHP 生成N个不重复的随机数
2015/01/21 PHP
PHP解决中文乱码
2017/04/28 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
Javascript 判断函数类型完美解决方案
2009/09/02 Javascript
CSS图片响应式 垂直水平居中
2015/08/14 Javascript
论Bootstrap3和Foundation5网格系统的异同
2016/05/16 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
vue之数据交互实例代码
2017/06/16 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
2018/12/13 Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
javascript如何实现create方法
2019/11/04 Javascript
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
初步理解Python进程的信号通讯
2015/04/09 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
Python 元类实例解析
2018/04/04 Python
Numpy array数据的增、删、改、查实例
2018/06/04 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
python中的字符串内部换行方法
2018/07/19 Python
python实现指定文件夹下的指定文件移动到指定位置
2018/09/17 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
python 基于卡方值分箱算法的实现示例
2020/07/17 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
招商业务员岗位职责
2013/12/16 职场文书
实习公司领导推荐函
2014/05/21 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
历史博物馆观后感
2015/06/05 职场文书
2016大学生党校学习心得体会
2016/01/06 职场文书
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js