演習の解答例

演習1

import processing.net.*;

Server myServer;

void setup() {
  myServer = new Server(this, 80);
}

void draw() {
  Client client = myServer.available();
  if (client != null) {
    client.readString();
    client.write("HTTP/1.1 404 Not Found\r\n");
    client.write("\r\n");
    client.stop();
  }
}

演習2

import java.util.Iterator;
import processing.net.*;

Server myServer;

void setup() {
  myServer = new Server(this, 80);
}

void draw() {
}

void serverEvent(Server server, Client client) {
  Handler handler = new Handler(client);
  handler.start();
}

class Handler extends Thread {
  Client client;

  Handler(Client client) {
    this.client = client;
  }

  void run() {
    HeaderReader reader = new HeaderReader(this.client);

    String[] request = split(reader.next().trim(), ' ');
    println("Method : " + request[0]);
    println("Path : " + request[1]);
    println("Version : " + request[2]);
    String path = request[1].substring(1);
    if (path.length() == 0) {
      path = "index.html";
    }

    for (String line : reader) {
      String[] header = splitTokens(line.trim(), ": ");
      if (header.length == 2) {
        println(header[0] + " : " + header[1]);
      }
    }

    byte[] file = loadBytes(path);
    if (file == null) {
      this.client.write("HTTP/1.1 404 Not Found\r\n");
      this.client.write("\r\n");
      this.client.stop();
    } else {
      this.client.write("HTTP/1.1 200 OK\r\n");
      this.client.write("\r\n");
      this.client.write(file);
      this.client.stop();
    }
  }
}

class HeaderReader implements Iterable<String>, Iterator<String> {
  Client client;
  boolean stop = false;

  HeaderReader(Client client) {
    this.client = client;
  }

  Iterator<String> iterator() {
    return this;
  }

  boolean hasNext() {
    return !this.stop;
  }

  String next() {
    while (this.client.active()) {
      if (this.client.available() > 0) {
        String line = this.client.readStringUntil('\n');
        if (line != null) {
          if (line.equals("\r\n")) {
            this.stop = true;
          }
          return line;
        }
      }
    }
    return null;
  }
}

results matching ""

    No results matching ""