簡體   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