|
SSISO Community검색 |
|
SSISO Community메뉴 |
|
SSISO Community카페 |
|
블로그 카테고리 |
|
|
Synchronized로 검색한 결과 |
|
등록일:2008-03-06 13:02:17 작성자: 제목:Socket 클래스 |
|
이 클래스는 소켓을 구현한 것이다. 소켓은 연결하고자 하는 서버의 IP 주소와 포트 번호를 필요로 한다. 클라이언트에서 소켓 객체를 만들면, 소켓은 곧바로 주어진 IP주소와 포트 번호로 연결을 시도한다. 서버 소켓은 다른 소켓을 만들어 클라이언트 소켓과 연결시킬 것이다. 서버 측의 소켓과 클라이언트 소켓이 연결되면 소켓의 입출력 스트림을 얻어와서 데이터를 서로 주고받을 수 있다.
Socket 클래스의 멤버를 살펴보고 실제로 코딩해 보자.
☞ Socket 클래스의 유용한 생성자
public Socket(String host, int port) throws UnknownHostException, IOException
host(IP 주소 문자열)와 port(포트 번호)의 서버로 연결하는 소켓을 생성한다.
public Socket(InetAddress address, int port) throws IOException
address(IP 주소 객체)와 port(포트 번호)의 서버로 연결하는 소켓을 생성한다.
☞ Socket 클래스의 유용한 메소드
public InetAddress getInetAddress()
public int getPort()
연결된 서버의 주소를 반환하거나, 포트 번호를 반환한다.
public InetAddress getLocalAddress()
public int getLocalPort()
로컬 주소를 반환하거나, 로컬 포트번호를 반환한다.
public InputStream getInputStream() throws IOException
소켓의 입력 스트림을 반환한다.
public OutputStream getOutputStream() throws IOException
소켓의 출력 스트림을 반환한다.
public void bind(SocketAddress bindpoint) throws IOException
public boolean isBound()
bindpoint에 해당하는 로컬 주소(IP주소+포트번호)에 결합하거나, 결합 상태를 반환한다.
public Synchronized void close() throws IOException
public boolean isClosed()
소켓을 닫거나, 소켓의 닫힘 상태를 반환한다.
public boolean isConnected()
소켓이 연결된 상태면 true를, 아니면 false를 반환한다.
public void shutdownInput() throws IOException
public boolean isInputShutdown()
입력 스트림을 닫거나, 입력 스트림의 닫힘 상태를 반환한다.
public void shutdownOutput() throws IOException
public boolean isOutputShutdown()
출력 스트림을 닫거나, 출력 스트림의 닫힘 상태를 반환한다.
Socket 클래스의 멤버 중에서 유심히 살펴볼 것은 getInputStream과 getOutputStream이다. 이 두 메소드가 실제적으로 통신에 필요한 메소드이기 때문이다.
먼저 쉬운 예제부터 해보자. 앞에서 연습한 예제 "Server1.java"의 서버소켓에 접속하는 클라이언트를 만들어보자.
Client1.java
import java.net.*;
import java.io.*;
public class Client1{
public static void main(String[] args){
Socket client=null;
try{
System.out.println("서버와의 연결을 시도합니다.");
client=new Socket("127.0.0.1", 7777); // x1
System.out.println("연결되었습니다.");
}catch(Exception e){
System.out.println("연결 실패..");
}finally{
try{
if(client!=null) client.close(); // x2
}catch(IOException ie){}
}
}
}
앞에서 만든 "Server1.class"를 먼저 실행시킨 후에 "Client1.class"를 실행시키자. 클라이언트가 서버에 접속하려면 먼저 서버가 동작하고 있어야하기 때문이다. x1행의 "127.0.0.1"은 로컬 시스템의 IP 주소를 나타내는 것이다. 통신 프로그램을 개발할 때 서로 다른 컴퓨터에서 서버와 클라이언트 프로그램을 실행시켜 테스트하는 것은 많은 시간이 소요되므로 바람직한 방법이 아닐 것이다. 따라서 하나의 컴퓨터에서 loopback을 이용하여 통신 프로그램을 개발하는 것이다. loopback이란 마치 다른 곳에서 수신된 것처럼 자신이 보낸 신호를 자신이 수신하여 처리하는 것을 의미한다.
아무튼 "Server1.class"가 실행되고 있는 상태에서 "Client1.class"를 실행하면, x1행에서 소켓을 생성하고 주어진 서버소켓에 연결한 후 x2행에서 소켓을 닫는다. 서버 측에서는 클라이언트의 연결 요청을 감지하여 클라이언트의 소켓과 newSocket과 연결시키고 자신은 다른 소켓을 기다린다. 연결이 이루어지면 그때부터 필요한 데이터를 주고받을 수 있다.
출처 : http://java.pukyung.co.kr/Lecture/Chapter21.php |
|
|
|
|
|