我不确定我想做的事情是否可行,但事实并非如此。这是我的问题:
我正在尝试使用Servlet通过HTTP将信息从客户端传递到服务器。这种通信非常频繁(我传递UI信息,所以每一个鼠标事件),所以我希望尽可能少的开销来避免延迟问题,这就是为什么我不想为每次传输做一个GET调用。 HTTP是一项要求。我正在使用较旧的Tomcat版本(Servlet API 2.4)。我想这有点像Web套接字用例,但我没有任何Web套接字支持。
我尝试的是在客户端打开URL连接,并打开输入流(否则servlet的doGet()永远不会被调用)。我正在将一个用于初始化的参数传递给客户端。
URLConnection uiConnection = url.openConnection();
uiConnection.setRequestProperty("Authorization", "Basic " + encode("xyz" + ":"
+ "xyz"));
uiConnection.setReadTimeout(0);
uiConnection.setDoOutput(true);
uiConnection.setAllowUserInteraction(true);
DataInputStream is = new DataInputStream(
uiConnection.getInputStream());
当我稍后尝试从此连接中检索输出流时,我收到一个ProtocolException(读取输入后无法写入输出)。
out = new BufferedWriter(new OutputStreamWriter(
uiConnection.getOutputStream()));
out.write(uiUpdate);
在servlet端我做了类似的事情:
DataInputStream is = new DataInputStream(
request.getInputStream());
我是否完全走错了轨道,或者在没有为每次传输使用新连接的情况下是这样的?
谢谢, 标记
答案 0 :(得分:0)
我认为关键问题是,你是否还有http流量到这个IP?如果是这样,可能没有任何东西只能用java做。如果没有,则创建一个servlet以侦听端口80,并直接解析传入的数据。
http://download.oracle.com/javase/tutorial/networking/sockets/clientServer.html