Shammer's Philosophy

My private adversaria

クライアントのポートを固定するーJava版ー

Java でもCと同様の方法でできるようだ。Socket作成後、connect する前に bind しておけばいい。Socket Class に使用可能なメソッドも定義されているし、やり方はCよりイメージしやすい気がする。単にJavaの方に慣れているだけか?

import java.io.*;
import java.net.*;

public class TCPEchoBindClient {
    public static void main(String[]args)throws Exception{
	System.out.println("Start!");
	Socket socket = null;
	try {
	    socket = new Socket();
	    socket.bind(new InetSocketAddress("localhost",8888));
	    socket.connect(new InetSocketAddress("localhost", 80));
	    for( int i = 0 ; i < 10 ; i++ ){
		Thread.sleep(1 * 1000);
		System.out.print(".");
	    }
	    System.out.println("\nEnd...");
	}
	finally {
	    if( socket != null ) {
		socket.close();
	    }
	}
    }
}

netstat 見るために 10 秒スリープさせているけれども、これは別になくてもいい。何度やってもポート8888と80の接続が ESTABLISHED になっている。