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中的字符串操作和编码Unicode详解
Jan 18 Python
pandas 透视表中文字段排序方法
Nov 16 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
Jan 19 Python
django 信号调度机制详解
Jul 19 Python
Python数据处理篇之Sympy系列(五)---解方程
Oct 12 Python
解决tensorflow由于未初始化变量而导致的错误问题
Jan 06 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
Python插件机制实现详解
May 04 Python
python 如何使用find和find_all爬虫、找文本的实现
Oct 16 Python
Python如何使用神经网络进行简单文本分类
Feb 25 Python
python包的导入方式总结
Mar 02 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 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模板Smarty的初级使用方法以及心得分享
2013/06/21 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
图文详解PHP环境搭建教程
2016/07/16 PHP
javascript中常用编程知识
2013/04/08 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
jquery让返回的内容显示在特定div里(代码少而精悍)
2014/06/23 Javascript
Javascript常用字符串判断函数代码分享
2014/12/08 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
js仿QQ邮箱收件人选择与搜索功能
2017/02/10 Javascript
ES6中Math对象的部分扩展
2017/02/20 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
基于小程序请求接口wx.request封装的类axios请求
2020/07/02 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
[46:20]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第二场 1月22日
2021/03/11 DOTA
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
Numpy掩码式数组详解
2018/04/17 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
Python异常原理及异常捕捉实现过程解析
2020/03/25 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
EJB实例的生命周期
2016/10/28 面试题
小学教师自我鉴定
2013/11/07 职场文书
电子信息专业学生自荐信
2013/11/09 职场文书
教师的实习鉴定
2013/12/15 职场文书
社团活动总结范文
2014/04/26 职场文书
简洁的英文求职信范文
2014/05/03 职场文书
召开会议通知范文
2015/04/15 职场文书
工作时间调整通知
2015/04/24 职场文书
2016年情人节问候语
2015/11/11 职场文书
python3实现无权最短路径的方法
2021/05/12 Python