Mega Code Archive

 
Categories / Java / Network Protocol
 

Reading Web Pages, with Socket Channels

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.rntsoft.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.");   } }