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 专题二 条件语句和循环语句的基础知识
Mar 19 Python
Python学习笔记之图片人脸检测识别实例教程
Mar 06 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 Python
Python判断字符串是否xx开始或结尾的示例
Aug 08 Python
django 连接数据库 sqlite的例子
Aug 14 Python
springboot配置文件抽离 git管理统 配置中心详解
Sep 02 Python
python如何将两个txt文件内容合并
Oct 18 Python
TensorFlow实现checkpoint文件转换为pb文件
Feb 10 Python
Python读取文件内容为字符串的方法(多种方法详解)
Mar 04 Python
MxNet预训练模型到Pytorch模型的转换方式
May 25 Python
Django与AJAX实现网页动态数据显示的示例代码
Feb 24 Python
Jupyter Notebook内使用argparse报错的解决方案
Jun 03 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获取Exif缩略图的方法
2015/07/13 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
jquery滚动特效集锦
2015/06/03 Javascript
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
理解JS绑定事件
2016/01/19 Javascript
在点击div中的p时,如何阻止事件冒泡
2017/02/07 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
详解使用vue-admin-template的优化历程
2018/05/20 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
2020/04/09 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
python队列Queue的详解
2019/05/10 Python
Python 创建TCP服务器的方法
2020/07/28 Python
夜大自我鉴定
2013/10/31 职场文书
项目经理岗位职责
2013/11/11 职场文书
教育学专业毕业生的自我鉴定
2013/11/26 职场文书
演讲稿怎么写才完美
2014/01/02 职场文书
颁奖典礼主持词
2014/03/25 职场文书
低碳生活倡议书
2014/04/14 职场文书
岗位明星事迹材料
2014/05/18 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
车辆年检委托书范本
2014/10/14 职场文书
幼儿园欢迎词范文
2015/01/26 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
2015年测量员工作总结
2015/05/23 职场文书
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang