Android使用webView和ServerSocket模拟客户端和服务端通讯
2016-02-21 10:10
489 查看
功能介绍:
1、服务端:手机端新建线程,创建serverSocket监听8080端口;
2、客户端:使用webView的方法loadURl(“http://172.0.0.1:8080“)访问本地;
下载地址:http://download.csdn.net/detail/youngwm/9438042
一、在布局文件xml创建webView对象:
1、服务端:手机端新建线程,创建serverSocket监听8080端口;
2、客户端:使用webView的方法loadURl(“http://172.0.0.1:8080“)访问本地;
下载地址:http://download.csdn.net/detail/youngwm/9438042
一、在布局文件xml创建webView对象:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/hint_str" android:layout_margin="10dp"/> <EditText android:id="@+id/edit_url" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/hint_str1" android:layout_margin="10dp"/> <Button android:id="@+id/btn_change_url" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onClick" android:layout_margin="10dp" android:text="@string/btn_str"/> <WebView android:id="@+id/web_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> public class MainActivity extends Activity { Button mBtn ; WebView mWebView ; WebSettings mWebSetting ; EditText server, appendUrl; // String url = "http://www.baidu.com/"; String url = "http://127.0.0.1:8080/"; String TAG = getClass().getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initActivity(); startServer(); } /** * 开启监听线程*/ private void startServer(){ Thread thread = new Thread(new Runnable() { @Override public void run() { socketServer(); } }); thread.start(); } private DataInputStream reader; private DataOutputStream writer; /** * 创建socketServer监听webView的访问,并返回html页面*/ private void socketServer(){ try{ ServerSocket serverSocket = new ServerSocket(8080); while(true){ Socket socket = serverSocket.accept(); reader=new DataInputStream(socket.getInputStream() ); if (reader.readLine() != null ){ writer=new DataOutputStream(socket.getOutputStream()); String html = "<!doctype html><html><head><meta charset=\"utf-8\"><title>" + "错误页面</title><style>.htext{font-family:\"微软雅黑\"; " + "text-align:center; margin-top:5em; line-height:1.5em;font-size:20px;" + "}a.retry{font-family:\"微软雅黑\"; text-align:center; display:block; " + "background:#00aaee; border:#3D6E96; border-radius:4px; height:1.7em; " + "width:4em; line-height:1.7em; margin:0 auto; text-decoration:none; " + "color:#FFF;}a.retry:hover,a.retry:active{background:#069dd9;" + "font-size:24px;}</style></head><body><p class=\"htext\">" + "请求失败,引起原因:</br>1、网络异常</br>2、信号中断</p>" + "<a class=\"retry\" href=\"#\">重试</a></body></html>"; byte[] bytes = html.getBytes(); int len = bytes.length; Log.i(TAG, "socketServer: len =" + len); writer.write(("HTTP/1.0 200 OK\r\nContent-Length:"+len+"\r\n\r\n").getBytes()); writer.write(bytes); writer.close(); } } }catch (Exception e){ e.printStackTrace(); } } private void initActivity(){ mWebView = (WebView) findViewById(R.id.web_view); mWebSetting = mWebView.getSettings(); server = (EditText) findViewById(R.id.edit_text); server.setVisibility(View.GONE); appendUrl = (EditText) findViewById(R.id.edit_url); appendUrl.setVisibility(View.GONE); //------------------------------------------------------ mBtn = (Button) findViewById(R.id.btn_change_url); mBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { loadWebPage(); // if (server.getText().toString().equals("")) // server.setText("http://www.baidu.com/"); // url = server.getText().toString() + appendUrl.getText().toString(); initActivity(); } }); //------------------------------------------------------------ //启用触控缩放 mWebSetting.setBuiltInZoomControls(true); //启用支持视窗meta标记(可实现双击缩放) mWebSetting.setUseWideViewPort(true); //以缩略图模式加载页面 mWebSetting.setLoadWithOverviewMode(true); //启用JavaScript支持 mWebSetting.setJavaScriptEnabled(true); //设置将接收各种通知和请求的WebViewClient(在WebView加载所有的链接) mWebView.setWebViewClient(new WebViewClient()); //设置默认加载的网页 // loadWebPage(); receivedError(); } /** * 访问网页 * */ private void loadWebPage(){ // 方式1: mWebView.loadUrl(url); // 方式2: // useLoadData(); // 方式3:加载本地assets里的html网页 // mWebView.loadUrl("file:///android_asset/tet.html"); } /** * 使用loadData /loadDataWithBaseURL方法处理网页 **/ private void useLoadData(){ String data = "<!DOCTYPE html>"; data += "<html>"; data += "<head><title>出错页面</title>"; data += "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"></head>"; data += "<body><style>body{ text-align:center;background:#efefef; color:#6f6f6f;margin: 0;"; data += "padding: 0;width:100%;}#center{ MARGIN-RIGHT: auto;MARGIN-LEFT: auto;height:200px;"; data += "width:400px;vertical-align:middle;line-height:200px;}</style>"; data += "<div id=\"center\">"; data += "<a style=\"font-size:24px;color:#333333\" href='http://baidu.com'>请求失败,重试</a>"; data += "</div></body></html>"; // mWebView.loadData(data,"text/html", "utf-8" ); mWebView.loadDataWithBaseURL("",data,"text/html", "utf-8", "" ); } /** * 接收错误信息,http error无妨接收 **/ private void receivedError(){ mWebView.setWebViewClient(new WebViewClient(){ @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { Log.i(TAG, "onReceivedError: " ); } @SuppressWarnings("deprecation") @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Log.i(TAG, "onReceivedError: errorCode:" +errorCode + " 描述:" + description ); Toast.makeText(MainActivity.this, "errorCode:"+errorCode, Toast.LENGTH_SHORT).show(); } @Override public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { Log.i(TAG, "onReceivedHttpError:接收到错误" ); Toast.makeText(MainActivity.this, "接收到错误", Toast.LENGTH_SHORT).show(); } }); } /** * 返回键的处理 **/ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode){ case KeyEvent.KEYCODE_BACK : if (mWebView.canGoBack()){ mWebView.goBack(); return true; }else{ finish(); } break; default: break; } return false; } }
相关文章推荐
- 2015年Android开发新技术小结
- 【iOS】数据持久化
- ANDROID_MARS学习笔记_S04_001_OAuth简介
- ios之图片png/jpg
- ANDROID_MARS学习笔记_S03_009_GOOGLEMAP3
- 基础 Android 开发规范整理
- 【Android】11.3 屏幕旋转和场景变换过程中GridView的呈现
- gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
- 【Android】11.2 通过重写对应的方法保存和恢复实例的状态
- android中把APK用platfrom签名
- 【Android】11.1 Activity的生命周期和管理
- 【Android】11.0 第11章 活动和片段--本章示例主界面
- 应用市场快速下载以及网页端调起APP页面研究与实现
- jqMobi(App Framework)入门学习(一)
- Android 开源项目android-open-project解析之(三) ScrollView,TimeView,TipView,FlipView
- 使用工具来提升Android开发效率
- Android读取assets中的文件
- ios中关于block使用的精华总结
- Android自定义Toast总结(下)
- iOS打包发布测试版本