Network Programming(1)
Network의 기본 사항(1) 통신의 3대 요소 TCP (Transmission Control Protocol) 가장 많이 사용하는 통신 방식. 전화 통신과 유사 양방향의 stream 통신을 제공하는, 신뢰성 있는 연결 지향형 통신 방식 양방향 : client와 server가 동시에 존재해야만 통신이 이루어진다는 의미 신뢰성 : 양단에서 data를 주고 받을 때 data의 유실없이 정확히 주고 받을 수 있다는 의미. 문제가 있으면 문제가 있다고 data를 전송하는 쪽에 패킷을 보낸다. 연결 지향형(connection oriented) : client와 server가 연결이 이루어져야 통신이 가능하다는 의미
Network의 기본 사항(2) UDP (User Datagram Protocol) 비신뢰적, 비연결지향형 통신 우리가 TV를 시청하는 방식과 유사 비신뢰적: 통신 중에 data가 유실될 수 있다는 의미. TV를 볼 때 방송국 사정으로 잡신호가 들어가 화면이 고르지 않을 때가 있다. 그러나, 너무 오랫동안 그렇지 않다면 TV를 보는데 지장이 없다. 즉, data가 조금 유실되더라도 큰 문제가 되는 것은 아니다라는 말이다. 비연결지향형 : client와 server가 연결이 되지 않은 상태에서도 data를 보낼 수 있음. 우리집 TV가 고장났다고 해서 방송국에서 방송을 중단하는 것은 아니다. 방송국에서는 무조건 data를 전송하고 data를 받고 안받고는 별도의 문제이다. 우리가 TV를 볼 때 방송국 사정으로 잡신호가 들어가 화면이 조금 흔들리거나 "지지지지"하는 소리가 날 수 있다. 즉, TV에 정확한 data가 전달되지 못한 경우이다. 그러나 TV를 보는데는 전혀 지장없다. 물론 너무 오랫동안 그렇다면 문제가 되겠지만... 즉, data가 조금 유실되더라도 큰 문제가 되는 것은 아니다라는 말이다. 생각해 보라. 우리집 TV가 고장났다고 해서 MBC 9시 News 방송이 중단되는 것은 아니다. 우리집 TV가 고장이 났건 안났건 방송국에서는 무조건 data를 전송한다. data를 받고 안받고는 나중의(별도의) 문제인 것이다. 여러 면에서 UDP 통신과 TCP 통신은 매우 다르다.
Socket(1) Socket이란? 서버와 클라이언트가 서로 특정한 규약을 사용하여 데이터를 전송하기 위한 논리적인 연결 방식 여러 통신 programming 방식 중의 하나 java에서 사용되는 TCP나 UDP 통신은 모두 socket을 이용한 통신이다. 이 socket이라는 것을 이용해서 양단(server, client)이 서로 통신한다
Socket(2) output stream에 data를 write했다면(ⓐ부분) 그 data는 server의 socket으로 이동하게 된다.(ⓑ부분) 이미 socket은 client의 socket과 연결되어 있기 때문에 server socket으로 온 data는 자동적으로 network을 타고 client의 socket으로(ⓒ부분) 넘어간다. client에서는 자신의 socket에서 input stream을 획득한 후, 그 input stream으로부터 data를 읽어 들인다. (ⓓ부분)
TCP network program(1) Server에 접속하기 위해 필요한 것 IP address, port number TCP/IP 프로토콜은 주어진 호스트 컴퓨터 내에서 여러 곳의 목적지로 데이터를 전송하기 위하여 서로 다른 포트를 사용합니다. 하나의 호스트는 여러 개의 어플리케이션을 동시에 접속할 수 있습니다. 한 클라이언트 컴퓨터가 특정 어플리케이션을 사용하기 위하여 호스트에 연결 할 경우, 그 어플리케이션에 접속할 포트가 사용됩니다. Port number : 한 server가 가질 수 있는 port 번호는 일반적으로 0 ~ 65535 . 그 중 0 ~ 1024 까지는 reserved(예약된) port이다. 따라서 0 ~ 1024까지는 System용으로 사용되기 때문에 일반적으로 programmer가 사용하지 않는다.
TCP network program(2) 잘 알려진 port number의 예 20 - FTP traffic (데이터) 23 - Telnet traffic 25 - SMTP (Simple Mail Transfer Protocol) traffic 80 - HTTP traffic 109 - POP2 (Post Office Protocol) traffic 110 - POP3 traffic 137 - NetBIOS 이름 서버 traffic 138 - NetBIOS 데이터그램 traffic 139 - NetBIOS 세션 traffic 161 - SNMP traffic 2049 - NFSD traffic 원래는 web browser에서 http://borame.cs.pusan.ac.kr에 접속하려면, http:// borame.cs.pusan.ac.kr:80을 써야 하지만, http는 port number가 80 default로 되어 있기 때문에, 포트 번호를 쓰지 않아도 된다. SMTP(Simple Mail Transfer Protocol) 란? 보내는 메일서버, Outgoing Mail Server 라고도 하며 어떠한 곳에 메일을 보낼때 사용하는 프로토콜입니다.네스케이프 메신저나 아웃룩 익스프레스 같은 각종 메일 클라이언트 프로그램을 이용하여 누군가 에게 e-mail을 보내면 그 메일은 SMTP 서버(보내는 메일 서버, Outgoing mailserver)로 일단 전송되며 이 SMTP 서버에서 "sendmail" 이라는 메일 서버 프로그램이 작동하여 해당 메일 주소로 메일을 보내게 되는 것입니다. 일반적으로 웹호스팅업체에서는 스팸메일 방지로 보내는 메일서버 (SMTP)를 지원하지 않고 있습니다. 마찬가지 알림넷에서도 SMTP를 지원하지 않고 있으니 ISP(인터넷 서비스 제공)업체를 이용하고 계시는 고객, 현재 모뎀이나 전용선을 통해 하이텔이나 데이콤,신비로등의 ISP업체를 통하여 인터넷을 이용하고 계시는 고객은 해당 SMTP(보내는 메일서버)를 입력하면 됩니다. POP(Post Office Protocol) 은? 메일 서버에 저장되어 있는 메일을 아웃룩 익스프레스나 네스케이프 메신저와 같은 메일 클라이언트 프로그램을 이용하여 자신의 컴퓨터로 가져오는 역할을 하는 프로토콜입니다. (받는메일서버)알림넷에서 발급받은 메일은 POP를 지원 하므로 받는 메일서버는 자신의 도메인을 입력 합니다.
TCP network program(3) 여러 port number를 쓰는 이유 한 개의 IP Address를 동시에 여러 명이 접속할 수 있게 해 준다
TCP network program(4) - server import java.net.*; import java.io.*; public class MyServer { public static void main(String args[]) throws Exception { ServerSocket serverSocket = null; Socket newSocket = null; String reply = "저의 이름은 Server입니다."; OutputStream os; DataOutputStream dos; serverSocket = new ServerSocket(1111); //server가 1111번 port를 열고 client의 접속을 기다리겠다 while (true) { newSocket = serverSocket.accept(); // client를 기다림. demon System.out.println("누군가가 접속했습니다."); os = newSocket.getOutputStream(); dos = new DataOutputStream (os); dos.writeUTF(reply); // UTF는 유니코드 표준 변환 포맷(Unicode Standard Transformation Format) dos.close(); newSocket.close(); // server는 client가 접속한 socket을 일방적으로 끊어버렸다. } } }
TCP network program(5) 6 line과 7 line에서도 socket을 선언하고, 이 socket들의 이름이 다른 이유는? server라는 것은 동시에 여러 client를 수용할 수 있어야 한다. 따라서 위의 그림처럼 Server가 여러 client의 접속을 처리할 수 있도록 ServerSocket이라는 것을 둔다. 이것은 일종의 listener역할을 한다 ServerSocket과 client의 Socket과 접속이 이루어지면 ServerSocket은 새로운 일반 Socket을 하나 생성하여 client의 요청을 그 쪽으로 돌린다(ⓑ 부분). 그리고 나서 ServerSocket은 다른 client의 요청을 계속 기다린다. 이런 방식을 이용하기 때문에 server에서는 여러 client의 요청을 처리할 수 있는 것이다.(demon)
TCP network program(6) - client import java.net.*; import java.io.*; public class MyClient { public static void main(String args[]) throws IOException { Socket newSocket; InputStream is; DataInputStream dis; String receive = null; newSocket = new Socket(“***IP address***", 1111); is = newSocket.getInputStream(); dis = new DataInputStream(is); receive = new String (dis.readUTF()); System.out.println(receive); dis.close(); newSocket.close(); } }