Socket 클래스, Socket 클래스 생성자, Socket 클래스의 기본 생성자, Socket 생성자 예외, 연결되지 않은 소켓 생성하기, SocketAddress객체(소켓 주소) 반환하는 생성자, 프락시 서버를 통한 소켓 생성자

CODEDRAGON Development/Java

반응형

 

 

Socket 클래스

·       TCP 소켓은 java.net.Socket 클래스를 의미

·       소켓 클래스는 서버에 접속하기 위한 클라이언트를 구현하는 데 주로 사용

 

 

Socket 클래스 생성자

·       Socket 클래스의 기본 생성자

·       연결되지 않은 소켓 생성하기

·       SocketAddress객체(소켓 주소) 반환하는 생성자

·       프락시 서버를 통한 소켓 생성자

 

 

 

Socket 클래스의 기본 생성자

아래 4개의 생성자는 소켓 객체를 생성하고 원격 호스트에 대한 네트워크 연결 작업을 함께 수행합니다.

생성자

설명

Socket(InetAddress address, int port) throws IOException

·       InetAddress객체와  port를 이용하여 Socket객체를 생성합니다.

·       address IP주소

·       port 1에서 65535까지의 int타입으로 전달됩니다.

Socket(String host, int port)

throws UnkonwnHostException,

IOException

·       hostport를 이용하여 Socket객체를 생성합니다.

·       host는 서버의 주소(문자열 주소)

·       port는 포트번호

 

public Socket(String host, int prot, InetAddress interface, int localPort)

throws IOException, UnknownHostException

·       호스트와 포트 이외에도 연결에 사용할 인터페이스와 포트로부터 처음 두 인자로 지정된 호스트와 포트로 접속합니다.

public Socket(InetAddress host, int port, InetAddress interface, int

localPort) throws IOException

·       인터페이스와 포트로부터 처음 두 인자로 지정된 호스트와 포트로 접속합니다.

 

 

 

Socket 생성자 예외

Socket 생성자는 두 가지 예외 처리가 발생한다.

예외

설명

UnknownHostException

호스트를 찾을 수 없거나, 서버의 포트가 열려 있지 않은 경우, 도메인 네임 서버가 동작하지 않는 경우 UnknownHostException 예외가 발생

IOException

네트워크의 실패, 방화벽 때문에 서버에 접근 할 수 없을 때 IOException 예외가 발생

 

 

 

연결되지 않은 소켓 생성하기

소켓 생성과 네트워크 연결을 따로 해야할 경우에는 소켓 생성자를 아무 인자 없이 호출하여, 소켓을 생성하고, SocketAddress 를 인자로 지정합니다. 이렇게 한 후 소켓을 연결하는 작업을 합니다.

try {

Socket socket = new Socket();

SocketAddress address = new InetSocketAddress("time.nist.gov", 13);

socket.connect(address);

} catch (IOException ex) {

System.err.println(ex);

}

 


 

SocketAddress객체(소켓 주소) 반환하는 생성자

SocketAddress  클래스는 연결 끝점을 나타내는데, 이 클래스는 기본 생성자를 제외하고는 아무런 메소드를 제공하지 않는 빈 추상 클래스 입니다.

SocketAddress  클래스의 기본적인 의도는 원본 소켓의 연결이 끊어지거나 가비지 컬렉터에 의해 사라진 경우에도 새로운 소켓을 생성하는 데 재활용할 수 있는 IP주소와 포트 같은 일시적인 소켓 연결 정보를 위한 간편한 저장소를 제공하는 것입니다. 이를 위해 Socket클래스는 SocketAddress  객체를 반환하는 두 개의 메소드를 제공합니다.

public SocketAddress getRemoteSocketAddress()

public SocketAddress getLocalSocketAddress()

 

 

"http://www.naver.com"에 연결하여 주소를 저장하는 예제 코드

Socket socket = new Socket("http://www.naver.com", 80);

SocketAddress yahoo = socket.getRemoteSocketAddress();

Socket.close();

 

 

Class SocketAddress

https://docs.oracle.com/javase/8/docs/api/java/net/SocketAddress.html

 



 

프락시 서버를 통한 소켓 생성자

인자로 전달된 프락시 서버를 통한 연결되지 않은 소켓 생성합니다.

일반적으로 소켓이 사용하는 프락시 서버는 소켓 프락시 호스트와 소켓 프락시 포트 시스템 속성에 의해 제어되고, 이 속성들은 시스템에 있는 모든 소켓에 적용됩니다. 그러나 이 생성자에 의해 생성된 소켓은 대신 인자로 지정된 프락시 서버 사용합니다.

public Socket(Proxy proxy);

 

 

특정 프락시 서버를 사용하기 위해서 해당 서버의 주소를 지정한 예

SocketAddress proxyAddress = new InetSocketAddress("myproxy.test.com", 1080);

Porxy proxy = new Proxy(Proxy.Type.SOCKS, proxyAddress);

Socket s = new Socket(proxy);

SocketAddress romote = new InetSocketAddress("login.example.org", 25);

s.connect(remote);