public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum + " 입니다 "); } } 1
학습목표 네트워킹의개념에대해학습한다. 인터넷의주소와 URL 을네트워크를통해사용하는방법을학습한다. 연결성통신방법인 TCP 소켓에대해학습한다. 두개의프로그램이연결성통 신방법을사용하여통신하는프로그램을작성한다. 비연결성통신방법인 UDP 소켓에대해학습한다. 두개의프로그램이비연결 성통신방법을사용하여통신하는프로그램을작성한다. 2
목차 section 1 네트워킹의개요와 java.net 패키지 - 1-1 TCP/IP(Transmission Control Protocol/Internet Protocol) - 1-2 TCP와 UDP - 1-3 소켓 (socket) - 1-4 포트 (port) - 1-5 java.net 패키지 section 2 인터넷주소와 URL - 2-1 InetAddress 클래스 - 2-2 URL 클래스 - 2-3 URLConnection 클래스 section 3 TCP 소켓 section 4 UDP 소켓 3
1 네트워킹의개요와 java.net 패키지 1-1 TCP/IP(Transmission Control Protocol/Internet Protocol) 프로토콜 - 컴퓨터상호간에통신을위한규약으로정의 TCP/IP 프로토콜 - 4 개의기능계층들로구성 4
1 네트워킹의개요와 java.net 패키지 1-1 TCP/IP(Transmission Control Protocol/Internet Protocol) TCP/IP 계층구조 432 page 5
1 네트워킹의개요와 java.net 패키지 1-2 TCP와 UDP TCP/IP 의전달계층은크게두가지로구분 - 연결형인 TCP(Transmission Control Protocol) - 비연결형인 UDP(User Datagram Protocol) TCP - 연결성통신방식으로전화처럼먼저수신자와연결을설정한다음정보를주고받는방식 을의미 UDP - 비연결성통신방식으로편지처럼보내는사람에의해보내지면받는사람은그편지를받 아야편지가도착한사실을알게되는경우 6
1 네트워킹의개요와 java.net 패키지 1-3 소켓 (socket) 소켓 (socket) - 전기선의소켓과유사 - 컴퓨터가연결된통신의끝점을의미 - 상호연결된응용프로그램들사이의안정된정보교환을제공하고있는매체 - TCP/IP소켓 : TCP(Transmission Control Protocol) 소켓, UDP(User Datagram Protocol) 소켓 7
1 네트워킹의개요와 java.net 패키지 1-4 포트 (port) 포트 - 통신선을통해수신되는데이터가컴퓨터내의여러통신프로그램중에서하나의프로그램에전달되도록하기위한번호 - 인터넷을통하여전달되는정보들은목적지컴퓨터의주소 (32비트) 와 16비트의포트번호로구성 예 : 203.233.51.1:8088 8
1 네트워킹의개요와 java.net 패키지 1-5 java.net 패키지 java.net 패키지의클래스 434 page 9
2 인터넷주소와 URL 인터넷의주소 - IP(Internet Protocol) 주소 : 숫자로구성된주소 ( 예 : 134.23.33.200) - 도메인 (Domain) 이름 : 문자중심 ( 예 : www.ehan.co.kr) 편리함으로인하여대부분의사용자는도메인이름을사용 URL(Uniform Resource Locator) - 웹 (World Wide Web) 에서사용하는주소 형식 protocol://host:port/filename( 경로포함 ) 10
2 인터넷주소와 URL 2-1 InetAddress 클래스 InetAddress 클래스 - 인터넷주소에관한정보를가짐 - 주소와관련된다양한메소드를제공 11
2 인터넷주소와 URL 2-1 InetAddress 클래스 InetAddress 클래스의주요메소드 메소드 설명 boolean equals(inetaddress other) byte[] getaddress() String gethostaddress() String gethostname() static InetAddress getlocalhost() throws Unknow nhostexception static InetAddress getbyname(string hostname) throws UnknownHostException static InetAddress[] getallbyname (String hostna me) throws UnknownHostException 현객체가 other 객체와같은주소를가지면 true, 아니면 false 를반환 주소를나타내는 4 개의요소를가진바이트배열을반환 주소정보를나타내는문자열을반환 컴퓨터이름을나타내는문자열을반환 현재컴퓨터를나타내는 InetAddress 객체를반환 hostname 으로지정된컴퓨터를나타내는 InetAddress 객체를반환 hostname 으로지정된모든컴퓨터 ( 하나의도메인이름으로여러대의컴퓨터를사용하는경우 ) 를나타내는 InetAddress 객체들의배열을반환 12
2 인터넷주소와 URL 2-1 InetAddress 클래스 실습문제 AddressTest.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 import java.net.*; public class AddressTest { } public static void main(string args[]) throws UnknownHostException { } InetAddress Address = InetAddress.getLocalHost(); System.out.println (" 로컬컴퓨터의이름 : " + Address.getHostName()); System.out.println (" 로컬컴퓨터의 IP 주소 : " + Address.getHostAddress()); Address = InetAddress.getByName("java.sun.com"); System.out.println ("java.sun.com 컴퓨터의이름과 IP 주소 : " + Address); InetAddress all[] = InetAddress.getAllByName("www.daum.net"); for (int i=0; i < all.length; i++) System.out.println(all[i]); 현재컴퓨터의 InetAddress 객체생성 컴퓨터의이름추출 컴퓨터의 IP 주소추출 도메인이름으로 InetAddress 객체생성 www.daum.net 컴퓨터의주소를배열로생성 13
2 인터넷주소와 URL 2-1 InetAddress 클래스 프로그램설명 - 04 : 현재프로그램이실행중인컴퓨터의 InetAddress 객체를생성한다. - 05, 06 : 현재컴퓨터의이름을 gethostname() 메소드를이용하여추출한다. - 07, 08 : 현재켬퓨터의 IP 주소를 gethostaddress() 메소드를사용하여추출한다. - 09 : 도메인이름으로 InetAddress 객체를생성한다. 이렇게생성된객체를출력문에서출력하면도메인이름과 IP 주소가같이출력된다. - 12, 13 : 클래스메소드인 getallbyname() 은지정된주소를사용하는모든컴퓨터에대한InetAddress 객체의배열을반환하는메소드이다. 프로그램에서사용된 www.daum.net 은모두 10개의 IP 주소를가지고있다. 14
2 인터넷주소와 URL 2-1 InetAddress 클래스 15
2 인터넷주소와 URL 2-2 URL 클래스 URL 클래스 - Web 에서사용하는 URL 에관한정보를가짐 URL 클래스생성자 형식 URL(String protocol, String host, int port, String file) throws MalformedURLException URL(String protocol, String host, String file) throws MalformedURLException URL(String urlstring) throws MalformedURLException 16
2 인터넷주소와 URL 2-2 URL 클래스 URL 클래스의주요메소드 메소드 설명 String getfile() String gethost() String getport() String getprotocol() String toexternalform() URLConnection openconnection() throws IOException InputStream openstream() th rows IOException URL 의파일이름을반환 URL 의호스트이름을반환 URL 의포트번호를반환, 묵시적인 (default) 포트일경우 -1 을반환 URL 의프로토콜이름을반환 전체 URL 의문자열객체를반환 지정된 URL 과연결후 URLConnection 객체를반환 지정된 URL 로부터정보를읽어들이기위한객체를반환 17
2 인터넷주소와 URL 2-2 URL 클래스 실습예제 URLTest.java 01 02 03 04 05 06 07 08 09 10 11 12 13 import java.net.*; public class URLTest { public static void main(string args[]) throws MalformedURLException { URL kbs = new URL ("http://www.kbs.co.kr/aboutkbs/history.html"); System.out.println(" 프로토콜 : " + kbs.getprotocol()); System.out.println(" 포트 : " + kbs.getport()); System.out.println(" 호스트 : " + kbs.gethost()); System.out.println(" 파일 ( 경로포함 ): " + kbs.getfile()); System.out.println(" 전체 URL: " + kbs.toexternalform()); } } 특정 URL을지정하여객체생성프로토콜을출력 포트를출력 18
2 인터넷주소와 URL 2-2 URL 클래스 프로그램설명 - 04 : 특정주소를가진 URL 객체를생성한다. - 05~11 : URL 클래스에서제공되는다양한메소드를이용하여정보를출력한다. 19
2 인터넷주소와 URL 2-3 URLConnection 클래스 URLConnection 클래스 - 원격지자원의속성 (attribute) 을알아내기위한목적으로많이사용 - 상대컴퓨터와연결된상태에서원격지자원의속성을파악 - 원격지파일을읽어오는다양한메소드를제공 20
2 인터넷주소와 URL 2-3 URLConnection 클래스 URLConnection 클래스의주요메소드 메소드 설명 int getcontentlength() String getcontenttype() long getdate() long getexpiration() long getlastmodified() InputStream getinputstream() throwsioexception 해당문서의길이를바이트수로반환 해당문서의타입을반환 해당문서의생성날짜를반환 해당문서의파기날짜를반환 해당문서의마지막수정날짜를반환 원격지로부터정보를읽어들이기위한 InputStream 객체를생성하여반환 21
2 인터넷주소와 URL 2-3 URLConnection 클래스 실습예제 URLConnectionTest.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 import java.net.*; import java.io.*; public class URLConnectionTest { public static void main(string args[]) throws Exception { URL kbs = new URL ("http://www.kbs.co.kr/aboutkbs/history.html"); URLConnection kbscon = kbs.openconnection(); System.out.println (" 문서의타입 : " + kbscon.getcontenttype()); System.out.println("=== 문서의내용 ==="); InputStream input = kbscon.getinputstream(); int i = 500; int c; while (((c = input.read())!= -1) && (--i > 0)) { System.out.print((char) c); } input.close(); } } URL 객체를이용하여 URLConnection 객체생성 입력을위한객체생성 입력된내용을출력 22
2 인터넷주소와 URL 2-3 URLConnection 클래스 프로그램설명 - 05~07 : URL 클래스와 URLConnection 클래스를이용하여객체를생성한다. - 11 : URLConnection 클래스의 getinputstream() 메소드를이용하여 InputStream 객체 ( 문자스트림 ) 를생성한다. - 14 : 파일의끝또는 500바이트가될때까지파일로부터문자를읽어들여출력한다. 23
2 인터넷주소와 URL 2-3 URLConnection 클래스 24
3 TCP 소켓 ServerSocket 클래스 - 서버측에서실행되는응용프로그램작성을위해사용 ServerSocket 클래스생성자 형식 ServerSocket(int port) throws IOException) 25
3 TCP 소켓 ServerSocket 클래스의주요메소드 메소드 Socket accept() throws IOException void close() throws IOException 서버소켓을닫는다. 설명 클라이언트의요청을받아들인다음, Socket 클래스객체를반환 26
3 TCP 소켓 Socket 클래스 - 클라이언트와서버사이에실질적인정보교환을위해사용 Socket 클래스생성자 형식 Socket(String hostname, int port) throws UnknownHostException, IOException 27
3 TCP 소켓 TCP 소켓의작동 444 page 28
3 TCP 소켓 Socket 클래스의주요메소드 메소드 OutputStream getoutputstream( ) throws IOExce ption void close( ) throws IOException 소켓을닫는다. 설명 현재의소켓과관련된 OutputStream 객체를반환 InetAddress getinetaddress( ) InetAddress getlocaladdress( ) int getport( ) int getlocalport( ) InputStream getinputstream( ) throws IOExceptio n 현재소켓에연결된컴퓨터의주소를반환현재소켓을사용하고있는컴퓨터의주소를반환현재소켓에연결된컴퓨터의포트번호를반환현재소켓이사용하고있는포트번호를반환현재의소켓과관련된 InputStream 객체를반환 29
3 TCP 소켓 SeverSockek 과 Socket 클래스를이용한클라이언트 - 서버간의통신순서 - 서버측 서버소켓객체를 ServerSocket 클래스로부터생성한다음클라이언트의요청을기다린다 (accept() 메소드 ). 클라이언트의요청이발생되면요청을받아들여 Socket 객체를생성한다. ocket 객체를이용하여입출력을위한스트림을생성한다. 통신을수행한다. 소켓을닫는다. - 클라이언트측 연결을원하는서버의주소와포트번호로 Socket 객체를생성한다. Socket 객체를이용하여입출력을위한스트림을생성한다. 통신을수행한다. 소켓을닫는다. 30
3 TCP 소켓 실습문제 ServerSide.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 import java.io.*; import java.net.*; class ServerSide { public static void main(string args[]) throws Exception { int port = Integer.parseInt(args[0]); int times = Integer.parseInt(args[1]); } } ServerSocket ss = new ServerSocket(port); int i = 1; while( i <= times) { Socket s = ss.accept(); OutputStream os = s.getoutputstream(); } 지정된횟수만큼클라이언트요청처리 DataOutputStream dos = new DataOutputStream(os); for(int j = 1 ; j <= 10 ; j++) dos.writeint(j); 정수를출력 s.close(); ++i; 포트번호로 ServerSocket 객체생성 클라이언트요청을기다려 Socket 객체를생성 바이트스트림출력을위한객체를 Socket 객체로생성 기본자료형데이터출력을위한객체생성 31
3 TCP 소켓 프로그램설명 - 05 : 프로그램실행시지정된포트번호로 ServerSocket 객체를생성한다. - 09 : 반복문에서는두번째매개변수로지정된횟수만큼을반복하면서클라이언트요청을처리한다. - 10 : accept() 메소드는클라이언트요청이발생할때까지대기하는메소드이다. 지정된포트를통하여클라이언트의요청이발생되면이메소드는관련된 Socket 객체를생성한다. accept() 메소드에서요청이발생하여 Socket 객체가생성되었다는의미는포트를통하여클라이언트컴퓨터와연결이확립되었다는의미이다. - 11 : Socket 클래스의 getoutputstream() 메소드를이용하여 OutputStream 객체를생성한다. OutputStream 클래스는바이트단위의입출력을수행하는클래스이다. - 12 : 기본자료형데이터를출력하기위해 OutputStream 객체를이용하여 DataOutputStream 객체를생성한다. - 13 : 1~10까지의정수를출력한다. 실행결과 : 이프로그램을실행하면서버프로그램은대기상태가된다. 지정된횟수만큼의클라이언트요청을처리하면프로그램이종료된다. 32
3 TCP 소켓 실습문제 ClientSide.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 import java.io.*; import java.net.*; public class ClientSide { public static void main(string args[]) throws Exception { String server = args[0]; int port = Integer.parseInt(args[1]); } } Socket c = new Socket(server, port); InputStream is = c.getinputstream(); DataInputStream dis = new DataInputStream(is); for(int i=1 ; i <= 10 ; i++) { int j = dis.readint(); 정수를읽는다 System.out.println (" 서버로부터받은데이터 " + j + " 출력 "); } c.close(); 서버의주소와포트번호로 Socket 객체생성 정수를입력받기위한스트림객체생성 33
3 TCP 소켓 프로그램설명 - 07 : 프로그램실행시입력받은주소와포트번호를가지고 Socket 클래스의객체를생성한다. - 08~09 : 서버프로그램에서출력되는정보를입력받기위한입력스트림객체를생성한다. - 11 : 입력스트림으로부터 10개의정수를읽어들인다. 34
3 TCP 소켓 35
4 UDP 소켓 UDP(User Datagram Protocol) - TCP 소켓에비해신뢰성과안정성측면에서떨어짐 - 연결을설정하지않으므로네트워크에부담을주지않는다는장점 DatagramPacket 클래스 - 응용프로그램들이주고받을데이터와관련된클래스 - 실제데이터의전송은 DatagramSocket 클래스에의해이뤄짐 DatagramPacket 클래스생성자 형식 DatagramPacket(byte[] buffer, int size) DatagramPacket(byte[] buffer, int size, InetAddress ia, int port) 36
4 UDP 소켓 DatagramPacket 클래스의주요메소드 메소드 InetAddress getaddress() byte[] getdata() int getlength() int getport() void setaddress(inetaddress ia) void setdata(byte buffer[]) void setlength(int size) void setport(int pt) 설명 수신응용프로그램에서사용한다. 정보를보낸컴퓨터의주소를반환 패킷으로부터데이터를읽어들여바이트배열로반환 패킷의바이트수를반환 포트번호를반환 ia 를주소로설정 buffer 의내용을패킷의데이터로설정 패킷의크기를 size 로설정 포트번호를 pt 값으로설정 37
4 UDP 소켓 DatagramSocket 클래스 - 실제정보를주고받기위한기능을제공하는클래스 - 두개의생성자를제공 DatagramSocket 클래스생성자 형식 DatagramSocket() throws SocketException DatagramSocket(int port) throws SocketException 38
4 UDP 소켓 DatagramSocket 클래스의주요메소드 메소드 void receive(datagrampacket dgram) throws IOException void send(datagrampacket dgram) throws IOException void close() throws IOException 소켓을닫는다. 설명 현재의소켓으로부터정보를읽어 dgram 패킷에저장 현재의소켓을통하여 dgram 패킷을전송 39
4 UDP 소켓 실습예제 UDPReceiver.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 import java.net.*; public class UDPReceiver { public static void main(string args[]) throws Exception { int port = Integer.parseInt(args[0]); int times = Integer.parseInt(args[1]); DatagramSocket ds = new DatagramSocket(port); int i=1 ; while( i <= times) { byte buffer[] = new byte[30]; DatagramPacket dp = new DatagramPacket(buffer, buffer.length); ds.receive(dp); String str = new String(dp.getData()); System.out.println(" 수신된데이터 : " + str); ++i; } } } 바이트배열 (30 바이트크기 ) 생성 대기하다가편지가오면패킷에저장 특정포트를지정하여객체생성 패킷을생성 (30 바이트크기 ) 패킷에저장된데이터를추출 40
4 UDP 소켓 프로그램설명 - 06 : 컴퓨터에서편지를받을특정포트를지정하여 DatagramSocket 객체를생성한다. DatagramSocket 객체는연결을확립하지않는다. - 09 : 30바이트크기의바이트배열을생성한다. 이프로그램에서는편지의길이가 30 바이트이내라고가정하고있다. - 10, 11 : 30바이트크기의편지를저장할수있는 DatagramPacket 객체를생성한다. 패킷의크기만을가지고 DatagramPacket 객체를생성하는경우는편지를받는측에서사용하는형태이다. - 12 : receive() 메소드를수행하여지정된포트에메시지가도착하기를기다린다. 메시지가도착하면 receive() 메소드는도착된메시지를매개변수로받은패킷 (dp) 에저장한다. - 13 : getdata() 메소드를이용하여패킷으로부터내용을추출한다. 41
4 UDP 소켓 42
4 UDP 소켓 실습예제 UDPSender.java 01 02 03 04 05 06 07 08 09 10 11 12 13 import java.net.*; public class UDPSender { public static void main(string args[]) throws Exception { DatagramSocket ds = new DatagramSocket(); InetAddress ia = InetAddress.getByName(args[0]); int port = Integer.parseInt(args[1]); } } byte buffer[] = args[2].getbytes(); DatagramPacket dp = new DatagramPacket (buffer, buffer.length, ia, port); ds.send(dp); 패킷을보낸다 패킷객체생성 ( 주소, 포트, 내용 ) DatagramSocket 객체를생성 ( 주소지정안함 ) InetAddress 객체생성 ( 주소를가진객체 ) 세번째매개변수의값 ( 편지내용 ) 을바이트배열로변환 43
4 UDP 소켓 프로그램설명 - 04 : DatagramSocket 객체를생성한다. 객체생성시에주소를지정하지않았다. send() 메시지를이용하기위한객체생성이다. - 05~07 : 3개의매개변수를이용하여주소객체와포트번호, 편지의내용을변수에저장하였다. 주소는 InetAddress 객체로포트번호는정수로, 편지의내용에해당하는내용은바이트배열로작성하였다. - 08, 09 : DatagramPacket 객체를생성하였다. 앞에서마련된주소와포트, 편지내용을가지고패킷객체를생성하였다. - 11 : DatagramSocket 클래스의 send() 메소드를이용하여패킷객체를전송하였다. 패킷객체에있는주소와포트로네트워크를통하여찾아가게된다. 44
4 UDP 소켓 실행결과 - 위프로그램을한대의컴퓨터에서실행시키기위해다음과같이 3 개의매개변수를지정하 였다. 4 번을실행하였다. 45
학습정리 네트워킹의개요와 java.net 패키지 1 자바는네트워킹관련클래스들을 java.net 패키지로제공하고있다. 2 인터넷에서는 TCP/IP 프로토콜을표준프로토콜로사용하고있다. 3 통신방법에는연결성통신방법인 TCP 방법과비연결성통신방법인 UDP 방법이있다. 소켓은컴퓨터가네트워크에연결된끝점을의미한다. 4 포트는하나의컴퓨터에여러개존재하는논리적인개념이다. 서로다른포트를이용하여컴퓨터에서로다른일을시킬수있다. 인터넷주소와 URL 1 인터넷의주소에는컴퓨터상호간에사용하는숫자로구성된 IP(Internet Protocol) 주소가있고 ( 예 : 134.23.33.200), 우리가많이사용하는문자중심의도메인 (Domain) 이름 ( 예 : www.hollywood.com) 이있다. 2 InetAddress 클래스는인터넷의주소정보를가진클래스이다. 3 URL 클래스와 URLConnection 클래스를이용하여인터넷으로부터정보를얻어낼수있다. 46
학습정리 TCP 소켓 1 자바는클라이언트-서버응용프로그램작성을위한 ServerSocket 클래스와 Socket 클래스를제공하고있다. 2 TCP 소켓은상호연결된상태에서신뢰성있는통신을제공한다. 3 ServerSocket 클래스는서버측에서사용되며실제통신을수행하지않는다. 실제통신은 Socket 객체에의해이루어진다. UDP 소켓 1 UDP(User Datagram Protocol) 는 TCP 소켓에비해신뢰성과안정성측면에서뒤지지만, 연결을설정하지않으므로네트워크에부담을주지않는다는장점이있다. 2 자바는 UDP를지원하기위해 DatagramPacket, DatagramSocket 클래스를제공하고있다. 3 DatagramPacket 클래스는응용프로그램들이주고받을데이터와관련된클래스이고, 실제데이터의전송은 DatagramSocket 클래스에의해이루어진다. 47
48