1

ご覧のとおり、特定のソケットに 10 秒ごとにリクエストを直接送信します (生き続けて検出されるようにするため)。ただし、送信できるのは 2 回だけです。Wireshark を使用して、送信した 3 番目のパッケージに含まれていTCP ZeroWindowて、サーバーに送信できないことがわかりました。以下のパッケージも同様です。通常、ウィンドウ サイズは常に減少するのではなく、通常のレベルのままにする必要があります。ソースコードの何が問題になっていますか? どんな助けでも大歓迎です!

私が手に入れた3つのパッケージ:

最初のパッケージ 2 番目のパッケージ 3 番目のパッケージ

ソースコード: 非常にシンプル

public class pediy {

    public static void main(String[] args) throws IOException {

        URL url = new URL("http://bbs.pediy.com");
        Socket socket = null;
        PrintWriter os = null;
        BufferedReader is = null;

        while(true) {

            socket = new Socket(url.getHost(), 80);
            os = new PrintWriter(socket.getOutputStream());

            String request = "GET / HTTP/1.1\nHost: bbs.pediy.com\nProxy-Connection: keep-alive\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\nUser-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17 CoolNovo/2.0.6.12\nAccept-Encoding: gzip,deflate,sdch\nAccept-Language: en-US;q=0.6,en;q=0.4\nAccept-Charset: utf-8;q=0.7,*;q=0.3\n";
            try {
                while (true) {

                    os.println(request);
                    os.flush();

                    System.out.println("Finished");
                    Thread.sleep(1000*10);
                }

            } catch (Exception e) {
                System.out.println("Error" + e);
            } finally {
                CloseAll(socket, os);
            }
        }
    }

    private static void CloseAll(Socket socket, PrintWriter os) throws IOException {
        if(socket != null) socket.close();
        if(os != null) os.close();
    }
}
4

2 に答える 2

0

良い、

  1. 有効な HTTP を送信していません。HTTP の行末記号は\r\nだけではなく\nであり、ヘッダーの後に空白行が必要です。

  2. あなたは応答を読んでいません。

したがって、もう一方の端にはいくつかの問題があります。幸運なことに、まだ接続が閉じられていません。

于 2013-04-05T03:17:20.410 に答える