Es importante tener el código html que se solicite en la ruta correcta.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
import java.net.ServerSocket import java.net.Socket import java.io.* class HttpRequest(private val clientConn: Socket) { fun process() { clientConn.getInputStream().bufferedReader().use { reader -> clientConn.getOutputStream().buffered().use { output -> val request = reader.readLine().trim() println(request) val tokens = request.split(" ") if (tokens[0] == "GET") { val fileName = tokens[1] var fileExists = true val fileInputStream = try { FileInputStream(fileName) } catch (e: Exception) { fileExists = false null } val serverLine = "Simple HTTP Server\n" val statusLine: String val contentTypeLine = "Content-type: text/html\n" val contentBody: String? val contentLengthLine: String if (fileExists) { statusLine = "HTTP/1.0 200 OK\n" contentLengthLine = "Content-Length: ${fileInputStream!!.available()}\n" output.write(statusLine.toByteArray()) output.write(serverLine.toByteArray()) output.write(contentTypeLine.toByteArray()) output.write(contentLengthLine.toByteArray()) fileInputStream.use { fis -> fis.copyTo(output) } } else { statusLine = "HTTP/1.0 404 Not Found\n" contentBody = "<HTML><HEAD><TITLE>404 Not Found</TITLE></HEAD><BODY>404 Not Found</BODY></HTML>" contentLengthLine = "Content-Length: ${contentBody.length}\n" output.write(statusLine.toByteArray()) output.write(serverLine.toByteArray()) output.write(contentTypeLine.toByteArray()) output.write(contentLengthLine.toByteArray()) output.write(contentBody.toByteArray()) } } } } clientConn.close() } } class HttpServer { companion object { @JvmStatic fun main(args: Array<String>) { ServerSocket(5217).use { serverSocket -> while (true) { val clientSocket = serverSocket.accept() val request = HttpRequest(clientSocket) request.process() } } } } } |