Java의소켓관련Class
소켓개념 및 예제
。JAVA는java.net 패키지에서 연결방식(TCP,UDP)에따라 2가지 종류의소켓(Socket,DatagramSocket)을 제공
TCP관련 Class
SocketClass :java.net.socket
。두 프로세스간Server-Client관계로 네트워크 통신을 수행 시 사용하는SocketClass
。TCP( Transmission Control Protocol ) 통신방식을 사용
▶연결지향형 프로토콜( Connection-Oriented )
。프로세스의Socket중 주로Client Socket역할 활용됨
▶자식클래스이자Server Socket역할을 수행하는ServerSocketClass와 1:1로 연결되어 데이터를 전송
。서버-클라이언트간 소켓연결은1:1만 가능하므로 통신이 끝난 경우 연결종료를 하여 다른 소켓을 연결.
。연결을 수행할 특정ServerSocket의 컴퓨터의IP주소,포트번호를 생성자로 전달하여 연결될Client Socket역할의Socket 객체를 생성
Socket socket = new Socket("127.0.0.1", 8080)
▶ 해당Socket 객체를 통해 데이터의 송수신을 수행
Server-side에서는 연결 시서버소켓객체.accept()를 통해 반환됨.
SocketMethod
소켓객체.getInputStream()
。Server Socket로부터Client Socket으로 데이터를 수신하여InputStream 객체로 반환하는 Method
▶Client-Side에서 사용InputStream input = socket.getInputStream(); // 바이트 스트림 InputStreamReader reader = new InputStreamReader(input); // 문자 변환 BufferedReader in = new BufferedReader(reader); // 라인 단위로 읽기 String line = in.readLine(); // 한 줄 읽기 System.out.println("받은 메시지: " + line);
소켓객체.getOutputStream()
。Server Socket로부터Client Socket으로 데이터를 송신하여OutputStream 객체를 반환하는 Method
▶Server-Side에서 사용OutputStream output = socket.getOutputStream(); // 바이트 출력 스트림 PrintWriter out = new PrintWriter(output, true); // 문자 기반 출력 out.println("안녕하세요, 클라이언트!"); // 데이터 전송
소켓객체.close()
。 연결된Server Socket과 연결종료를 수행하는 Method
ServerSocketClass :java.net.serversocket
。두 프로세스간 네트워크 통신을 수행 시Server-Side로서Server Socket역할을 수행하여 특정포트번호의TCP서버를 구현하는 Class
▶Socket Class를 상속하므로 동일한TCP통신방식을 사용
。특정포트번호를 생성자로 전달하여ServerSocket객체 생성
ServerSocket server = new ServerSocket(포트번호);
▶ServerSocket객체는 해당포트번호와 바인딩되어 해당포트번호로Client Socket에 의한 연결(Listen)을 상시대기를 수행
ServerSocketMethod
서버소켓객체.accept():
。ServerSocket객체가 바인딩하는포트번호로Client Socket에 의한 연결요청이 오면Client Socket의Socket Class객체를 반환하는 Method
▶Client Socket의Socket Class객체가 반환된 경우 두프로세스간 연결이 정상적으로 되었으며 반환된Socket객체를 통해 통신을 수행
서버소켓객체.close()
。서버소켓을 종료
▶ 서버 폐쇄
서버소켓객체.isClosed()
。서버소켓객체의 연결여부를 반환
서버소켓객체.getLocalPort()
。서버소켓객체가 바인딩한 포트를 반환
UDP관련 Class
DatagramPacketClass :java.net.DatagramPacket
。UDP 프로토콜에 의해 네트워크 상에서 송수신될Datagram과 관련된 Class
▶UDP Datagram은 해당Class객체로 추상화되어 구현
。UDP는TCP와 달리비연결성 프로토콜이므로 데이터에 목적지 소켓의IP Address와포트번호를 추가해야하므로DatagramPacket을 통해Datagram을 구현
。수신할Server Host의IP Address와ServerSocket의포트번호를 데이터와 함께 포함하여Datagram을 생성
▶ 이후DatagramSocket Class에 의해 전송
DatagramSocketClass :java.net.DatagramSocket
。UDP통신을 수행하여 연결없이데이터그램( =패킷)의 송수신을 수행하는Class
new DatagramSocket(포트번호)
。포트번호를 생성자로 전달하여DatagramSocket 객체생성
。모든DatagramSocket는Datagram의 송수신이 가능
▶TCP의Socket과ServerSocket과 달리DatagramSocket는UDP Server Socket과UDP Client Socket을 구현할 수 있다.
。UDP( User Datagram Protocol ) 통신방식을 사용
DatagramSocket객체.send(DatagramPacket객체)
。DatagramPacket객체로 정의된UDP 데이터그램을 전송
MulticastSocketClass
。UDP기반으로그룹에 참여한 다수의Client에게 데이터 동시전송이 가능
。DatagramSocket Class를 상속하므로UDP통신방식을 사용
InetAddress:java.net.InetAddress
。DNS의 역할을 수행하는 Class
▶Host name를 전달하면IP Address로 변환
InetAddress.getByName(호스트이름)
。호스트이름을 넣어서InetAddress 객체생성
InetAddress객체.getHostName()
。InetAddress객체의Hostname를 return.
InetAddress객체.getHostAddress()
。InetAddress객체의IP Address를 반환