Copyright©2011©2011协议的网络通信•TCP/IP协议是一种可靠的网络通信协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。•IP协议的的全称是InternetProtocol,IP协议负责将消息从一个主机传送到另一个主机,数据在传输过程中被分割成一个个数据包。•TCP层是位于IP层之上,负责将数据包按次序的放好并发送,在接收端收到后再将其正确的还原。Copyright©2011协议的网络通信•TCP协议的重发机制:–当通信一端给另一端发送一个消息,需要收到另一端的确认信息,如果没有收到另一端的确认信息,则会重发刚才发送的信息。•通过重发机制,TCP协议向应用程序提供可靠的通信连接。•TCP/IP协议在功能上互补,通常放在一起使用,在实际使用中把这两个协议统称TCP/IP协议。Copyright©2011服务器端•Java中通过ServerSocket类来接受其他通信端发送的连接请求。•ServerSocket包含一个监听来自客户端请求的方法:–Socketaccept():如果收到一个客户端的Socket请求,该方法将返回一个与客户端Socket对应的Socket;如果没有接收到请求,该方法将一直处于等待状态,线程也会被阻塞。Copyright©2011服务器端•ServerSocket类提供了如下几个构造器创建ServerSocket对象:–ServerSocket(intport):用指定的端口port来创建一个ServerSocket。–ServerSocket(intport,intbacklog):增加改变连接队列长度的参数backlog。–ServerSocket(intport,intbacklog,InetAddresslocalAddr):当机器存在多个IP地址时,可以通过localAddr将ServerSocket绑定到指定的IP。Copyright©2011©2011服务器端//创建一个ServerSocket,用于监听客户端Socket的连接请求ServerSocketserverSocket=newServerSocket(30000);//采用循环不断接受来自客户端的请求while(true){//每当接受到客户端Socket的请求,服务器端也对应产生一个SocketSocketsocket=serverSocket.accept();OutputStreamoutputStream=socket.getOutputStream();outputStream.write(“ConnetedtoServerSocket!\n.getBytes(utf-8));//关闭输出流,关闭SocketoutputStream.close();socket.close();}Copyright©2011进行通信•客户端可以使用Socket的构造器创建Socket对象,连接到指定的服务器:–Socket(StringremoteAddress,intport):创建连接到指定远程主机、远程端口的Socket。–Socket(StringremoteAddress,intport,InetAddresslocalAddr,intlocalPort):创建连接到指定远程主机、远程端口的Socket,并指定本地IP地址和本地端口号。Copyright©2011进行通信•当客户端、服务器端产生了对应的Socket后,就无需再区分服务器、客户端,而是通过各自的Socket进行通信。•Socket提供如下两个方法来获取输入流和输出流:–InputStreamgetInputStream():返回Socket对象的输入流,从输入流中取出数据。–OutputStreamgetOutputStream():返回Socket对象的输出流,通过输出流发送数据。Copyright©2011=newSocket(120.195.216.86,30000);//将Socket对应的输入流包装成BufferedReaderBufferedReaderbr=newBufferedReader(newInputStreamReader(socket.getInputStream()));//进行普通IO操作Stringline=br.readLine();show.setText(line);br.close();socket.close();Copyright©2011进行通信•通常情况下,服务器不止接收一个客户端的请求,所以需要在Java程序中通过循环不断地调用ServerSocket的accept()方法。•在使用BufferedReader的readLine()方法读取数据时,线程处于阻塞状态。因此,服务器应该为每个Socket单独启动一条线程,每个线程负责与一个客户端进行通信。•客户端在读取服务器数据时线程同样会被阻塞,因此也应该启动线程与服务端通信。Copyright©2011访问网络资源•URL(UniformResourceLocator)代表统一资源定位器,它是指向互联网资源的指针。•URL类提供了多个构造器用于创建URL对象,URL对象可调用如下方法访问URL对应的资源:–StringgetFile():获取此URL的资源名。–StringgetHost():获取此URL的主机名。–StringgetPath():获取此URL的路径部分。–intgetPort():获取此URL的端口号。Copyright©2011访问网络资源–StringgetProtocol():获取此URL协议的名称。–StringgetQuery():获取此URL的查询字符串部分。–URLConnectionopenConnection():返回一个URLConnection对象,它表示到URL所引用的远程对象的连接。–InputStreamopenStream():打开与此URL的连接,并返回一个用于读取该URL资源的InputStream。Copyright©2011提交请求•创建一个和URL的连接,并发送请求,读取URL引用的资源需要如下几步:–通过调用URL对象的openConnection()方法来创建URLConnection对象。–设置URLConnection的参数和普通请求属性。–如果发送GET方式请求,使用connect方法建立和远程资源直接的连接即可。–如果发送POST方式的请求,需要获取URLConnection实例对应的输出流来发送请求参数。Copyright©2011访问网络•HttpURLConnection继承自URLConnection,它在URLConnection的基础上提供了如下便捷的方法:–intgetResponseCode():获取服务器的响应代码。–StringgetResponseMessage():获取服务器的响应消息。–StringgetRequestMethod():获取发生请求的方法。–voidsetRequestMethod():设置发送请求的方法。Copyright©2011访问网络•在大部分情况下,访问Web网站不仅仅需要一个URL,还需要用户登录并且具有相应的权限才能访问。这就需要涉及Session、Cookie的处理。•为了更好地处理Web站点请求,包括处理Session、Cookie等问题,Apache开源组织提供了一个HttpClient项目,它是一个简单的HTTP客户端,用于发送HTTP请求,接受HTTP响应。Copyright©2011访问网络•Android系统已经集成了HttpClient,开发人员可以直接在Android应用中使用HttpClient来提交请求、接受响应。•使用HttpClient的步骤:–创建HttpClient对象。–如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。–通过HttpGet或HttpPost的setParams(HttpParamsparams)方法来添加请求参数。Copyright©2011访问网络–调用HttpClient对象的execute(HttpUriRequestrequest)方法发送请求。该方法返回一个HttpResponse对象。–调用HttpResponse的getEntity()方法获取HttpEntity对象,该对象包含了服务器的响应内容。调用HttpResponse的getAllHeaders()、getHeaders(Stringname)等方法获取服务器的响应头。Copyright©2011视图显示网页•WebView组件主要用来显示网页,它提供了大量方法来执行浏览器操作:–voidgoForward():前进。–voidgoBack():后退。–voidloadUrl(Stringurl):加载指定URL对应的网页。–booleanzoomIn():放大网页。–booleanzoomOut():缩小网页。Copyright©2011代码•WebView提供了一个loadData(Stringdata,StringmimeType,Stringencoding)方法用来加载并显示HTML代码。当HTML中包含中文时会出现乱码。•WebView还提供了一个loadData(StringbaseUrl,Stringdata,StringmimeType,Stringencoding,StringhistoryUrl)方法,该方法显示中文不会产生乱码。Copyright©2011进行网络编程•在Android平台上开发客户端程序时,后台的服务一般是使用WebService。•WebService消除了不同平台、不同语言的差异,将现有的应用发布成开放式的服务,从而允许互联网上的任何设备、任何平台进行访问。Copyright©2011进行网络编程•WebService中使用的主要技术:–SOAP(SimpleObjectAccessProtocol):简单对象访