Android基于TCP和URL协议的网络编程示例【附demo源码下载】
技术  /  管理员 发布于 7年前   118
本文实例讲述了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程序设计有所帮助。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号