【发布时间】:2014-08-02 12:44:03
【问题描述】:
我正在用 Java 实现一个简单的代理服务器。我在下面的代码 sn-p 中通过 clientSocket 读取来自浏览器的请求。然后我打开一个输入流并通过 byte[] 缓冲区读取响应。
我在读取本地服务器上运行的特定网页时遇到错误。终止的特定点是int n = bis.read[buffer]; 线有人能指出是什么原因造成的以及如何纠正它吗?
其他信息:我在 SwingWorker 对象中运行此方法(也许它不相关)而且 forwardRequest 转发截获的请求。
如果您需要其他任何内容,请向我发送更新或评论
堆栈跟踪:
ERROR
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:189)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at java.net.SocketInputStream.read(SocketInputStream.java:107)
at Networker.doInBackground(Networker.java:67)
at Networker.doInBackground(Networker.java:25)
at javax.swing.SwingWorker$1.call(SwingWorker.java:296)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at javax.swing.SwingWorker.run(SwingWorker.java:335)
@Override
protected Void doInBackground() throws Exception {
System.out.println("Starting the SimpleProxyServer ...");
while (true) {
clientSocket = serverSocket.accept();
InputStream bis = clientSocket.getInputStream();
// reading the request and put it into buffer
//BufferedReader br =new BufferedReader(new InputStreamReader(bis));
try {
n = bis.read(buffer);
} catch (Exception e) {
System.err.println("ERROR");
e.printStackTrace();
}
forwardReq(); //this forwards the intercepted request
}
}
【问题讨论】:
-
当您尝试阅读时,连接已经关闭(重置):) 当我没有完整的代码时,很难知道为什么。
-
我认为你和stackoverflow.com/questions/62929/…有同样的问题
-
@Pphoenix 你认为每次循环通过在循环中重新初始化它来完成它的迭代时,我可以以某种方式重新打开它吗?
-
评论太长了,所以我添加了答案
-
你为什么只执行一次读取,忽略读取计数和读取的数据,然后转发请求,然后阻塞接受另一个连接,而不关闭前一个连接?
标签: java exception proxy inputstream http-request