android培训6、网络通信编程_第1页
android培训6、网络通信编程_第2页
android培训6、网络通信编程_第3页
android培训6、网络通信编程_第4页
android培训6、网络通信编程_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Android网络通信技术手机端本章目标手机网络通信方式Java标准-URL/HttpURLConnectionApache HTTP通信接口-HttpClientWebView以及应用程序和网页交互*Wifi通信*BlueTooth通信网络通信层次图WiFi模块GSM模块BlueToothLINUX TCP/IP 协议栈BlueZDalvik以及API连接管理及控制服务JAVA用户层Android核心层Linux内核层 .*org.apache.http.*java.nio.*TCP/IP 协议栈协议栈的作用?TCP/IP 协议栈的分层以及作用?传输层的协议端口概念?TCP/IP 协议栈与

2、SOCKET APITCP/IP 协议栈中应用层协议有哪些?接下来为传输层 TCP 协议的相关知识TCP 报文段格式图1 TCP报文段格式图2 数据伪报文头格式建链过程中的“三次握手”注意:利用两次握手,完成对服务器的攻击,状态:syn_recv关闭链路的四次握手注意:利用两或三次握手,造成服务器资源的消耗;另外,在无线通讯过程中,客户端关闭连接后,过早关闭链路,也会造成服务器的资源回收不及时,time_wait状态熟记在心HTTP 协议基于TCP的WEB应用协议客户端或浏览器发起一次request请求post get head put服务端根据请求进行应答response数据被客户端接收后,

3、服务端关闭连接则完成一次交互HTTP报文由两个部分构成:HTTP包头HTTP包体即正文部分HTTP 分析-1GET请求头HTTP应答头GET 路径/文件名 HTTP/1.1HTTP/1.1 状态码 错误信息Content-Type: (类型)Content-length:(包体长度)回车换行回车换行HTTP 分析-2POST请求头POST /WebProj/main.jsp HTTP/1.1Accept: application/x-shockwave-flash, image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/vnd

