Android中实现Web通信
来源:互联网 发布:linux系统怎么学 编辑:程序博客网 时间:2024/05/19 13:17
我们都知道在学习java时,我们可以使用TCP/IP协议来实现通信,而且实现的是可靠传输,其实TCP,IP是两个不同的协议,IP协议只是用于实现连接不进行数据传输.
而TCP协议则是一种传输协议,实现传输之前必须先实现连接,这两个协议是相互互补的,所以我们称之为TCP/IP协议.与之对应的是UDP协议,这是不可靠的传输,那么究竟什么是TCP/IP协议,什么是UDP协议,下面让我们来看看这两个协议的区别以及相互的优缺点.
TCP(传输控制协议):
1)提供IP环境下的数据可靠传输(一台计算机发出的字节流会无差错的发往网络上的其他计算机,而且计算机A接收数据包的时候,也会向计算机B回发数据包,这也会产生部分通信量),有效流控,全双工操作(数据在两个方向上能同时传递),多路复用服务,是面向连接,端到端的传输;
2)面向连接:正式通信前必须要与对方建立连接。事先为所发送的数据开辟出连接好的通道,然后再进行数据发送,像打电话。
3)TCP支持的应用协议:Telnet(远程登录)、FTP(文件传输协议)、SMTP(简单邮件传输协议)。TCP用于传输数据量大,可靠性要求高的应用。
UDP(用户数据报协议,User Data Protocol)
1)面向非连接的(正式通信前不必与对方建立连接,不管对方状态就直接发送,像短信,QQ),不能提供可靠性、流控、差错恢复功能。UDP用于一次只传送少量数据,可靠性要求低、传输经济等应用。
2) UDP支持的应用协议:NFS(网络文件系统)、SNMP(简单网络管理系统)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。
总结:
TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。
UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。
好了区别也看了,那么下面就让我们看看具体的例子怎么实现的,java中实现web通信,相信做过javaweb的应该已经很清楚,那么在安卓中又是如何实现的呢?
其实在安卓中java的那些api仍然使用,比如Socket等:
我们先新建一个服务端,我们可以直接建立一个Java工程:
package serverpackage;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;public class SimpleServer {public static void main(String[] args) throws Exception{//创建一个ServerSocket对象用于接收客户端请求ServerSocket ss=new ServerSocket(30000);//循环的接收while(true){//服务器端每次接受到一个客户端的Socket请求也会创建一个SocketSocket s=ss.accept();OutputStream os=s.getOutputStream();os.write("您好,欢迎使用本系统".getBytes());//关闭输入输出流os.close();s.close();}}}
创建完服务端我们该如何去实现安卓项目来与之通信呢?
如下步骤:
第一步:xml文件如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" > <Button android:id="@+id/btn_link" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/link" android:textColor="#000000" android:textSize="20sp" /> <TextView android:layout_marginTop="30dp" android:id="@+id/tv_show" android:textSize="20sp" android:textColor="#0000ff" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /></LinearLayout>
当点击按钮时将服务器端的数据发送到客户端.
代码如下所示:
package com.brucecheng.client;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.Socket;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity {//寻找控件TextView tv_show;Button btn_link;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//实例化控件tv_show=(TextView) findViewById(R.id.tv_show);btn_link=(Button) findViewById(R.id.btn_link);//设置监听事件btn_link.setOnClickListener(new OnClickListener() {public void onClick(View v) {//创建Socket对象try {Socket s=new Socket("192.168.1.236", 30000);//将Socket对应输入流变为包装流BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));//进行普通的IO操作String line=br.readLine();tv_show.setText("来自服务器的消息:"+line);br.close();s.close();} catch (Exception e) {e.printStackTrace();}}});}}
最后运行结果如下所示:
从运行结果我们可以看到,通信已经成功:
注意:再次我们要注意以下几点:
1.因为这是web通信我们需要联网,所以我们也要注册权限,即:<uses-permission android:name="android.permission.INTERNET"/>.
2.安卓设备所连接的网络必须和服务器端的网络在同一个网络中.否则通信会失败
- Android中实现Web通信
- Android中Java与web通信
- Android中蓝牙通信的实现
- Android系统中HTTPS通信的实现
- 使用 PHP 消息队列实现 Android 与 Web 通信
- Android使用Java Web服务器作为中转实现即时通信
- Android -- 与WEB交互在同一个会话Session中通信
- android 实现socket通信
- Android实现UDP通信
- Android中AIDL实现(跨进程通信)
- Android中AIDL实现(跨进程通信)
- Android中AIDL实现(跨进程通信)
- Android中AIDL实现(跨进程通信)
- Android中实现native服务利用binder与应用通信
- android 中使用aidl实现进程间通信
- Android中AIDL实现(跨进程通信)
- Contacts---android中实现调用通信录并返回电话号码
- android static实现Service与Activity中Handler通信
- RSA公钥加密算法
- 关于PPP multilink的负载均衡和分片大小
- test
- 1160C语言实验——某年某月的天数
- 10115 - Automatic Editing
- Android中实现Web通信
- cocos2dx之创建有渐影效果的sprite
- 数字图像处理(五) 利用PCA算法进行人脸识别
- iOS游戏开发三:苹果内支付实现 In-app
- 基于visual Studio2013解决C语言竞赛题之1055排序
- JAX-WS 2.2 API is required, but an older version was found in the JDK.
- hdu1316(斐波那契数列+高精度)
- 1163C语言实验——排列
- vs同一个工程下不要有多个main函数