WEB开发网
开发学院WEB开发Jsp 使用Socket通道读取web页面 阅读

使用Socket通道读取web页面

 2008-01-05 08:58:20 来源:WEB开发网   
核心提示:import java.io.IOException;import java.net.InetSocketAddress;import java.net.UnknownHostException;import java.nio.ByteBuffer;import java.nio.CharBuffer;import j
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;

public class GetWebPageDemo {
 public static void main(String args[]) throws Exception {
  String resource, host, file;
  int slashPos;

  resource = "www.java2s.com/index.htm"; 
  slashPos = resource.indexOf('/'); // find host/file separator
  if (slashPos < 0) {
   resource = resource + "/";
   slashPos = resource.indexOf('/');
  }
  file = resource.substring(slashPos); // isolate host and file parts
  host = resource.substring(0, slashPos);
  System.out.PRintln("Host to contact: '" + host + "'");
  System.out.println("File to fetch : '" + file + "'");

  SocketChannel channel = null;

  try {
   Charset charset = Charset.forName("ISO-8859-1");
   CharsetDecoder decoder = charset.newDecoder();
   CharsetEncoder encoder = charset.newEncoder();

   ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
   CharBuffer charBuffer = CharBuffer.allocate(1024);

   InetSocketAddress socketAddress = new InetSocketAddress(host, 80);
   channel = SocketChannel.open();
   channel.connect(socketAddress);

   String request = "GET " + file + " \r\n\r\n";
   channel.write(encoder.encode(CharBuffer.wrap(request)));

   while ((channel.read(buffer)) != -1) {
    buffer.flip();
    decoder.decode(buffer, charBuffer, false);
    charBuffer.flip();
    System.out.println(charBuffer);
    buffer.clear();
    charBuffer.clear();
   }
  } catch (UnknownHostException e) {
   System.err.println(e);
  } catch (IOException e) {
   System.err.println(e);
  } finally {
   if (channel != null) {
    try {
     channel.close();
    } catch (IOException ignored) {
    }
   }
  }

  System.out.println("\nDone.");
 }
}

Tags:使用 Socket 通道

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接