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 27 Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
Jul 28 Python
聊聊Python中的pypy
Jan 12 Python
如何实现删除numpy.array中的行或列
May 08 Python
python中对二维列表中一维列表的调用方法
Jun 07 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
Jun 17 Python
详解基于python的全局与局部序列比对的实现(DNA)
Oct 07 Python
python如何利用Mitmproxy抓包
Oct 10 Python
PyCharm2020.3.2安装超详细教程
Feb 08 Python
Python带你从浅入深探究Tuple(基础篇)
May 15 Python
pytorch--之halfTensor的使用详解
May 24 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冒泡排序
2014/12/30 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
JavaScript遍历table表格中的某行某列并打印其值
2014/07/08 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
Javasript设计模式之链式调用详解
2018/04/26 Javascript
layui实现动态和静态分页
2018/04/28 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
[43:58]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第二局
2016/02/27 DOTA
python如何生成网页验证码
2018/07/28 Python
python实现随机漫步算法
2018/08/27 Python
Python时间和字符串转换操作实例分析
2019/03/16 Python
Python发展史及网络爬虫
2019/06/19 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
Django模板语言 Tags使用详解
2019/09/09 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
pyqt5中动画的使用详解
2020/04/01 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
一道写SQL的面试题和答案
2013/11/19 面试题
大二法英学生职业生涯规划范文
2014/02/27 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书
使用Django框架创建项目
2022/06/10 Python