![第八章 网络与数据通信技术_第1页](http://file4.renrendoc.com/view/2b73aac84d4a8f077fd7eba8caaeeea3/2b73aac84d4a8f077fd7eba8caaeeea31.gif)
![第八章 网络与数据通信技术_第2页](http://file4.renrendoc.com/view/2b73aac84d4a8f077fd7eba8caaeeea3/2b73aac84d4a8f077fd7eba8caaeeea32.gif)
![第八章 网络与数据通信技术_第3页](http://file4.renrendoc.com/view/2b73aac84d4a8f077fd7eba8caaeeea3/2b73aac84d4a8f077fd7eba8caaeeea33.gif)
![第八章 网络与数据通信技术_第4页](http://file4.renrendoc.com/view/2b73aac84d4a8f077fd7eba8caaeeea3/2b73aac84d4a8f077fd7eba8caaeeea34.gif)
![第八章 网络与数据通信技术_第5页](http://file4.renrendoc.com/view/2b73aac84d4a8f077fd7eba8caaeeea3/2b73aac84d4a8f077fd7eba8caaeeea35.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章网络与数据通信技术俞成海教学任务与目标教学任务USB编程Wi-Fi编程蓝牙编程Socket实现技术HTTP协议通信实现技术教学重点蓝牙编程Socket实现技术USB编程两种模式来支持AndroidUSB外设:USB
外设模式和USB主机模式在
USB
外设模式下,外部
USB
硬件(装有Android的设备要连接的外部设备)充当
USB
主机。外设的例子包括机器人、扩展插座、诊断和音乐设备、电子报亭、读卡器等其他设备,这种模式给予不具备主机功能的
Android
设备以与USB硬件交互的能力。在USB主机模式下,装有
Android
的设备扮演着主机的角色。这种设备的例子包括数码像机,键盘,鼠标和游戏手柄。那些适应面很广的USB设备仍可以与Android应用交互,前提是这些Android应用可以正确的与这些设备通讯。/guide/topics/usb/index.html
USB主机模式常用的类:UsbManager:允许您枚举已连接的USB设备并且与其进行“交流”。UsbDevice:代表了一个已连接的USB的设备并且包含具有该设备验证信息,接口和接口点的方法。UsbInterface:代表了一个USB设备的一个接口,该接口定义了一系列关于设备的函数。一个设备在进行“交流”的时候可以有一个或者多个接口UsbEndpoint:代表一个接口的接口点,该接口点就是这个接口的通信信道。一个接口可以有一个或者多个这样的接口点,而且一般都是有输入和输出双向通信的接口点。UsbDeviceConnection:代表该设备的一个连接,用来在接⼊点上传输数据。这个类允许您能用同步或者异步的方式发送和返回数据。UsbRequest:在通过UsbDeviceConnection和设备进行“交流”的一个异步请求。UsbConstants:关于在linux内核中linux/usb/ch9.h的相关定义的USB常量使用步骤(见附件)为了让应用可以发现一个USB设备,需要android.hardware.usb.action.USB_DEVICE_ATTACHED这个意图指定一个意图来进行过滤获取USB信息UsbManagermanager=(UsbManager)getSystemService(Context.USB_SERVICE);HashMap<String,UsbDevice>deviceList=manager.getDeviceList();UsbDevicedevice=deviceList.get("deviceName");
和设备通信
UsbInterface
intf=
device.getInterface(0);
UsbEndpoint
endpoint=
intf.getEndpoint(0);
UsbDeviceConnection
connection=
manager.openDevice(device);
connection.claimInterface(intf,
true);
connection.bulkTransfer(endpoint,
bytes,
bytes.length,
0);
终止通信
当你完成数据的传输或者你的设备已拔出时,通过调用releaseInterface()和close()来关闭接口和连接。Wi-Fi编程
ConnectivityManagerNetworkInfomWiFiNetworkInfo=mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)所需要用到的wifi相关Android包:.wifi常见操作主要包括以下及各类和接口:1、WifiManager提供了管理WiFi连接的大部分API,主要包括如下内容: 查看已经配置好的网络清单,而且可以修改个别记录的属性。 可以建立或是关闭WiFi网络连接,并且可以查询有关网络状态的动态信息。 对接入点的扫描结果包含足够的信息来决定需要与什么接入点建立连接。 同时还定义了许多常量来表示WiFi状态的改变。常用的方法:getWiFiState,isWifiEnabled,setWifiEnabled,startScan,getScanResults等等基于Android的WiFi相关库函数WiFi相关库函数所需要用到的wifi相关Android包:.wifi常见操作主要包括以下及各类和接口:2、WifiConfigurationWiFi网络的配置,包括安全配置等。3.WifiInfoWiFi无线连接的描述,包括接入点、网络连接状态、隐藏的接入点,ip地址、连接速度、mac地址、网络id,信号强度等信息。4.ScanResult主要用来描述已经检测出的接入点,包括接入点的地址、接入点的名称、身份认证、频率、信号强度等信息。找到周围AP的关键步骤检测网卡状态,修改网卡状态——开启,进行扫描周围ap,打印结果classListWifiListernerimplementsOnClickListener{@OverridepublicvoidonClick(Viewv){wifiManager=(WifiManager)WifiActivity.this.getSystemService(Context.WIFI_SERVICE);wifiManager.startScan();mWifiList=wifiManager.getScanResults();for(inti=0;i<mWifiList.size();i++){sb.append(newInteger(i).toString()+".");sb.append(mWifiList.get(i).toString());sb.append("\n");}mainText.setText(sb);sb.delete(0,sb.capacity());}}蓝牙编程,使用蓝牙进行设备通信,主要包含四个部分:蓝牙设置、搜索设备、连接、传输数据BluetoothAdapter代表本地蓝牙适配器(蓝牙发射器),是所有蓝牙交互的入⼝。通过它可以搜索其它蓝牙设备,查询已经配对的设备列表,通过已知的MAC地址创建BluetoothDevice,创建BluetoothServerSocket监听来自其它设备的通信。BluetoothDevice代表了一个远端的蓝牙设备,使用它请求远端蓝牙设备连接或者获取远端蓝牙设备的名称、地址、种类和绑定状态。BluetoothSocket代表了一个蓝牙套接字的接⼝,是应用程序通过输⼊、输出流与其他蓝牙设备通信的连接点。BluetoothServerSocket代表打开服务连接来监听可能到来的连接请求(属于server端),为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。BluetoothClass描述了一个设备的特性(profile)或该设备上的蓝牙一致可以提供哪些服务(service),但不可信。比如,设备是一个电话、计算机或手持设备;设备可以提供audio/telephony服务等。可以用它来进行一些UI上的提示。BluetoothHeadset提供手机使用蓝牙耳机的支持。这既包括蓝牙耳机和免提(V1.5)模式。BluetoothA2dp定义高品质的音频,可以从一个设备传输到另一个蓝牙连接。“A2DP的”代表高级音频分配模式。BluetoothHealth代表了医疗设备配置代理控制的蓝牙服务BluetoothHealthCallback一个抽象类,使用实现BluetoothHealth回调。你必须扩展这个类并实现回调方法接收更新应用程序的注册状态和蓝牙通道状态的变化。BluetoothHealthAppConfiguration代表一个应用程序的配置,蓝牙医疗第三方应用注册与远程蓝牙医疗设备交流。BluetoothProfile.ServiceListener当他们已经连接到或从服务断开时通知BluetoothProfileIPX的客户时一个接⼝(即运行一个特定的配置文件,内部服务)。BlueTooth使用至少要在AndroidManifest.xml中声明两个权限:BLUETOOTH和BLUETOOTH_ADMIN获取BluetoothAdapter打开蓝牙:通过isEnabled()来检查蓝牙当前是否可用。如果这个方法返回false,则蓝牙不能够使用。为了请求蓝牙使用,呼叫startActivityForResult()与的ACTION_REQUEST_ENABLE动作意图获取BluetoothAdapter查找匹配设备扫描设备开始搜索设备,调用startDiscovery()。该函数是异步的,调用后立即返回,返回值表示搜索是否成功开始。应用中可以注册一个带ACTION_FOUNDIntent的BroadcastReceiver,搜索到每一个设备时都接收到消息。Intent携带着而外的字段信息EXTRA_DEVICE和EXTRA_CLASS,分别包含一个BluetoothDevice和一个BluetoothClass。使用cancelDiscovery()来停止搜索使能被发现如果想让本地设备被其他设备发现,可以带ACTION_REQUEST_DISCOVERABLEactionIntent调用startActivityForResult(Intent,int)方法作为服务器连接通过持有⼀个打开的BluetoothServerSocket对象。服务器socket的作用是侦听进来的连接,如果一个连接被接受,提供一个连接好的BluetoothSocket对象。建立服务器socket和接收一个连接的基本步骤1.通过调用listenUsingRfcommWithServiceRecord(String,UUID)得到一个BluetoothServerSocket对象,当客户端试图连接本设备,它将携带一个UUID用来唯一标识它要连接的服务,UUID必须匹配,连接才会被接受。2.通过调用accept()来侦听连接请求。这是一个阻塞的调用,直到有连接进来或者产生异常才会返回。只有远程设备发送一个连接请求,并且携带的UUID与侦听它socket注册的UUID匹配,连接请求才会被接受。如果成功,accept()将返回一个连接好的BluetoothSocket对象。3.除非需要再接收另外的连接,否则的话调用close()。close()释放serversocket和它的资源,但不会关闭连接accept()返回的连接好的BluetoothSocket对象。作为客户端连接1.用BluetoothDevice调用createRfcommSocketToServiceRecord(UUID)获取一个BluetoothSocket对象。这个初始化的BluetoothSocket会连接到BluetoothDevice。2.调用connect()完成连接当调用这个方法的时候,系统会在远程设备上完成一个SDP查找来匹配UUID。如果查找成功并且远程设备接受连接,就共享RFCOMM信道,connect()会返回。这也是一个阻塞的调用,不管连接失败还是超时(12秒)都会抛出异常。管理连接如果已经连接了两个设备,他们都已经拥有各自的连接好的BluetoothSocket对象。可以在设备间共享数据了。使用BluetoothSocket,传输任何数据通常来说都很容易了:1.通过socket获取输入输出流来处理传输(分别使用getInputStream()和getOutputStream())。2.用read(byte[])和write(byte[])来实现读写。基于Socket网络编程Socket网络通信的组成元素服务器,主要功能:侦听连接、接收连接、接收数据和向客户端发送数据。客户端,主要功能:发起连接、接收数据和向服务器发送数据Socket网络通信的基本原理IP地址:主机标识端口:服务类型Socket=IP(address)
+Port(server)Java--Internet语言具备强大网络通信功能基于套接字(Socket)通信方式流套接字TCP协议(TransmissionControlProtocol)UDP协议(UserDatagramProtocol)数据报套接字基于Socket网络通信方式主要使用类
Java的Socket属于流式套接字通信,采用TCP协议,提供面向连接的服务,实现可靠的通信。
J提供两个类,实现Socke通信:ServerSocket--服务器端
Socket--客户端通
操作TCP套接字的发送和接收需要借助java.io包的
InputStream/OutputStream
完成,分别通过方法实现:Socket.getInputStream()/Socket.getOutputStream()Socket/ServerSocket构造函数Socket()
通过系统默认类型的SocketImpl创建未连接套接字
Socket(InetAddressaddress,intport)
创建一个流套接字并将其连接到指定IP地址的指定端口号
Socket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalPort)
创建一个套接字并将其连接到指定远程端口上的指定远程地址
Socket(Stringhost,intport)
创建一个流套接字并将其连接到指定主机上的指定端口号
Socket(Stringhost,intport,InetAddresslocalAddr,intlocalPort)
创建一个套接字并将其连接到指定远程主机上的指定远程端口ServerSocket()
创建非绑定服务器套接字
ServerSocket(intport)
创建绑定到特定端口的服务器套接字
ServerSocket(intport,intbacklog)
利用指定的backlog创建服务器套接字并将其绑定到指定的本地端口号
ServerSocket(intport,intbacklog,InetAddressbindAddr)
使用指定的端口、侦听backlog和要绑定到的本地IP地址创建服务器
Socket/ServerSocket主要方法Socke通信机制OutputStream获得Socket对象输出流建立Socket连接通过流传输数据服务端联结成功获得已连接的Socket对象Socket(host,port)
创建Socket对象向指定主机端口发出连接请求客户端Socket对象ServerSocket对象InputStream获得Socket对象输入流申请连接ServiceSocket.close()停止提供TCP连接服务一个ServerSocket对象和一个Socket对象一个Socket对象Socket.close()关闭TCP连接ServerSocket(port)创建ServiceSocke对象,提供TCP连接服务accept()在指定的端口监听客户端请求联结创建InputStream获得Socket对象输入流Socket.close()关闭TCP连接OutputStream获得Socket对象输出流ServerSocket对象访问监听Socke通信机制Server端Client端service=ServerSocket(port_number)创建service对象,以TCP服务实现端口监听socket=ServerSocket.accept()创建socke对象,接收用户访问请求Socket=Socket(port_number)创建socke对象,建立连接,发送访问请求InputStreamSocket对象输入流OutputStreamSocket对象输出流通过socke对象实现与Client端数据传输OutputStreamSocket对象输出流InputStreamSocket对象输入流通过socke对象,实现与Servert端数据传输socket.close()关闭Socke关闭结束与Client端的连接service.close()关闭监听程序socket.close()关闭Socke结束与Server端的连接(1)建立连接(2)数据通讯(3)拆除连接客户端开启INTERNET布局界面(Main.xml)获取资源(EditText,Button,TextView)Socket通信数据读写(DataInputStream/DataOutputStream)客户端主要代码:publicvoidonClick(Viewv){Sockets=null; DataOutputStreamdout=null; DataInputStreamdin=null;if(v==button1){//点击的是按钮 try{ s=newSocket("02",8888);//连接服务器
dout=newDataOutputStream(s.getOutputStream());//得到输出流
din=newDataInputStream(s.getInputStream());//得到输入流dout.writeUTF(editText.getText().toString());//向服务器发送消息textView.setText("服务器发来的消息:"+din.readUTF());//接收服务器发来的消息
}catch(Exceptione){ e.printStackTrace();//打印异常信息 }finally try{ if(dout!=null){ dout.close();//关闭输入流 } if(din!=null){ din.close();//关闭输入流 } if(s!=null) s.close();//关闭Socket连接 } } catch(Exceptione){ e.printStackTrace();//打印异常信息 }}}}服务器(例子)ServerSocketAcceptDataInputStream/DataOutputStreamRead/Write服务器端主要代码:ServerSocketss=null;//ServerSocket的引用Sockets=null;//Socket的引用DataInputStreamdin=null;DataOutputStreamdout=null;try{ ss=newServerSocket(8888);//监听到8888端口
System.out.println("已监听到8888端口!");}catch(Exceptione){ e.printStackTrace();//打印异常信息}while(true){ try{ s=ss.accept();//等待客户端连接
din=newDataInputStream(s.getInputStream()); dout=newDataOutputStream(s.getOutputStream());//得到输入输出流
Stringmsg=din.readUTF();//读一个字符串
System.out.println("ip:"+s.getInetAddress());//打印客户端IP System.out.println("msg:"+msg);//打印客户端发来的消息
System.out.println("===================="); dout.writeUTF("HelloClient!");//向客户端发送消息
} catch(Exceptione){ e.printStackTrace();//打印异常信息
}
基于HTTP协议的网络编程统一资源定位器URL:URL(UniformResourceLocator)是一致资源定位器的简称,它表示Internet上某一资源的地址。通过URL我们可以访问Internet上的各种网络资源,比如最常见的WWW,FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源。URL的组成protocol://resourceName协议名(protocol)指明获取资源所使用的传输协议,如http、ftp、gropher、file等,资源名(resourceName)则应该是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。例如:/协议名://主机名/home/welcome.html协议名://机器名+文件名:80/Gamelan/network.html#BOTTOM协议名://机器名+端口号+文件名+内部引用.创建一个URL为了表示URL,中实现了类URL。我们可以通过下面的构造方法来初始化一个URL对象:(1)publicURL(Stringspec);(2)publicURL(URLcontext,Stringspec);(3)publicURL(Stringprotocol,Stringhost,Stringfile);(4)publicURL(Stringprotocol,Stringhost,intport,Stringfile);解析一个URL一个URL对象生成后,其属性是不能被改变的,但是我们可以通过类URL所提供的方法来获取这些属性从URL读取WWW网络资源当我们得到一个URL对象后,就可以通过它读取指定的WWW资源。通过HttpURLConnetction连接WWW通过URL的方法openStream(),我们只能从网络上读取数据,如果我们同时还想输出数据,例如向服务器端的CGI程序发送一些数据,我们必须先与URL建立连接,然后才能对其进行读写,这时就要用到类URLConnection了。CGI是公共网关接口(CommonGatewayInterface)的简称,它是用户浏览器和服务器端的应用程序进行连接的接口,有关CGI程序设计,请读者参考有关书籍。类HttpURLConnetction也在包中定义,它表示Java程序和URL在网络上的通信连接。当与一个URL建立连接时,首先要在一个URL对象上通过方法openConnection()生成对应的HttpURLConnetction对象。如果连接过程失败,将产生IOException.HttpURLConnectionucon=null;BufferedReaderreader=null;StringBuilderbab=null;try{URLmyURL=newURL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家庭厨余垃圾简易生物降解系统
- 民房建筑施工合同
- 环保行业废弃物处理风险免责协议
- 智慧社区建设投资合作合同
- 2025年液压破碎锤项目发展计划
- Glycycoumarin-Standard-生命科学试剂-MCE
- 2025年纺织片梭织机项目建议书
- 网络安全技术培训服务合同书
- 1S-2S-2-PCCA-hydrochloride-生命科学试剂-MCE
- 2025年医用超声诊断设备合作协议书
- LY/T 3400-2024荒漠与荒漠化防治术语
- 2025年往年教师职称考试试题
- 幼儿园开学前的厨房人员培训
- 《幼儿教育政策与法规》教案-单元6 幼儿园的工作人员
- 油漆工培训试题
- 2025年阀门和龙头项目发展计划
- 快手信息流广告优化师(初级)认证考试题库(附答案)
- 园林景观绿化工程施工组织设计方案
- 校园安全教育高中生
- 2024至2030年中国数字压力表行业投资前景及策略咨询研究报告
- 《SPIN顾问式销售》课件
评论
0/150
提交评论