/* PANW PANW STIN KLASI EXOUME GRAPSEI AFTES TIS ARXIKOPOIISEIS - EXEI KAI EPIPLEON POU DEN XREIAZETAI GI AFTO POU SAS DEIXNW*/ private Socket clientConnection; /* client's connection */ private Socket serverConnection; /* server's connection */ private StringBuffer clientRequest; /* client's received request */ private StringBuffer remoteServerReplyHeaders; /* server's reply headers */ private Vector remoteServerReplyData; /* server's reply data */ private String remoteHost; /* remote web server hostname */ private String requestedPage; /* use this for replication purposes */ private byte [] outBytes; /* follow the streams which are used for communication purposes */ private BufferedInputStream clientIn; private BufferedOutputStream clientOut; private BufferedInputStream serverIn; private BufferedOutputStream serverOut; /* cache these header lines for a more efficient parsing */ private String firstLine; private String secondLine; /* ME TIN PARAKATW SINARTISI SINDEOMASTE STON SERVER KAI TRAVAME TI SELIDA */ /* connects with the remoted web server and gets the requested web page */ private void getRequestedURL() throws IOException { /* do the appropriate initializations */ serverConnection = new Socket(InetAddress.getByName(remoteHost), 80); getServerStreams(); /* send the request to the remote web server */ serverOut.write(clientRequest.toString().getBytes(), 0, clientRequest.toString().getBytes().length); serverOut.flush(); /* get the headers */ int c; int cnt = 0; while ((c = serverIn.read()) != -1) { remoteServerReplyHeaders.append((char)c); ++cnt; if (cnt > 4) { if (remoteServerReplyHeaders.toString().endsWith("\r\n\r\n")) { break; } } } /* find Content-Length field and extract the following integer */ int pos = remoteServerReplyHeaders.toString().lastIndexOf(CONTENT_LENGTH) + CONTENT_LENGTH.length() + 1; String subStr = remoteServerReplyHeaders.toString().substring(pos); StringTokenizer token = new StringTokenizer(subStr); int contentLength = Integer.parseInt(token.nextToken()); /* print remote server reply - for program verification purposes */ System.out.println("\n------ HEADERS RECEIVED FROM REMOTED WEB-SERVER ------"); System.out.println(remoteServerReplyHeaders.toString()); System.out.println("------------------ END OF HEADERS --------------------\n"); /* now get the data itself */ int bytesRead = 0; int byteCount = 0; byte [] buf = new byte[READ_UNIT]; /* read little chunck of bytes each time */ while (byteCount < contentLength && (bytesRead = serverIn.read(buf, 0, READ_UNIT)) > 0 ) { byte [] myBuf = new byte[bytesRead]; for ( int i = 0; i < bytesRead; i++ ) myBuf[i] = buf[i]; remoteServerReplyData.add(myBuf); byteCount += bytesRead; } /* store all of them in outBytes buffer */ outBytes = new byte[byteCount]; byte [] tempByte = null; int size = remoteServerReplyData.size(); int myCounter = 0; for ( int i = 0; i < size; i++ ) { Object obj = null; if ( (obj = remoteServerReplyData.elementAt(i)) instanceof byte[] ) { tempByte = (byte[]) obj; for ( int j = 0; j < tempByte.length; j++ ) outBytes[myCounter + j] = tempByte[j]; myCounter += tempByte.length; } } }