繁体   English   中英

Java中的代理:读取输入流时出现套接字异常

[英]Proxy in Java : Socket Exception while reading an inputstream

我正在用Java实现一个简单的代理服务器。 我在以下代码片段中通过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
    }
}

我现在重新阅读您的问题,我想我可能已经找到您的问题了。

是什么导致我的java.net.SocketException:连接重置? 我发现了connection resetconnection reset by peer之间的区别。

connection reset消息表示您突然关闭了连接(对等体意味着另一方关闭了该连接)。 由于在服务器上引发了异常,因此问题出在服务器代码内。

我相信您未公开的信息流可能是一个问题。 程序只能使用有限数量的资源。 当您打开流而不关闭它时,程序会认为您仍在使用流,并且分配的资源将不会被释放。 因此,使用多个客户端进行测试可能会分配服务器的所有资源,并且当新客户端连接其中一个输入流时,将强制关闭(因为没有可用资源)。 这可能会导致强制连接 ,从而导致重置连接异常。

这不是100%的绝对答案,但是由于我无法测试您的所有代码,因此值得尝试。 如果您知道要与多个客户端进行测试,则绝对建议您尝试此解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM