首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java代理:读取输入流时的套接字异常

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

Stack Overflow用户
提问于 2014-06-12 08:54:46
回答 1查看 1.8K关注 0票数 0

我正在用Java实现一个简单的代理服务器。我在下面的代码片段中通过clientSocket读取来自浏览器的请求。然后打开一个输入流并通过byte[]缓冲区读取响应。

在本地服务器上运行的特定网页中阅读时,我遇到了一个错误。终止的特别点是,int n = bis.read[buffer];可以指出是什么引起了它,以及如何纠正它?

其他信息:--我正在SwingWorker对象中运行此方法(可能与此无关)-- forwardRequest也转发被截获的请求。

如果你还需要什么,给我一个更新或者评论。

堆叠痕迹:

代码语言:javascript
复制
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
    }
}
EN

回答 1

Stack Overflow用户

发布于 2014-06-12 12:31:34

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

What's causing my java.net.SocketException: Connection reset?中,我发现了connection resetconnection reset by peer之间的区别。

connection reset消息意味着您突然关闭了连接(通过对等方意味着另一方关闭了它)。由于异常是抛出在服务器上的,所以问题就在服务器代码的某个地方。

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

这不是一个百分之百的绝对答案,但由于我不能测试您所有的代码,这是一个值得一试的想法。如果您知道您正在使用多个客户端进行测试,我肯定会建议您尝试此解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24180203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档