我在高中教授编程课程,我正在尝试为我的学生提供一个网络项目。我当时认为让他们做一个战舰类型的游戏是非常可行的,我认为他们真的会对此感到兴奋。我可以使用家用电脑上的插座做到这一点,但是在学校,所有端口都关闭,他们没有为我打开它们。
是否有解决方法(比如有一个关于转发信息的网络服务协议)?有什么想法吗?
(班级是基础,学生没有太多背景 - 我需要尽可能简化)。
答案 0 :(得分:1)
这个servlet应该像评论中所宣传的那样工作(尚未测试):
发送包含网址参数to
和message
收到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);
}
}
}
编辑:简化为每个地址只存储一条消息,对于基于回合的游戏应该足够,并且缓冲只会增加客户端逻辑的复杂性(清除以前匹配的过时转弯数据等)。以某种方式同步客户端可能是有意义的,例如在发送转弯之前发送“开始”信号,并在收到“开始”之前丢弃任何信号。可悲的是,这将需要轮询,使用点对点套接字会更好。