版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android网络程序设计嵌入式系统开发与设计网络通信基础计算机网络计算机网络相互连接的、自治的计算机集合,以共享资源为目的互联网由多个计算机网络相互连接而成,而不论采用何种协议与技术的网络无线网采用无线传输介质(无线电、红外线等)的网络包括远距离无线连接和近距离无线连接前者的代表是2G网络后者的代表是红外线和射频3InternetInternet因特网由那些使用公用语言互相通信的计算机连接而成的全球网络Internet的特点连接范围广泛,是全球性的网络内容丰富,具有海量的资源采用TCP/IP协议栈,具有灵活多样的接入方式能够对信息进行快捷的检索与共享4无线网络无线局域网(WLAN)工作于2.5GHz或5GHz频段,以无线方式构成的局域网Wifi全称wirelessfidelity基于IEEE802.11标准的无线网络品牌目前WLAN的主流无线城域网(WMAN)IEEE802.16标准及其扩展标准覆盖面积较大无线广域网(WWAN)IEEE802.20标准以比城域网更大范围内的无线连接为目标5无线网络(2)3G第三代移动通信网络支持语音和数据传输,尤其是高速数据传输3G标准WCDMA欧洲版本3G,由中国联通采用CDMA2000美国版本3G,由中国电信采用TD-SCDMA中国版本3G,由中国移动采用6Android支持的网络7Android网络接口基于Linux内核的Android包含一组优秀的联网功能Android平台有3种网络接口.*(标准Java接口)org.apache(Apache接口).*(Android网络接口)J.*(标准java接口)提供与联网有关的类包括流和数据包套接字,Internet协议,常见HTTP协议处理,比如创建URL以及URLConnection/HttpURLConnection对象设置连接参数,连接到服务器,向服务器谢数据,从服务器读取数据等通信8Android网络接口(2)org.apache(Apache接口)Android平台引入ApacheHttpClientHttpClient是ApacheJakartaCommon下的子项目可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且支持HTTP协议最新的版本和建议提供针对ApacheHttpClient的封装和扩展例如设置缺省的HTTP超时和缓存大小等Android平台用的版本是HttpClient4.0对于HttpClient类,可以使用HttpPost和HttpGet类以及HttpResponse来进行网络连接9Android网络接口(3).*(Android网络接口)实际上是通过对Apache中HttpClient的封装来实现的一个HTTP编程接口提供HTTP请求队列管理以及HTTP连接池管理提高并发请求情况下(如转载网页时)的处理效率包括其他相关的接口网络状态监视等接口网络访问的Socket常用的Uri类有关WiFi相关的类等等10Android蓝牙Android蓝牙协议栈Android蓝牙协议栈BlueZ支持GAP,SDP和RFCOMM规范是SIG认证的蓝牙协议栈BluezGPL许可Android的框架内与用户空间的bluez代码通过D-BUS进程通讯进行交互,以避免专有代码Headset和Handsfree(v1.5)规范在Android框架中实现的与PhoneApp紧密耦合是SIG认证的12Android蓝牙协议栈(2)以库为导向的蓝牙栈视图13Android蓝牙协议栈(3)以进程为导向视图14Android蓝牙协议栈(4)RFCOMM协议简单传输协议基于欧洲电信标准协会ETSI07.10规程的串行线性仿真协议针对如何在两个不同设备上的应用之间保证一条完整的通信路径,并在它们之间保持一通信段提供RS232控制和状态信号,为上层业务(如传统的串行线缆应用)提供了传送能力如基带上的损坏,CTS以及数据信号等蓝牙协议栈需要提供与有线串口一致的通信接口而开发出的协议RFCOMM协议提供对基于L2CAP协议的串口仿真可支持在两个BT设备之间同时保持高达60路的通信连接。RFCOMM只针对直接互连设备之间的连接,或者是设备与网络接入设备之间的互连15Android蓝牙开发Android中有关蓝牙的类和接口位于android.bluetooth包中蓝牙API的主要功能范围允许应用程序连接和断开蓝牙耳机、扫描仪和其他蓝牙设备编写和修改本地服务的SDP协议数据库查询其他蓝牙设备上的SDP协议数据库在Android上建立RFCOMM协议的连接并连接到其他指定设备上16Android蓝牙开发(2)Android蓝牙BluetoothAdapter:蓝牙适配器(代表本地蓝牙适配器)BluetoothClass:蓝牙类(主要包括服务和设别)BluetoothClass.Device:蓝牙设备类BluetoothClass.蓝牙设备管理BluetoothClass.Service:有关蓝牙服务的类BluetoothDevice:蓝牙设备(主要指远程蓝牙设备)BluetoothServerSocket:监听蓝牙连接的类BluetoothSocket:蓝牙连接类17Android蓝牙开发(3)BluetoothAdapter类本地的蓝牙适配器是所有蓝牙交互的的入口点通过该类可以发现其他蓝牙设备,查询绑定了的设备,使用已知的MAC地址实例化一个蓝牙设备和建立一个BluetoothServerSocket(作为服务器端)来监听来自其他设备的连接BluetoothDevice类远端的蓝牙设备用来请求远端蓝牙设备连接或者获取远端蓝牙设备的名称、地址、种类和绑定状态其信息是封装在BluetoothSocket中18Android蓝牙开发(4)BluetoothSocket类蓝牙套接字的接口(类似于TCP中的套接字)应用程序通过输入、输出流与其他蓝牙设备通信的连接点。BlueboothServerSocket类代表打开服务连接来监听可能到来的连接请求(属于server端)为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字当远端设备发起连接连接请求的时候,并且已经连接到了的时候,BlueboothServerSocket类将会返回一个BluetoothSocketBluetoothClass类描述蓝牙设备的一般特点和能力其只读属性集定义了设备的主、次设备类和一些相关服务没有准确地描述所有该设备所支持的蓝牙文件和服务,而是作为对设备种类来说的暗示19Android蓝牙开发(5)BluetoothAdapter主要方法cancelDiscovery():取消正在进行的蓝牙设备搜索disable():关闭蓝牙enable():打开蓝牙这个方法打开蓝牙不会弹出提示提示用户的方法20Intentenabler=newIntent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(enabler,reCode);//同startActivity(enabler);Android蓝牙开发(6)BluetoothAdapter主要方法getAddress():获取本地蓝牙地址getDefaultAdapter():获取默认BluetoothAdapter的唯一方法getName():获取本地蓝牙名称getRemoteDevice(Stringaddress):根据蓝牙地址获取远程蓝牙设备getState():获取本地蓝牙适配器当前状态isDiscovering():判断当前是否正在查找设备,是则返回trueisEnabled():判断蓝牙是否打开,已打开返回true,否则返回falselistenUsingRfcommWithServiceRecord(Stringname,UUIDuuid):根据名称创建UUID并返回BluetoothServerSocket创建BluetoothSocket服务器端的第一步startDiscovery():开始搜索搜索的第一步21Android蓝牙开发(7)BluetoothDevice主要方法createRfcommSocketToServiceRecord(UUIDuuid):根据UUID创建并返回一个BluetoothSocket其他方法与BluetoothAdapter相似BluetoothServerSocket主要方法只有三个方法两个重载的accept(),accept(inttimeout)两者的区别在于后面的方法指定了过时时间执行这两个方法的时候,直到接收到了客户端的请求(或是过期之后)都会阻塞线程,应该放在新线程里运行这两个方法都返回一个BluetoothSocket,最后的连接也是服务器端与客户端的两个BluetoothSocket的连接close():关闭22Android蓝牙开发(8)BluetoothSocket主要方法5个方法是客户端,与BluetoothServerSocket相对close():关闭connect():连接getInptuStream():获取输入流getOutputStream():获取输出流getRemoteDevice():获取远程设备指的是获取bluetoothSocket指定连接的那个远程蓝牙设备23Android蓝牙开发(9)蓝牙设备使用启动蓝牙功能查找设备查询匹配设备扫描设备使能被发现连接设备服务端连接客户端连接管理连接24Android蓝牙开发(10)启动蓝牙功能首先通过调用静态方法getDefaultAdapter()获取蓝牙适配器BluetoothAdapter之后可以使用该对象如果返回为空,则无法继续执行然后调用isEnabled()来查询当前蓝牙设备的状态如果返回为false,表示蓝牙设备没有开启然后封装一个ACTION_REQUEST_ENABLE请求到intent里面调用startActivityForResult()方法使能蓝牙设备25Android蓝牙开发(11)查找设备使用BluetoothAdapter类里的方法,可以查找大约十米内的远端设备或者查询在你手机上已经匹配的其他手机如果对方蓝牙设备打开,则可以初始化连接第一次连接其他蓝牙设备配对的请求会自动显示给用户当设备匹配好之后,其一些基本信息(主要是名字和MAC)被保存下来并可以使用蓝牙的API来读取使用已知的MAC地址就可以对远端的蓝牙设备发起连接请求匹配好的设备和连接上的设备的区别匹配好说明对方设备发现了本地设备的存在,并拥有一个共同的识别码,并且可以连接连接上表示当前设备共享一个RFCOMM信道并且两者之间可以交换数据蓝牙设备在连接之前必须已经配对好26Android蓝牙开发(12)查询匹配好的设备在建立连接之前必须先查询匹配好的蓝牙设备集来提供候选连接设备建立一个蓝牙连接只需要MAC地址扫描设备调用startDiscovery()方法扫描的过程大概持续是12秒应用程序为了ACTION_FOUND动作需要注册一个BroadcastReceiver来接受设备扫描到的信息对于每一个设备,系统都会广播ACTION_FOUND动作扫描过程很耗费资源一旦找到需要的设备之后,在发起连接请求之前,确保程序调用cancelDiscovery()方法停止扫描如果已经连接上一个设备,启动扫描会减少通信带宽27Android蓝牙开发(13)使能被发现如果希望使设备能够被其他设备发现,需要进行封装将ACTION_REQUEST_DISCOVERABLE动作封装在intent中并调用startActivityForResult(Intent,int)方法将在不使应用程序退出的情况下使设备能够被发现缺省情况下使能时间为120秒可以通过添加EXTRA_DISCOVERABLE_DURATION字段来改变使能时间出于信息安全考虑,最大不超过300秒如果准备对该远端设备发现一个连接,不需要开启使能设备被发现功能28Android蓝牙开发(14)连接设备建立两个蓝牙设备之间的连接必须实现客户端和服务器端的代码任何一个设备都必须可以作为服务端或者客户端一个开启服务来监听,一个发起连接请求(使用服务器端设备的MAC地址)当它们都拥有一个蓝牙套接字在同一RFECOMM信道上的时候,可以认为他们之间已经连接上了服务端和客户端通过不同的方式或其他们的蓝牙套接字当一个连接监听到的时候,服务端获取到蓝牙套接字当客户可打开一个FRCOMM信道给服务器端的时候,客户端获取到蓝牙套接字连接过程中如果两个蓝牙设备还没有配对好的,android系统会通过一个通知或者对话框的形式来通知用户RFCOMM连接请求会在用户选择之前阻塞29Android蓝牙开发(15)服务端的连接要连接两台设备时,一个必须作为服务端(通过持有一个打开的BluetoothServerSocket),目的是监听外来连接请求当监听到以后提供一个连接上的BluetoothSocket给客户端,当客户端从BluetoothServerSocket得到BluetoothSocket以后就可以销毁BluetoothServerSocket如果需要监听更多的连接请求,则不必销毁客户端的连接为了初始化一个与远端设备的连接,需要先获取代表该设备的一个BluetoothDevice对象通过BluetoothDevice对象来获取BluetoothSocket并初始化连接30Android蓝牙开发(16)管理连接当设备连接上以后,每个设备都拥有各自的BluetoothSocket可以实现设备之间数据的共享通过调用getInputStream()和getOutputStream()方法来获取输入输出流然后通过调用read(byte[])和write(byte[]).方法来读取或者写数据读取和写操作都是阻塞调用需要建立一个专用线程来进行管理31AndroidWi-FiAndroidWifiAndroidWifi开发Android为WiFi编程提供了一些重要的包这些包在.wifi包中33AndroidWifi(2)canResult主要用来描述已经检测出的接入点包括接入点的地址,接入点的名称,身份认证,频率,信号强度等信息WifiConfigurationWifi网络的配置,包括安全设置等WifiInfowifi无线连接的描述包括接入点,网络连接状态,隐藏的接入点,IP地址,连接速度,MAC地址,网络ID,信号强度等信息WifiManager用来管理wifi连接提供管理WiFi连接的大部分API34AndroidWifi(3)WifiInfo的主要方法getBSSID():
获取BSSIDgetDetailedStateOf():
获取客户端的连通性getHiddenSSID():获得SSID是否被隐藏getIpAddress():获取IP地址getLinkSpeed():获得连接的速度getMacAddress():获得Mac地址getRssi():获得802.11n网络的信号getSSID():获得SSIDgetSupplicanState():返回具体客户端状态的信息35AndroidWifi(4)Wifi网卡状态由一系列的整形常量表示WIFI_STATE_DISABLEDWIFI网卡不可用(1)WIFI_STATE_DISABLINGWIFI网卡正在关闭(0)WIFI_STATE_ENABLEDWIFI网卡可用(3)WIFI_STATE_ENABLINGWIFI网正在打开(2)(WIFI启动需要一段时间)WIFI_STATE_UNKNOWN未知网卡状态36AndroidWifi(5)Wifi初始化SystemServer启动时生成一个ConnectivityService实例ConnectivityService的构造函数创建WifiServiceWifiStateTracker创建WifiMonitor接收来自底层的事件WifiService和WifiMonitor是整个模块的核心WifiService负责启动关闭wpa_supplicant、启动关闭WifiMonitor监视线程和把命令下发给wpa_supplicantWifiMonitor则负责从wpa_supplicant接收事件通知37AndroidWifi(6)使能WIFIWirelessSettings在初始化的时候配置了由WifiEnabler来处理Wifi按钮当用户按下Wifi按钮后,Android调用WifiEnabler的onPreferenceChange再由WifiEnabler调用WifiManager的setWifiEnabled接口函数通过AIDL实际调用WifiService的setWifiEnabled函数WifiService接着向自身发送一条MESSAGE_ENABLE_WIFI消息在处理该消息的代码中做真正的使能工作首先装载WIFI内核模块,该模块的位置硬编码为”/system/lib/modules/wlan.ko”然后启动wpa_supplicant,配置文件硬编码为”/data/misc/wifi/wpa_supplicant.conf”再通过WifiStateTracker来启动WifiMonitor中的监视线程38AndroidWifi(7)使能成功使能成功后广播发送WIFI_STATE_CHANGED_ACTION相应的Intent通知外界WIFI已经成功使能WifiEnabler创建时向Android注册接收WIFI_STATE_CHANGED_ACTION收到该Intent,从而开始扫描查找AP扫描的入口函数是WifiService的startScan向wpa_supplicant发送SCAN命令当wpa_supplicant处理完SCAN命令后向控制通道发送事件通知扫描完成从而wifi_wait_for_event函数会接收到该事件
WifiMonitor中的MonitorThread被执行来处理该事件WifiStateTracker接着广播发送SCAN_RESULTS_AVAILABLE_ACTION39AndroidWifi(8)查找APWifiLayer相关处理函数handleScanResultsAvailable会被调用WfiLayer注册了接收SCAN_RESULTS_AVAILABLE_ACTION这个Intent该函数先取得SCAN的结果,通过向wpa_supplicant发送SCAN_RESULT命令并读取返回值来实现对每一个扫描返回的APWifiLayer调用WifiSettings的onAccessPointSetChanged函数最终把该AP加到GUI显示列表中40AndroidWifi(9)配置AP参数当用户在WifiSettings界面上选择了一个AP后,显示配置AP参数的一个对话框连接当用户在AcessPointDialog中选择好加密方式和输入密钥之后,再点击连接按钮,Android就会去连接这个APWifiLayer先检测这个AP是不是之前被配置过通过向wpa_supplicant发送LIST_NETWORK命令并且比较返回值来实现如果wpa_supplicant没有这个AP的配置信息,则会向wpa_supplicant发送ADD_NETWORK命令来添加该APADD_NETWORK命令返回一个IDWifiLayer用这个返回的ID作为参数向wpa_supplicant发送ENABLE_NETWORK命令,从而让wpa_supplicant去连接该AP41AndroidWifi(10)配置IP地址当wpa_supplicant成功连接上AP之后向控制通道发送事件通知连接上APwifi_wait_for_event函数接收到该事件
WifiMonitor中的MonitorThread会被执行来处理该事件WifiMonitor调用WifiStateTracker的notifyStateChangeWifiStateTracker接着往自身发送EVENT_DHCP_START消息来启动DHCP去获取IP地址然后再广播发送NETWORK_STATE_CHANGED_ACTION这个IntentWifiLayer相关处理函数handleNetworkStateChanged会被调用注册接收NETWORK_STATE_CHANGED_ACTION这个Intent当DHCP拿到IP地址之后,再发送EVENT_DHCP_SUCCEEDED消息WifiLayer处理EVENT_DHCP_SUCCEEDED消息再次广播发送NETWORK_STATE_CHANGED_ACTION这个Intent带上完整的IP地址信息42AndroidInternet程序设计AndroidInternet移动智能设备是Internet的重要接入设备接入设备种类丰富接入方式多样无线移动宽带网提供了较高的接入带宽Android
Internet通信方式httpURLConnetction
(J)httpClient(org.apache)Socket通信方式WebView44httphttp(HypertextTransferProtocol)超文本传送协议详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议位于应用层,是移动智能设备联网常用的协议Http采用请求/响应模型客户端向服务器发送请求请求内容包含:请求的方法、URL、协议版本、请求修饰符、客户信息和内容的消息结构服务器端以一个状态行作为响应响应的内容包括消息协议的版本、成功或者错误编码、服务器信息、实体元信息以及可能的实体内最显著的特点客户端发送的每次请求都需要服务器回送响应请求结束后会主动释放连接45http(2)http协议是无状态协议无状态是指协议对于连接没有记忆能力意味着如果后续处理需要前面的信息必须重传可能导致每次连接传送的数据量增大http1.1稳定的http版本http1.1主要技术特征支持持久连接请求方法有8个OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECThttp1.0是3个提供身份认证、状态管理和缓存(Cache)等相关的请求头和响应头46http(3)http请求格式http://host[":"port][abs_path]http使用http作为通讯协议以定位网络资源host合法的Internet主机域名或者IP地址端口指定访问的主机端口号默认为80访问地址指定访问的主机资源URI47http(4)http的请求方法GET请求获取Request-URI所标识的资源;POST在Request-URI所标识的资源后附加新的数据;HEAD请求获取由Request-URI所标识的资源的响应消息报头PUT请求服务器存储一个资源,并用Request-URI作为其标识DELETE请求服务器删除Request-URI所标识的资源;TRACE请求服务器回送收到的请求信息,主要用于测试或诊断CONNECT保留将来使用OPTIONS请求查询服务器的性能,或者查询与资源相关的选项和需求48httpURLConnectionhttpURLConnectionJavaAPI标准接口在包中主要操作创建URL以及HttpURLConnection对象连接参数设置连接到服务器向服务器写数据从服务器读取数据49httpURLConnection(2)httpURLConnection继承自URLConnection类URLConnection和httpURLConnection是抽象类,无法直接实例化对象其对象主要通过URL的openConnection方法获得http使用最多的是Get和Post方法Get请求可以获取静态页面或者可以把参数放在URL字串后面传递给服务器Post参数放在http请求数据中与Get方法不同50httpURLConnection(3)创建httpURLConnection连接openConnection方法只创建URLConnection或者HttpURLConnection实例不进行真正的链接操作每次openConnection创建一个新的实例在连接前需要对一些属性进行设置,比如超时时间等51URLurl=newURL("/");HttpURLConnection
urlConn=(HttpURLConnection)url.openConnection();httpURLConnection(4)对httpURLConnection实例的属性设置52//设置输入/输出流
connection.setDoOutput(true);connection.setDoInput(true);//设置http请求方式为POSTconnnection.setRequestMethod("POST");//设置Post请求不使用缓存
connnection.setUseCache(false);httpURLConnection(5)httpURLConnection默认使用Get方式使用setRequestMethod()方法设置为POST方式同样使用setRequestMethod()方法可以设置为GET方式连接的关闭53//关闭HttpURLConnection连接
urlConn.disconnect();connection.setRequestMethod(“GET”);httpClienthttpClient对类进行的封装和抽象适用于Android系统上的网络应用开发httpClient的ClientConnectionManager接口客户端连接管理接口,提供的抽象方法包括ClientConnectionManager关闭所有无效、超时的连接closeIdleConnection关闭空闲的连接releaseConnection释放一个连接requestConnection请求一个新的连接Shutdown关闭管理器并释放资源54httpClient(2)DefaultHttpClient默认http客户端用来创建一个http连接HttpResponsehttp连接响应执行一个http连接后会返回一个HttpResponse通过HttpResponse可以得到响应信息55HttpClient
httpclient=newDefaultHttpClient();HttpResponsehttpResponse=httpclient.execute(httpRequeset);if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){//连接成功}httpClient(3)httpClient的初始化在进行初始化过程中URL地址的设置可以将预先定义的字符串作为构造函数的参数传入或者创建好HttpGet实例后采用request..setURL()的方法设置Get方式可以以带参数和不带参数两种方式访问主机56HttpClientclient=newDefaultHttpClient();
HttpGetrequest=newHttpGet();httpClient(4)httpClient的POST方式比GET方式复杂通过HttpPost构建POST请求使用NameValuePair保存需要传递的参数可以使用BasicNameValuePair来构造要被传递的参数再通过add方法将该参数添加到NameValuePair中57Stringhttpurl=“”HttpPosthttppost=newHttpPost(url);//使用NameValuePair保存需要传递的参数List<NameValuePair>params=newArrayList<NameValuePair>();//添加将需要传递的参数params.add(newBasicNameValuePair(valuename,value));httpClient(5)POST方式需要设置所使用的字符集其他的连接处理POST方式与GET方式没有多少差别通过HttpClient来请求连接、返回并响应处理58//设置POST方式所使用的字符集HttpEntityhttpentity=newUrlEncodedFormEntity(params,“gb2312”);SocketSocket套接字用于描述IP地址和端口,是通信链的句柄应用程序通过Socket发出网络请求或应答网络请求应用程序与TCP/IP协议进行交互的接口Socket的优点服务器端与客户端可以互相主动发送数据保持客户端与服务器端数据的实时与同步与http相比http在请求结束时主动释放连接59Socket(1)Socket通信必须包含的5种信息连接使用的协议(TCP/UDP)本地主机的IP地址本地进程的协议端口远程主机的IP地址远程进程的协议端口Socket的传输模式面向连接的传输无连接的传输60Socket(2)面向连接的Socket操作使用TCP协议连接必须在发送数据之前建立好并保持稳定数据到达顺序是固定的连接建立后可以使用流接口进行打开、读、写、关闭操作所有发送的信息都会在另一端以同样的顺序被接受无连接的Socket操作使用UDP协议不保证发出数据的达到不保证发出数据按照发出顺序达到目的地面向连接的操作比无连接操的效率低,数据的安全性高61Socket(3)Socket构造Java在包中提供了两个类Socket和ServerSocket分别用来表示双向连接的客户端和服务端每一个端口提供一种特定的服务需要给出正确的端口,才能获得相应的服务0-1023的端口为系统保留在选择端口时最好选择大于1023端口,以防止放生冲突建立SOCKET连接至少需要一对套接字其中一个运行于客户端,称为ClientSocket另一个运行于服务器端,称为ServerSocket62Socket(4)Socket和ServerSocket类Socket(InetAddressaddress,intport);Socket(InetAddressaddress,intport,booleanstream);Socket(Stringhost,intport);Socket(Stringhost,intport,booleanstream);Socket(SocketImplimpl);Socket(Stringhost,intport,InetAddresslocalAddr,intlocalPort);Socket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalPort);ServerSocket(intport);ServerSocket(intport,intbacklog);ServerSocket(intport,intbacklog,InetAddressbindAddr);63Socket(5)参数含义address:双相连接中另一方的IP地址host:双相连接中另一方的主机名port:双相连接中另一方的端口号stream:指明Socket是流Socket还是数据报SocketlocalPort:表示本地主机的端口号localAddr:本地机器的地址(ServerSocket的主机地址)bindAddr:本地机器的地址(ServerSocket的主机地址)Impl:Socket的父类可以用来创建ServerSocket或者可以用来创建Socket64Socket(6)常用的构造函数Socket(InetAddressaddr,intport)Socket(Stringhost,intport)创建基于Socket的连接服务器端的流套接字创建时的异常创建Socket如果发生错误产生异常IOException程序中必须进行处理创建时必须捕获或抛出异常创建Socket和ServerSocket都需要65Socket(7)创建客户端Socket在客户端创建Socket注意异常的捕获或抛出66try{//指明的IP地址:是IP地址//指明的端口:12110Socketsocket=newSocket("10",12110);}catch(IOExceptione){}Socket(8)创建服务器端Socket在服务器端创建Socket67try{//其端口号要与跟它通信的客户端端口一致ServerSocketserver=ServerSocket(12110);}catch(IOExceptione){}try{//等待来自客户端的请求,直到有客户端以相同端口Socketsocket=server.accept();}catch(IOExceptione){}Socket(9)ServerSocket创建后不定位具体的客户端套接字处于等待连接的状态实时监控网络状态,等待客户端的连接请求ServerSocket在指定端口监听来自客户端的请求在应用程序中是循环接收通过创建服务线程来服务新的客户请求accept()阻塞函数调用后等待客户请求,直到有对应的正确请求到达再返回对应的Socekt,建立Socket连接68Socket(10)Socket输入(出)流使用getInputStream()和getOutputStream()进行分别返回InputStream和OutputStream类对象DataInputStream、DataOutputStream或PrintStream类对象在返回的输入/输出流对象中所建立的过滤流便于读写数据。文本方式流对象采用InputStreamReader、OuputStreamWriter、PrintWirter等处理69PrintStreamos=newPrintStream(newBufferedOutputStream(socket.getOutputStream()));DataInputStreamdis=newDataInputStream(socket.getInputStream());PrintWirterpw=newPrintWirter(socket.getOutputStream(),true);BufferedReaderbr=newBufferedReader(newInputStreamReader(socket.getInputStream()));Socket(11)关闭Socket和流任何Socket对象的存在都会占用一定的资源在Socket对象使用完毕需要关闭操作关闭Socket可以调用Socket的close()方法在关闭Socket之前,先关闭与Socket相关的所有输入(出)流以释放所有资源关闭顺序为首先关闭与Socket相关的所有输入/输出流然后关闭Socket70os.close();is.close();Socket.close();Socket(12)创建Socket服务器指定端口实例化一个ServerSocket调用ServerSocket的accept()以在等待连接期间造成阻塞获取位于该底层Socket的流以进行读写操作将数据封装成流对Scoket进行读写关闭打开流Socket客户端实现通过IP地址和端口实例化Socket,请求连接服务器获取Socket上的流以进行读写把流包装进BufferedReader/PrintWriter的实例对Socket进行读写关闭打开的流71WebViewAndroid内置webkit内核浏览器Webkit是开源浏览器网页排版引擎支持触摸屏、高级图形显示、上网WebKit由3个模块组成JavaScriptCore:JavaScript解释器WebCore:核心,用来实现Render引擎、Web页面解析等WebKit:项目名称,APIAndroidSDK中封装为WebView组件开发具有浏览器功能的程序72WebView(2)WebView的使用webview的XML定义Manifest文件中权限的设定73<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/><uses-permissionandroid:name="android.permission.INTERNET"/>WebView(3)通过We
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年临时工派遣合同样本
- 信托公司委托贷款合同
- 缆索吊机租赁合同样本
- 标准家教服务合同范本
- 2024标准附期限借款合同样本
- 2024模板采购合同范本
- 2024工程装修简易合同样本
- 物业租赁合同模板
- 技术服务合同中的保密义务与条款
- 建材产品购销协议样本
- 甲苯磺酸瑞马唑仑临床应用
- 民法典讲座-继承篇
- 外包施工单位入厂安全培训(通用)
- 糖尿病健康知识宣教课件
- 客户接触点管理课件
- Python语言学习通超星课后章节答案期末考试题库2023年
- 医学-心脏骤停急救培训-心脏骤停急救教学课件
- 高中英语-Book 1 Unit 4 Click for a friend教学课件设计
- 年产30万吨碳酸钙粉建设项目可行性研究报告
- 主题班会如何对待厌学情绪(初二) 省赛获奖 省赛获奖
- 初中数学北师大版七年级上册课件5-4 应用一元一次方程-打折销售
评论
0/150
提交评论