与学校封闭端口的网络连接

时间:2013-12-03 20:01:37

标签: java networking port

我在高中教授编程课程,我正在尝试为我的学生提供一个网络项目。我当时认为让他们做一个战舰类型的游戏是非常可行的,我认为他们真的会对此感到兴奋。我可以使用家用电脑上的插座做到这一点,但是在学校,所有端口都关闭,他们没有为我打开它们。

是否有解决方法(比如有一个关于转发信息的网络服务协议)?有什么想法吗?

(班级是基础,学生没有太多背景 - 我需要尽可能简化)。

1 个答案:

答案 0 :(得分:1)

这个servlet应该像评论中所宣传的那样工作(尚未测试):

发送包含网址参数tomessage

的邮件

收到get(收件人ID)的邮件。返回消息,如果没有则返回任何消息。应该可以通过浏览器测试。

在现实世界中,get请求不应该真正改变服务器的状态。我只会在课堂上运行这个,因为任何人都可以向任何id发送内容,任何人都可以阅读任何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);
      }
    }
 }

编辑:简化为每个地址只存储一条消息,对于基于回合的游戏应该足够,并且缓冲只会增加客户端逻辑的复杂性(清除以前匹配的过时转弯数据等)。以某种方式同步客户端可能是有意义的,例如在发送转弯之前发送“开始”信号,并在收到“开始”之前丢弃任何信号。可悲的是,这将需要轮询,使用点对点套接字会更好。