Android之网络编程之网络通信几种方式实例分享

                                      这篇文章主要介绍了android 网络编程之网络通信几种方式,有需要的朋友可以参考一下

                          现在总结了六种方式:

(1)针对TCP/IP的Socket、ServerSocket

(2)针对UDP的DatagramSocket、DatagramPackage。这里需要注意的是,考虑到Android设备通常是手持终端,IP都是随着上网进行分配的。不是固定的。因此开发也是有一点与普通互联网应用有所差异的。

(3)针对直接URL的HttpURLConnection。

(4)Google集成了Apache HTTP客户端,可使用HTTP进行网络编程。

(5)使用WebService。Android可以通过开源包如jackson去支持Xmlrpc和Jsonrpc,另外也可以用Ksoap2去实现Webservice。

(6)直接使用WebView视图组件显示网页。基于WebView 进行开发,Google已经提供了一个基于chrome-lite的Web浏览器,直接就可以进行上网浏览网页。

一、socket与serverSocket

客户端代码

public class TestNetworkActivity extends Activity implements OnClickListener{private Button connectBtn;private Button sendBtn;private TextView showView;private EditText msgText;private Socket socket;private Handler handler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.test_network_main);connectBtn = (Button) findViewById(R.id.test_network_main_btn_connect);sendBtn = (Button) findViewById(R.id.test_network_main_btn_send);showView = (TextView) findViewById(R.id.test_network_main_tv_show);msgText = (EditText) findViewById(R.id.test_network_main_et_msg);connectBtn.setOnClickListener(this);sendBtn.setOnClickListener(this);handler = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);String data = msg.getData().getString("msg");showView.setText("来自服务器的消息:"+data);}};}@Overridepublic void onClick(View v) {//连接服务器if(v == connectBtn){connectServer();}//发送消息if(v == sendBtn){String msg = msgText.getText().toString();send(msg);}}/** *连接服务器的方法*/public void connectServer(){try {socket = new Socket("192.168.1.100",4000);System.out.println("连接服务器成功");recevie();} catch (Exception e) {System.out.println("连接服务器失败"+e);e.printStackTrace();} }/***发送消息的方法*/public void send(String msg){try {PrintStream ps = new PrintStream(socket.getOutputStream());ps.println(msg);ps.flush();} catch (IOException e) {e.printStackTrace();}}/***读取服务器传回的方法*/public void recevie(){new Thread(){public void run(){while(true){try {InputStream is = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));String str = br.readLine();Message message = new Message();Bundle bundle = new Bundle();bundle.putString("msg", str);message.setData(bundle);handler.sendMessage(message);} catch (IOException e) {e.printStackTrace();}}}}.start();}
}

二、RUL、URLConnection、httpURLConnection、ApacheHttp、WebView

public class TestURLActivity extends Activity implements OnClickListener {private Button connectBtn;private Button urlConnectionBtn;private Button httpUrlConnectionBtn;private Button httpClientBtn;private ImageView showImageView;private TextView showTextView;private WebView webView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.test_url_main);connectBtn = (Button) findViewById(R.id.test_url_main_btn_connect);urlConnectionBtn = (Button) findViewById(R.id.test_url_main_btn_urlconnection);httpUrlConnectionBtn = (Button) findViewById(R.id.test_url_main_btn_httpurlconnection);httpClientBtn = (Button) findViewById(R.id.test_url_main_btn_httpclient);showImageView = (ImageView) findViewById(R.id.test_url_main_iv_show);showTextView = (TextView) findViewById(R.id.test_url_main_tv_show);webView = (WebView) findViewById(R.id.test_url_main_wv);connectBtn.setOnClickListener(this);urlConnectionBtn.setOnClickListener(this);httpUrlConnectionBtn.setOnClickListener(this);httpClientBtn.setOnClickListener(this);}@Overridepublic void onClick(View v) {// 直接使用URL对象进行连接if (v == connectBtn) {try {URL url = new URL("http://192.168.1.100:8080/myweb/image.jpg");InputStream is = url.openStream();Bitmap bitmap = BitmapFactory.decodeStream(is);showImageView.setImageBitmap(bitmap);} catch (Exception e) {e.printStackTrace();}}// 直接使用URLConnection对象进行连接   if (v == urlConnectionBtn) {try {URL url = new URL("http://192.168.1.100:8080/myweb/hello.jsp");URLConnection connection = url.openConnection();InputStream is = connection.getInputStream();byte[] bs = new byte[1024];int len = 0;StringBuffer sb = new StringBuffer();while ((len = is.read(bs)) != -1) {String str = new String(bs, 0, len);sb.append(str);}showTextView.setText(sb.toString());} catch (Exception e) {e.printStackTrace();}}// 直接使用HttpURLConnection对象进行连接if (v == httpUrlConnectionBtn) {try {URL url = new URL("http://192.168.1.100:8080/myweb/hello.jsp?username=abc");HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {String message = connection.getResponseMessage();showTextView.setText(message);}} catch (Exception e) {e.printStackTrace();}}// 使用ApacheHttp客户端进行连接(重要方法)if (v == httpClientBtn) {try {HttpClient client = new DefaultHttpClient();// 如果是Get提交则创建HttpGet对象,否则创建HttpPost对象// HttpGet httpGet = new// HttpGet("http://192.168.1.100:8080/myweb/hello.jsp?username=abc&pwd=321");// post提交的方式HttpPost httpPost = new HttpPost("http://192.168.1.100:8080/myweb/hello.jsp");// 如果是Post提交可以将参数封装到集合中传递List dataList = new ArrayList();dataList.add(new BasicNameValuePair("username", "aaaaa"));dataList.add(new BasicNameValuePair("pwd", "123"));// UrlEncodedFormEntity用于将集合转换为Entity对象httpPost.setEntity(new UrlEncodedFormEntity(dataList));// 获取相应消息HttpResponse httpResponse = client.execute(httpPost);// 获取消息内容HttpEntity entity = httpResponse.getEntity();// 把消息对象直接转换为字符串String content = EntityUtils.toString(entity);//showTextView.setText(content);//通过webview来解析网页webView.loadDataWithBaseURL(null, content, "text/html", "utf-8", null);//给点url来进行解析//webView.loadUrl(url);} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
}

