第12章 Java网络技术(二).ppt

  1. 1、本文档共92页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章 Java网络技术(二)

具体的处理可以根据键值的状态进行,上面的“接收连接处理请求”就可以为: i.remove(); if ( key.isAcceptable() ) { ... } else if ( key.isWritable() ) { ... } 12.6.5 阻塞模式 在阻塞模式下,服务器端和客户端的程序基本相同,惟一不同的是客户端为Connect方法,服务器端为Accept方法。 新I/O包处理Socket的读写操作时使用包中的InetSocketAddress类指定链接地址,并用前面介绍的SocketChannel类来完成实际的读写操作。InetSocketAddress类提供一个用来绑定、连接或者返回数值的远程对象。它常用的构造函数为: InetSocketAddress(String hostname, int port) 以名字hostname和端口号port创建socket地址。 客户端使用SocketChannel建立连接的步骤如下: (1) 首先获得InetSocketAddress的对象。 String host = ; InetSocketAddress socketAddress = new InetSocketAddress(host, 80); (2) 打开一个到InetSocketAddress代表的主机的连接。 使用SocketChannel取代以前从Socket对象的输入流来读取、向Socket的输出流写入的所有操作: SocketChannel channel = SocketChannel.open(); channel.connect(socketAddress); (3) 发送一个HTTP请求,发送请求之前进行编码。 Charset charset = Charset.forName(ISO-8859-1); CharsetEncoder encoder = charset.newEncoder(); String request = GET / HTTP/1.0\r\n\r\n ; channel.write(encoder.encode(CharBuffer.wrap(request))); (4) 从通道中读取服务器的响应。 ByteBuffer buffer = ByteBuffer.allocateDirect(1024); CharBuffer charBuffer = CharBuffer.allocate(1024); while ((channel.read(buffer)) != -1) { buffer.flip(); decoder.decode(buffer, charBuffer, false); charBuffer.flip(); System.out.println(charBuffer); buffer.clear(); charBuffer.clear(); } 【例12.6】下面这个程序通过一个HTTP请求来读取站点的首页,直接输出到屏幕上,可以看见是网页的文本文件。源程序代码如下: //程序文件名为ReadURL.java import java.io.*; import .*; import java.nio.*; import java.nio.channels.*; import java.nio.charset.*; public class ReadURL { public static void main(String args[]) { SocketChannel channel = null; String host = ; try { //建立连接 InetSocketAddress socketAddress = new InetSocketAddress(host, 80); Charset charset = Charset.forName(ISO-8859-1); CharsetDecoder decoder = charset.newDecoder(); CharsetEncoder encoder = charset.newEncoder(); //分配缓冲 ByteBuffer buffer = ByteBuffer.allocateDirect(1024); CharBuffer charBuffer = CharBu

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档