6

Javaプログラムでtcp CLOSE_WAIT状態を再現する簡単な方法はありますか?

この問題がある従来の Java アプリケーションがあり、修正をテストできるように再現できるようにしたいと考えています。

ありがとう

4

1 に答える 1

9

接続が CLOSE_WAIT 状態にあるのは、相手側が接続を閉じたが、こちら側が閉じていない場合です。再現は簡単です:

// Client.java (will sleep in CLOSE_WAIT)
import java.io.*;
import java.net.*;

public class Client
{
    public static void main(String[] args) throws Exception
    {
        Socket socket = new Socket(InetAddress.getByName("localhost"), 12345);
        InputStream in = socket.getInputStream();
        int c;
        while ((c = in.read()) != -1)
        {
            System.out.write(c);
        }
        System.out.flush();

        // should now be in CLOSE_WAIT
        Thread.sleep(Integer.MAX_VALUE);
    }
}

// Server.java (sends some data and exits)
import java.io.*;
import java.net.*;

public class Server
{
    public static void main(String[] args) throws Exception
    {
        Socket socket = new ServerSocket(12345).accept();
        OutputStream out = socket.getOutputStream();
        out.write("Hello World\n".getBytes());
        out.flush();
        out.close();
    }
}
于 2013-04-18T08:59:53.357 に答える