Android基于TCP和URL协议的网络编程示例【附demo源码下载】
作者:飘走的我 发布时间:2021-08-26 03:18:55
本文实例讲述了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程序设计有所帮助。
来源:http://blog.csdn.net/qq_33642117/article/details/51872377


猜你喜欢
- SQLPlus是进行Oracle操作的主要前台工具,用户名和密码分别为用户名和密码,连接ORACLE数据库可见,显示的比较混乱,可以通过以下
- asp之家注:也许你还没有接触过使用js来调用asp文件,也许你也不知道如何用JS调用asp文件,甚至你也不知道JS调用asp文件有什么好处
- Django测试框架非常简单,首选方法是使用python标准库中的unittest模块。Writing testsDjango的单元测试使用
- 二进制日志的文件的作用 mysql二进制日志文件用来记录所有用户对数据库操作,即记录用户对数据库操作的
- 1.现在我本机系统已内置python2.62.下载进行源码安装复制链接下载到/root/mypackage,解压接着mkdir /usr/l
- 客户端用一个html页面调用一个ashx文件(一般http处理程序),返回 json格式的自定义对象: html: <!DOCTYPE
- 12306火车票购票软件大家都用过,怎么用Python写一个命令行的火车票查看器,要求在命令行敲一行命令来获得你想要的火车票信息,下面通过本
- Python序列化的概念很简单。内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人。你会怎么做?这取决于你想要怎么保存,怎么
- 一般采用的方法:self.window = Qdialog() # 实例化self.window.show() # 显示界面用这种方法只能打
- 不管是哪个版本的Ubuntu,安装mysql数据库基本上都是大同小异。下面介绍一下具体的安装步骤:1、打开终端,并取得root权限2、在终端
- Set objTextStream=FileSystemObject.CreateTextFile(Filename,[Overwrite]
- 在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤。通过端口扫描我们可以了解到目标主机都开
- 首先,为什么选择Tornado:1.高性能的网络库,这可以和gevent,twisted,libevent等做对。提供了异步io支持,超时事
- 目的临床数据的记录时间和对应标签(逗号后面的数字)记录在txt文件里,要把标签转换为3类标签,并且计算出每个标签的分别持续时间,然后绘制成柱
- 本文介绍了jquery在vue脚手架中的使用方式示例,分享给大家,具体如下:1:在各个vue文件中使用<script>impor
- 一、Mysql事务概念MySQL 事务主要用于处理操作量大,复杂度高的数据。由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执
- 废话不多说了,直接上代码吧!#!/usr/bin/env python# coding=utf-8# 画一棵樱花import turtlei
- 在查看MySQL对文件的操作中,它在不同的操作系统上对文件的操作,除了使用标准C运行库函数,包括open、close、seek等,在Win3
- 修改python运行路径import osos.chdir('C:/Users/86177/Desktop')os.chdi
- 以GraphViz为例:下载安装好的路径名字为C:/Program Files (x86)/Graphviz2.38import osos.