4、.ms-excel, application/vnd.ms-powerpoint, application/msword, application/xaml+xml, application/x-ms-xbap, application/x-ms-application, */*Referer: Accept-Language: zh-cnUser-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET4.0C)Content-Type

5、: application/x-www-form-urlencodedAccept-Encoding: gzip, deflateHost: localhost:8080Content-Length: 35Connection: Keep-AliveCache-Control: no-cacheCookie: JSESSIONID=4B17A9F74CE01E60DB890D7E75E00D1EtextAccountNumber=1001&textPwd=1111消息报头提交的消息数据CRLF(回车),表示消息头结束HttpURLConnection普通URL请求URL/HttpURLConn

6、ectionURL url = new URL(“ ”);HttpURLConnection conn = (HttpURLConnection)url.openConnection();if(conn.getResponseCode ()=HttpURLConnection.HTTP_OK)InputStream is = conn.getInputStream(); .看示例1: NetDemoServlet(Web 项目)启动 NetDemo_1 (Android 项目) .ClientDemo1HttpURLConnection Post 请求-头String BOUNDARY = j

7、ava.util.UUID.randomUUID().toString(); String PREFIX = - , LINEND = rn; String MULTIPART_FROM_DATA = multipart/form-data; String CHARSET = UTF-8; conn.setReadTimeout(5 * 1000); / 缓存的最长时间 conn.setDoInput(true);/ 允许输入 conn.setDoOutput(true);/ 允许输出 conn.setUseCaches(false); / 不允许使用缓存 conn.setRequestMet

8、hod(POST); conn.setRequestProperty(connection, keep-alive); conn.setRequestProperty(Charsert, UTF-8); conn.setRequestProperty(Content-Type, MULTIPART_FROM_DATA + ;boundary= + BOUNDARY);HttpURLConnection Post 请求-数据DataOutputStream outStream = new DataOutputStream(conn.getOutputStream(); /发送文件数据 Strin

9、gBuilder sb1 = new StringBuilder(); sb1.append(PREFIX); sb1.append(BOUNDARY); sb1.append(LINEND); sb1.append(Content-Disposition: form-data; name=file1; filename=+FileName+LINEND); sb1.append(Content-Type: application/octet-stream; charset=+CHARSET+LINEND); sb1.append(LINEND); outStream.write(sb1.to

10、String().getBytes(); /读文件 InputStream is = new FileInputStream(FileName); byte buffer = new byte1024; int len = 0; while (len = is.read(buffer) != -1) outStream.write(buffer, 0, len); is.close(); outStream.write(LINEND.getBytes(); /请求结束标志 byte end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getByte

11、s(); outStream.write(end_data); outStream.flush(); 使用总结1、HttpURLConnection的connect()函数,实际上只是建立了一个与服务器的tcp连接,并没有实际发送http请求。无论是post还是get,http请求实际上直到HttpURLConnection的getInputStream()这个函数或其它获取响应信息的方法,才正式发送出去在用POST方式发送URL请求时,URL请求参数的设定位置是重中之重,对connection对象的一切配置都必须要在connect()函数执行之前完成对outputStream的写操作,又必须

12、要在inputStream的读操作之前connect()函数会根据HttpURLConnection对象的配置值生成http头部信息http头后面紧跟着的是http请求的正文,正文的内容是通过outputStream流输出的Http 相关类URLEncoderString static encode(String url,String env);将url中非az,09的字符进行重新编码URLDecoderString static decode(String url,String env);将编码后的字符串解码看示例: HttpWebServer项目com.great.http.URLEnco

13、der_URLDecoder_Demo1Apache Http 网络类HttpClienthttp操作对象 execute则发起请求HttpGet/HttpPost构造get/post请求HttpResponse应答对象Header getAllHeadersHttpEntity getEntityHttpParams getParamsStatusLine getStatusLineApache HTTP 包相关类HttpHeaderHTTP协议头HttpEntityHTTP包体HttpParamsHTTP协议的参数RequestLine请求头中请求行StatusLine 应答头中状态行Na

14、meValuePair/BasicNameValuePair 键值对UrlEncodedFormEntity构造HttpEntity实体看示例1: NetDemoServlet(Web 项目)启动 NetDemo_1 (Android 项目) .ClientDemo1Apache HTTP 包工具类org.apache.http.utils.*EntityUtils实体工具类EncodingUtils编码工具类看示例1: NetDemoServlet(Web 项目)启动 NetDemo_1 (Android 项目) .ClientDemo1apache Http 示例tryHttpClient

15、 httpClient = new DefaultHttpClient();HttpGet get = new HttpGet(“ ”);HttpResponse res = httpClient.execute(get);if(res.getStatusLine().getStatusCode=HttpStatus.SC_OK)InputStream is = res.getEntity.getContent();catch(IOException ioe)WebViewWebView 处理HTML内容的控件,类似于浏览器loadUrl(String url); 装载网页loadData(S

16、tring data);装载数据loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl);装载数据看示例:NetDemo1项目 .WebView_Demo1WebViewClient用来接收/处理来自网页的各种通知或事件setWebViewClient(new WebViewClient();请查阅WebViewClient接口WebChromeClient用来处理网页JS对话框、 favicons(浏览器地址栏左侧的那个小图标) 、Title、进度

17、条等等setWebChromeClient(new WebChromeClient();请查阅WebChromeClient接口WebView 与网页内容WebView和JavaScript交互,达到控制网页的目的webView.getSettings.setJavaScriptEnabled(true);webView.addJavaScriptInterface(Object object,String interfaceName);在js中,erfaceName.getInterfaceName()即可得到Java对象看示例:NetDemo1项目 .WebView_Demo2WifiSc

18、anResult描述已经检测出的接入点(地址、名称、认证、频率、信号强度等)WifiConfiguationWifi网络的配置WifiManagerWifi管理服务WifiManager.WifiLockWifiManager方法说明addNetwork添加一个已经配置好的网络连接caculateSignalLevel计算信号强度createWifiLockdisableNetwork/enableNetworkdisconnectgetConfiguredNetwork获取已经配置好的网络连接列表getScanResultgetConnectionInfo得到正在使用的连接的信息startS

19、can扫描存在的接入点updateNetwork更新网络reassociate重新连接管理和控制 Wifi需要申请的权限ACCESS_WIFI_STATEWAKE_LOCKCHANGE_WIFI_STATE连接通道管理Android默认Wifi连接,当没有wifi通道时,使用gprs通道ConnectivityManagerContext.getSystemService(Context.CONNECTIVITY_SERVICE)监控网络连接(Wi-Fi, GPRS, UMTS, etc.)当网络连接发生改变时,发出broadcast intents;ACTION_BACKGROUND_DAT

20、A_SETTING_CHANGED 后台参数设置被更改CONNECTIVITY_ACTION 连接发生改变时提供api函数让用户获取连接的信息,例如:NetworkInfo netInfo = getAvailableNetworkInfo()看示例:NetDemo1项目 workInfo_Demo1Bluetooth 蓝牙BluetoothAdapter本地蓝牙设备的适配类,所有的蓝牙操作都要通过该类完成BluetoothClass蓝牙设备类,代表了蓝牙通讯过程中的远端设备BluetoothClass.DeviceBluetoothClass.Device.MajorBluetoothCla

21、ss.ServiceBluetoothDevice蓝牙设备类,代表了蓝牙通讯过程中的远端设备Bluetooth 通信BluetoothServerSocket服务器通讯套接字,与TCP ServerSocket类似BluetoothSocket蓝牙通讯套接字,代表了与远端设备的连接点,使用socket本地程序可以通过inputstream和outputstream与远端程序进行通讯蓝牙的操作步骤(1)-打开蓝牙1、让应用程序获得蓝牙操作权限2、获得蓝牙对象,判断蓝牙是否允许使用以及是否打开mBluetoothAdapter = BluetoothAdapter.getDefaultAdapte

22、r(); mBluetoothAdapter.enable()允许使用 ,不提示mBluetoothAdapter.isEnabled()或startActivity(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE),REQUEST_ENABLE_BT); 该方法会给用户提示蓝牙的操作步骤(2)-搜寻蓝牙设备获取已经配对的蓝牙设备Set pairedDevices = mBluetoothAdapter.getBondedDevices();搜寻蓝牙设备mBluetoothAdapter.startDiscovery(),异步操作/ Crea

23、te BroadcastReceiver for ACTION_FOUNDprivate final BroadcastReceiver mReceiver = new BroadcastReceiver() public void onReceive(Context context, Intent intent) String action = intent.getAction(); if (BluetoothDevice.ACTION_FOUND.equals(action) /从Intent中获取蓝牙设备 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论