1. ホーム
  2. java

[解決済み] Java簡単なコード: java.net.SocketException: サーバーからの予期しないファイルの終了

2022-02-22 23:24:52

質問

私はJavaでいくつかの簡単なコードを書きました、メソッドはウェブサイトに接続し、BufferedReaderを返す必要があります。

private BufferedReader getConnection(String url_a) {
        URL url;
        try {
            System.out.println("getting connection");
            url = new URL(url_a);
            HttpURLConnection urlConnection = (HttpURLConnection) 
                     url.openConnection();
            urlConnection.addRequestProperty("User-Agent",
                    "Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.7.3) Gecko/20040924"
                     + "Epiphany/1.4.4 (Ubuntu)");
            inStream = new InputStreamReader(urlConnection.getInputStream());
            return new BufferedReader(inStream);
        } catch (Exception ex) {
            Logger.getLogger(Reader.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;

}

PCで使用すると問題なく動作するのですが、サーバーに.jarファイルを置くとこのようなエラーになります。

java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:718)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:579)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:715)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:579)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1322)
at dataconverter.Reader.getConnection(Reader.java.260)

毎回例外が発生するわけではなく、すべてがうまくいき、プログラムがうまく動作することもあるので、問題はかなり奇妙です。

どなたか思い当たる方はいらっしゃいますか?

解決方法は?

予期しないファイルの終了は、リモートサーバーが接続を受け入れ、応答を送信することなく閉じたことを意味します。リモートシステムが忙しすぎてリクエストを処理できないか、ネットワークのバグで接続がランダムに切断される可能性があります。

サーバーにバグがある可能性もあります。リクエストの中の何かが内部エラーを引き起こし、サーバーは本来のHTTPエラーレスポンスを送信する代わりに、単に接続を閉じてしまいます。これは、リクエストに含まれるヘッダーの欠落や無効なヘッダー値が原因であることを示唆する人もいます。

入手可能な情報では、何が問題なのかを言うことは不可能です。もしあなたが問題のサーバーにアクセスできるのであれば、パケットスニッフィングツールを使って正確に送受信されたものを見つけ、サーバープロセスのログを見て、エラーメッセージがあるかどうかを確認することができます。