From ad903e0124e25540891726ebba8bfa67c6f0406b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20S=C3=A1nchez?= Date: Sun, 24 Apr 2011 20:50:42 +0200 Subject: [PATCH] Java version with simple thread management added --- ServidorConcurrente/HebraServ.java | 55 +++++++++++++++++++++ ServidorConcurrente/ServWebPatternConc.java | 33 +++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 ServidorConcurrente/HebraServ.java create mode 100644 ServidorConcurrente/ServWebPatternConc.java diff --git a/ServidorConcurrente/HebraServ.java b/ServidorConcurrente/HebraServ.java new file mode 100644 index 0000000..edc3a65 --- /dev/null +++ b/ServidorConcurrente/HebraServ.java @@ -0,0 +1,55 @@ +package ServidorConcurrente; + +import java.util.*; +import java.io.*; +import java.net.*; + +class HebraServ extends Thread { + + private Socket c; + + public HebraServ (Socket conn) { + c = conn; + } + + public void run () { + try { + byte[] body, header, lc = {13,10}; + String l, code, x, path="", CR_LF = new String(lc,"US-ASCII"); + int j, n = 0; + + LineNumberReader netIn = new LineNumberReader(new InputStreamReader(c.getInputStream(), "UTF-8")); + OutputStream netOut = c.getOutputStream(); + + System.out.println(l = URLDecoder.decode(netIn.readLine(), "UTF-16")); + if (l.matches("GET .*")) { + path=l.replaceFirst("GET[ ]+/([^ \\&#]*)[ \\&#].*", "$1" ); + if ((path.matches(""))||(path.matches(".*/"))) { path += "index.html" ; } + + while (!(x = netIn.readLine()).equals("")) { System.out.println(x); } + + try { + RandomAccessFile i = new RandomAccessFile(path, "r"); + i.read(body = new byte[(int)i.length()]); + code = "200 OK"; + + } catch (FileNotFoundException f) { + body = ("

Recurso no encontrado

" + path + "").getBytes("US-ASCII"); + code ="404 Not Found"; + } + + } else { + body = ("

Comando desconocido

").getBytes("US-ASCII"); + code = "400 Bad Request"; + } + + header = ("HTTP/1.0 " + code.toString() + CR_LF + "Content-type: text/html" + CR_LF + "Content-length: " + String.valueOf(body.length) + CR_LF + CR_LF).getBytes("US-ASCII"); + netOut.write(header); + netOut.write(body); + netOut.flush(); + c.close(); + } catch (IOException e) { + System.err.println(e); + } + } +} diff --git a/ServidorConcurrente/ServWebPatternConc.java b/ServidorConcurrente/ServWebPatternConc.java new file mode 100644 index 0000000..d238af1 --- /dev/null +++ b/ServidorConcurrente/ServWebPatternConc.java @@ -0,0 +1,33 @@ +package ServidorConcurrente; + +import java.util.*; +import java.io.*; +import java.net.*; + +public class ServWebPatternConc { + public static int maxCon = 10; + public static void main (String args[]) { + try { + ServerSocket serv = new ServerSocket(8080); + System.out.println("showserver created at port 8080."); + ThreadGroup workers = new ThreadGroup("WebWorkers"); + + while (true) { + if(workers.activeCount()