三、使用webService

public class LoginActivity extends Activity implements OnClickListener{private Button loginBtn;private static final String SERVICE_URL = "http://192.168.1.100:8080/loginservice/LoginServicePort";private static final String NAMESPACE = "http://service.lovo.com/";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.login_main);loginBtn = (Button) findViewById(R.id.login_main_btn_login);loginBtn.setOnClickListener(this);}@Overridepublic void onClick(View v) {if(v == loginBtn){//创建WebService的连接对象HttpTransportSE httpSE = new HttpTransportSE(SERVICE_URL);//通过SOAP1.1协议对象得到envelopSoapSerializationEnvelope envelop = new SoapSerializationEnvelope(SoapEnvelope.VER11);//根据命名空间和方法名来创建SOAP对象SoapObject soapObject = new SoapObject(NAMESPACE, "validate");//向调用方法传递参数soapObject.addProperty("arg0", "abc");soapObject.addProperty("arg1","123");//将SoapObject对象设置为SoapSerializationEnvelope对象的传出SOAP消息envelop.bodyOut = soapObject;try {//开始调用远程的方法httpSE.call(null, envelop);//得到远程方法返回的SOAP对象SoapObject resultObj = (SoapObject) envelop.bodyIn;//根据名为return的键来获取里面的值,这个值就是方法的返回值String returnStr = resultObj.getProperty("return").toString();Toast.makeText(this, "返回值:"+returnStr, Toast.LENGTH_LONG).show();} catch (IOException e) {e.printStackTrace();} catch (XmlPullParserException e) {e.printStackTrace();}}}
}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常用MIME类型(Flv,Mp4的mime类型设置)

也许你会在纳闷,为什么我上传了flv或MP4文件到服务器,可输入正确地址通过http协议来访问总是出现“无法找到该页”的404错误呢?这就表明mp4格式文件是服务器无法识别的,其实,这是没有在iis中将相应的MIME类型进行设置的…

史上四大“杀人”建筑,烧掉几百亿,却犯低级错误,网友:有钱人的智商,我不懂

全世界只有3.14 % 的人关注了爆炸吧知识本文转自普象工业设计小站这个世界上有多少荒谬的建筑?国内土味审美的大楼只是冰山一角在更多的国家里耗费巨资,却无比失败的工程比土味大楼更多更荒唐你也许听说过美国这座会跳舞的大桥耗资千万,由优秀…

迎.NET6,今日先送200P全新视频教程 / 源码

昨晚已经正式发布了.NET6,具体参见:https://devblogs.microsoft.com/dotnet/announcing-net-6/。这是.NET团队和社区努力一年的成果,C# 10 和 F# 6 有很大的语言改进,使代码更简单、更好。性能有了巨大的提升,我们看到微软的云服务…

文章观后感

文章地址http://knowledge100.blog.51cto.com/3448830/793559 这篇文章讲的是三层交换机-vlan间路由配置,主要讲述的是通过实例的方式说明如何在一个典型的快速以太局域网中实现VLAN间路由的问题。通过设置VTP域、配置交换机间中继链路、在核心交换机上创建VLAN、将…

JSP之三大指令

page指令&#xff1a; * import&#xff1a;等同与import语句 <% page import"java.util.*" %> <% page import"java.util.*, java.net.*" %>在一个JSP页面中可以给出多个page指令&#xff0c;而且import是可以重复出现的 <% page import&q…

android 横向stepview,Android 流程指示器 StepView

软件介绍StepView 是Android平台下自定义的流程指示器。效果图&#xff1a;使用:android:id"id/step_view0"android:layout_width"match_parent"android:layout_height"wrap_content"android:layout_centerInParent"true"android:text…

Android之项目中如何用好构建神器Gradle?

Gradle虽为构建神器&#xff0c;但感觉学习曲线比较陡峭。Gradle User Guide内容很多&#xff0c;但有点太多了&#xff0c;多的你看不完&#xff0c;Gradle Plugin User Guide一篇文章主要讲了Android相关的配置&#xff0c;看完可能感觉马马虎虎会用&#xff0c;但到了修改一…

JavaScript执行环境 + 变量对象 + 作用域链 + 闭包

闭包真的是一个谈烂掉的内容。说到闭包&#xff0c;自然就涉及到执行环境、变量对象以及作用域链。汤姆大叔翻译的《深入理解JavaScript系列》很好&#xff0c;帮我解决了一直以来似懂非懂的很多问题&#xff0c;包括闭包。下面就给自己总结一下。包括参考大叔的译文以及《Java…

58年前,这3个人在“撕逼”中拿下诺贝尔奖!一起研究DNA的女科学家却痛苦去世.........

全世界只有3.14 % 的人关注了爆炸吧知识人类的本质是双螺旋结构1953年4月25日&#xff0c;《自然》杂志发表了一篇不到千字的论文&#xff1a;消息一出&#xff0c;便掀起了科学界的轩然大波。因为这篇短小精悍的论文史无前例地揭示了正确的DNA立体结构。图片仅供参考&#xff…

Azure App Service 上的根证书

点击上方蓝字关注“汪宇杰博客”原文&#xff1a;Amol Mehrotra翻译&#xff1a;Edi Wang导语App Service 有一个受信任的根证书列表&#xff0c;您不能在 App Service 的多租户版本中修改这些证书&#xff0c;但您可以在应用服务环境 (ASE) 的受信任根存储中加载自己的 CA 证书…

String.Format和StringBuilder的效率

到底String.Format还是StringBuilder效率更高一点&#xff1f;至于这个问题&#xff0c;直接叫他用强大的武器Reflector了解一下String.Format的方法.结果他很快就找出相关的代码: public static string Format(IFormatProvider provider, string format, params object[] arg…

jettytomcat对待表单过长问题

为什么80%的码农都做不了架构师&#xff1f;>>> 结论两句话&#xff1a; tomcat知道自己处理不了了&#xff0c;什么也不干过去了 jett知道自己处理不了了&#xff0c;抛个IllegalStateException出来通知一下 jetty默认允许的content-length2001000 org.eclips…

Android之Adapter用法总结

Android之Adapter用法总结 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到Adapter。如下图直观的表达了Data、Adapter、View三者的关系: Android中所有的Adapter一览: …

那些年,画家发明的黑科技

全世界只有3.14 % 的人关注了爆炸吧知识在现代摄影技术发明之前&#xff0c;获取图像的最佳方式只有绘画。在绘画的时代&#xff0c;如何把事物画的逼真&#xff0c;几乎成为了困扰画家一生的问题。为了准确展现客观世界&#xff0c;让画面看起来更加逼真&#xff0c;古代的艺术…

shared_ptrT make_shared( Args ... args );

shared_ptr很好地消除了显式的delete调用&#xff0c;如果读者掌握了它的用法&#xff0c;可以肯定delete将会在你的编程字典中彻底消失。但这还不够&#xff0c;因为shared_ptr的构造还需要new调用&#xff0c;这导致了代码中的某种不对称性。虽然shared_ptr很好地包装了new表…

Android jdwp 自动断开,开启debug调试模式,进入不了,等一会就闪退了!!!!

原因&#xff1a;debug标记加多了art/runtime/jdwp/jdwp_event.cc:661] Check failed: Thread::Current() ! GetDebugThread() (Thread::Current()0xe1908400, GetDebugThread()0xe1908400) Expected event thread11-16 15:29:18.457 10331-10339/包名 A/art: art/runtime/runt…

Visual Studio 2022发布了,我最爱的5大特性

VS2022今天Visual Studio 2022 终于发布了&#xff0c;你只需要按下⾯地址就可以快速安装你所需要的Visual Studio 2022版本&#xff0c;包括了企业版本&#xff0c;专业版本&#xff0c;以及社区版本。请输入以下⽹址安装最新的Visual Studio 2022 https://aka.ms/InstallVS或…

ASP.NET3.5 企业级项目开发 -- 第二章 数据访问层(DAL)的开发

为什么80%的码农都做不了架构师&#xff1f;>>> ASP.NET3.5 企业级项目开发 &#xff0d;&#xff0d; 第二章 数据访问层(DAL)的开发 前言&#xff1a;本篇主要讲述数据访问层的开发&#xff0c;而且为了大家交流&#xff0c;已经创建企业项目开发团队&…

Android之URI简介

就Android平台而言&#xff0c;URI主要分三个部分&#xff1a;scheme, authority and path。其中authority又分为host和port。格式如下&#xff1a; scheme://host:port/path 举个实际的例子&#xff1a; content://com.example.project:200/folder/subfolder/etc \---------/ …

虚拟机安装和使用

软件更新快&#xff0c;所以我也不知道什么时候这些密钥啊就失效了&#xff0c;最新应用的安装时间&#xff1a;15年 虚拟机软件不少&#xff0c;其中应用最广发的一个就是VMware Workstation&#xff0c;以后用了别的虚拟机&#xff0c;安装教程再加~ VMware Workstation http…