本文实例讲述了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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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.客户端的编写:
关键代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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