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创建XML文档
Mar 01 Python
Python实现读取文件最后n行的方法
Feb 23 Python
Python 3.6 读取并操作文件内容的实例
Apr 23 Python
用pandas中的DataFrame时选取行或列的方法
Jul 11 Python
浅析python的Lambda表达式
Feb 27 Python
python 使用shutil复制图片的例子
Dec 13 Python
Python Sphinx使用实例及问题解决
Jan 17 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
May 25 Python
Python高并发和多线程有什么关系
Nov 14 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
Dec 07 Python
matplotlib之pyplot模块实现添加子图subplot的使用
Apr 25 Python
Python基础之元类详解
Apr 29 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安全配置
2006/12/06 PHP
spl_autoload_register与autoload的区别详解
2013/06/03 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
javascript suggest效果 自动完成实现代码分享
2012/02/17 Javascript
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
JS实现仿QQ效果的三级竖向菜单
2015/09/25 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
javascript this详细介绍
2016/09/19 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
2016/11/07 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
浅谈Python中的数据类型
2015/05/05 Python
使用Python对Access读写操作
2017/03/30 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
django 模版关闭转义方式
2020/05/14 Python
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
土木工程毕业生推荐信
2013/10/28 职场文书
大学生实习证明范本
2014/01/15 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs