Сеть с закрытыми портами в школе

Я преподаю введение в класс программирования в средней школе, и я пытаюсь дать сетевой проект своим ученикам. Я думал, что если бы у них была игра типа боя, это было бы очень выполнимо, и я думаю, что они действительно разозлились бы. Я могу сделать это отлично, используя сокеты на моем домашнем компьютере, но в школе все порты закрыты, и они не открывают их для меня.

Есть ли работа (например, у веб-службы есть дело с ретрансляцией информации)? Любые идеи?

(Класс является базовым, а ученики не имеют большого фона - мне нужно сделать его максимально упрощенным).

Ответ 1

Этот сервлет должен работать как рекламируемый в комментарии (не проверял его):

Отправьте сообщение с параметрами URL to и message

Получить сообщение с get (идентификатор приемника). Возвращает сообщение или ничего, если его нет. Следует проверить с помощью браузера.

В реальном мире запрос на получение не должен действительно изменять состояние сервера. Я бы только запускал это на время класса, так как любой может отправлять вещи на любой идентификатор, и любой может читать материал для любого id.

public class SimpleMessageServlet extends HttpServlet {
  private Map<String,String> messages = new HashMap<String,String>();

  public void doGet(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException {
    String to = request.getParameter("to");
    String message = request.getParameter("message");
    if (to != null && from != null && message != null) {
      messages.put(to, message);
    }
    response.setContentType("text/plain");
    String get = request.getParameter("get");
    if (get != null) {
      String result = messages.remove(get);
      if (result != null) {
        PrintWriter out = response.getWriter();
        out.println(result);
      }
    }
 }

Изменить: упростить, чтобы хранить только одно сообщение на адрес, должно быть достаточно для игры на основе поворота, и буферизация просто добавит сложности клиентской логике (очистка устаревших данных поворота от предыдущих совпадений и т.д.). Вероятно, имеет смысл синхронизировать клиентов так или иначе, например. посылать "стартовый" сигнал перед отправкой поворотов и отбрасывать что угодно, пока не будет получен "старт". Печально то, что это потребует опроса, использование одноранговых сокетов будет намного приятнее.