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 |
· host와 port를 이용하여 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); |
'Development > Java' 카테고리의 다른 글
클래스 상속의 정의 방법 (0) | 2017.09.25 |
---|---|
상속 장점 (0) | 2017.09.25 |
Summary - 서버 소켓을 생성하는 방법과 클라이언트 소켓을 생성하는 방법, 데이터베이스 접속 (0) | 2017.09.24 |
Summary - 자바의 실행 구조, 자바의 실행 구조, 자바 자료형, 자바 연산자 & 제어문, 접근지정자 (0) | 2017.09.23 |
컬렉션 클래스 총정리 (0) | 2017.09.23 |