本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Android通信方式总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

更多相关文章

  1. Android之Translucent Bar半透明栏和immersive bar沉浸式的区别
  2. Android获取三轴加速度和view的重绘
  3. 【Android】【学习笔记】运行时资源替换-Runtime Resource Overl
  4. 自定义获取WI-FI列表及相关设置
  5. 获取Android设备唯一标识码以及其他信息
  6. Android基础知识复习之打开照相机拍照并获取照片
  7. Android项目优化查错神器之android lint
  8. Android相机、相册获取图片显示并保存到SD卡
  9. 【android】利用ContentObserver监听短信来获取验证码

随机推荐

  1. 开箱即用!Android四款系统架构工具
  2. Android对不同DPI的dimen选择优先级问题
  3. Android AIDL服务学习笔记
  4. 福利来了!带你“爱上Android”
  5. selector背景以及android的透明色
  6. Android启动过程以及各个镜像的关系
  7. 如何移植ROS程序到Android
  8. Android第三章 (UI)
  9. android studio gradle 多渠道打包之完全
  10. Android Animation浅析