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判断文件和文件夹是否存在的方法
May 21 Python
全面解析Python的While循环语句的使用方法
Oct 13 Python
Django学习笔记之Class-Based-View
Feb 15 Python
Python实现两个list对应元素相减操作示例
Jun 09 Python
Python读取视频的两种方法(imageio和cv2)
Apr 15 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
Apr 15 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
Jun 19 Python
使用PyOpenGL绘制三维坐标系实例
Dec 24 Python
pytorch之ImageFolder使用详解
Jan 06 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
Jan 10 Python
Python获取浏览器窗口句柄过程解析
Jul 25 Python
python中绕过反爬虫的方法总结
Nov 25 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/10/09 PHP
模板引擎Smarty深入浅出介绍
2006/12/06 PHP
Discuz! Passport 通行证整合
2008/03/27 PHP
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
php去除字符串中空字符的常用方法小结
2015/03/17 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
IE iframe的onload方法分析小结
2010/01/07 Javascript
什么是DOM(Document Object Model)文档对象模型
2012/03/05 Javascript
一个js过滤空格的小函数
2014/10/10 Javascript
AngularJS上拉加载问题解决方法
2016/05/23 Javascript
简单谈谈axios中的get,post方法
2017/06/25 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
2018/04/01 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
Vue2.2.0+新特性整理及注意事项
2018/08/22 Javascript
javascript中如何判断类型汇总
2019/05/14 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
Python中的Django基本命令实例详解
2018/07/15 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
python之当你发现QTimer不能用时的解决方法
2019/06/21 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
python推导式的使用方法实例
2021/02/28 Python
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
Groupon比利时官方网站:特卖和网上购物高达-70%
2019/08/09 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
写演讲稿要注意的六件事
2014/01/14 职场文书
家长会邀请书
2014/01/25 职场文书
优秀本科生求职推荐信
2014/02/24 职场文书
暑假安全保证书
2015/02/28 职场文书
工作简历的自我评价
2019/05/16 职场文书
python turtle绘图命令及案例
2021/11/23 Python