ServerSocket 옵션의 기본 해석: SO_TIMEOUT 옵션, SO_REUSEADDR 옵션, SO_RCVBUF 옵션

1:SO_TIMEOUT 옵션
이 옵션은 고객 연결을 기다리는 시간 초과 시간을 나타냅니다.
이 옵션 설정:public void setSoTimeOut(int timeout)throws SocketException
이 옵션 읽기:public int getSoTimeOut ()throws IOException;
테스트 프로그램:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class TimeoutTest {

	public static void main(String[] args) {
		try {
			ServerSocket serverSocket = new ServerSocket(8000);
			serverSocket.setSoTimeout(6000);                  // 6 
			Socket socket = serverSocket.accept();
			socket.close();
			System.out.println(" ");
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

프로그램에 시간 초과 시간이 6초로 설정되어 있기 때문에 서버가 시간 초과 시간을 기다리면 Socket Time OutException을 던집니다. 이것은 Interrupted Exception의 하위 클래스입니다.
서버소켓을setSoTime Out(6000)을 제거하면 서버 측은 고객의 연결을 받을 때까지 기다릴 것입니다. accept () 방법에서 되돌아옵니다.
2:SO_REUSEADDR 옵션
이 옵션은 서버에 연결된 주소를 다시 사용할 수 있는지 여부를 나타냅니다.
이 옵션 설정:public void setReuseAddress(boolean on)throws SocketException
이 옵션 읽기:public boolean getReuseAddress()throws SocketException
이 옵션은 네트워크에 오래된 ServerSocket에 데이터를 전송할 때 새 ServerSocket을 낡은 ServerSocket과 같은 포트에 연결할 수 있는지 여부를 결정하는 데 사용됩니다. 이 옵션의 기본값은 운영체제와 관련이 있습니다. 일부 운영체제에서는 포트를 다시 사용할 수 있지만 일부 시스템에서는 포트를 다시 사용할 수 없습니다.
서버 소켓이 닫혔을 때, 네트워크에 이 서버 소켓에 전송된 데이터가 있다면, 이 서버 소켓은 로컬 포트를 즉시 방출하지 않고, 네트워크에서 전송된 지연 데이터를 수신한 후에 포트를 방출하기 위해 일정 시간을 기다립니다.
주의해야 할 것은,publicvoidsetReuseAddress(boolean on)throws SocketException은 서버소켓이 로컬 포트에 연결되기 전에 사용해야 합니다. 그렇지 않으면 이 방법이 무효입니다.그 밖에 같은 포트를 사용하는 두 프로세스는 서버Socket을 호출해야 합니다.setReuseAddress(true) 방법으로 한 프로세스가 ServerSocket을 닫으면 다른 프로세스의 ServerSocket은 같은 포트를 즉시 다시 사용할 수 있습니다
 
3:SO_RCVBUF 옵션
수신 데이터의 버퍼 크기를 나타냅니다. 서버 소켓이 로컬 포트를 연결하기 전이든 그 후든 setReceiveBufferSize () 방법을 호출하면 유효합니다.
이 옵션 설정:public void setReceiveBufferSize(int size)throws SocketException
이 옵션 읽기:public int getReceiveBufferSize()throws SocketException
import java.io.IOException;import java.net.ServerSocket;
public class RecvBufferSizeTest {
public static void main(String[]args) {try {ServerSocket serverSocket = new ServerSocket(8000), int size = serverSocket.getReceiveBufferSize(), System.out.println("before modify size:"+ size), if(size <130172) {serverSocket.setReceiveBufferSize(130172);//버퍼 크기를 128KB} 시스템으로 설정합니다.out.println("after modify:"+ serverSocket.getReceiveBufferSize());  } catch (IOException e) {   e.printStackTrace();  } }}

좋은 웹페이지 즐겨찾기