### : 목차 구분 기호
--- : 목차 내에 항목 구분 기호

목차
1. 이론 및 정보
2. 설정 및 그 밖에
3. 소스코드
4. 과제

###################################
1. 이론 및 정보
-----------------------------------
Network
Net 연결되어 있어서 
Work 작업을 하는 상태
최소한 두개 이상의 장치가 필요


서버 - 정보를 주는 , 서비스를 제공해주는 
클라이언트 - 정보를 받는 , 서비스를 받는 
서버,클라이언트 -> 2tier
중간에 끼어서 두개 이상이 되면서 3tier, n tier
중간에 끼이는 것들이 middle ware

서버와 클라이언트 관계가 계속 바뀜 => p2p peer to peer

서버, 클라이언트 관계가 고정되어서 그대로 진행되면 
두개를 묶어서 MS에서는 Domain이라고 부름

중앙집중 방식 - 서버에 모든 정보가 집중되고 여러 단말기가 연결됨
중앙 집중에서 단말기가 점점 성능이 좋아지면서
클라이언트에 서버의 기능을 분산 시켜서 서버의 부담을 줄이는 방식을 C/S 프로그램
Client/Server? 프로그램?

1. 프로토콜 - 약속
TCP/IP
http
ftp
.
.
IPX/SPX -> Novell 이란 회사가 있음 -> Netware라는 운영체제를 만듬, NOS보다 유명했음
여기서 회사에서 만든 프로토콜 IPX/SPX를 씀, 로컬에서 빨랐음

MS 
 - DOS - 일반사용자를 위한
 - NOS - 네트워크 운영체제 - NT 4.1

프로토콜은 약속이다 그래서 서버와 클라이언트가 서로 같은
약속을 사용해서 통신을 해야한다 서로 다른 약속을 가지고는 절대 통신 불가능

hyper text transfer protocol

SMTP - send mail transfer protocol
POP3 - 받을때, 서버의 메일을 통째로 가져옴
IMAP - 받을때, 서버의 메일 중 선택해서 받아오는 방식

2. OSI 7계층 -> 인터넷 계층 (TCP/IP 4계층)
3. 전송계층 -> 대부분의 언어가 이 부분을 개발하도록 지원함 -> TCP, UDP가 대표적
TCP 연결 지향적 - 안정적 미리 연결함
UDP 비연결 지향적 - 속도빠름 미리 연결안함 , BroadCast, 동영상, 멀티미디어, 패킷의 크기가 커질 수 밖에 없음

패킷 - 가장 작은 네트워크에서의 단위, 조각

4. ip, port, socket
ip - pc까지만 찾아감
- VirtualIP - 로컬
- RealIp - static, dynamic(DHCP)

port - 프로그램을 찾아감, 네트워크 프로그램들이 가지고 있는 연결 문

C:\Windows\System32\drivers\etc\services
를 확인

socket - ip, port, 데이터 세가지를 싸 잡아서 데이터를 주고 받을 수 있게 해주는 것

DNS Server

ipconfig
nslooup
ping
netstat -a

개발할때 꼭 필요한 IP - Loopback IP
127.0.0.1 

naver.com:80 이 원래 주소인데
80번이 기본 값이라서 안씀
http의 약속이 되어 있음

http://www.naver.com:80/index.html

네트워크 프로그래밍
- 소켓 프로그래밍 : JAVA를 사용 - 일반적으로 서버, 클라이언트 두개를 만들어야함
- 웹 프로그래밍 : JSP를 사용 - 서버만 만들면 됨, 클라이언트는 전부 프로그램을 가지고 있음

-----------------------------------
ServerSocket
Socket
은 TCP

DatagramPacket
DatagramSocket
은 UDP

서버에서만 포트가 중첩되지 않게 설정하고
클라이언트는 임의로 생성되는 포트를 사용하면 된다



----------------------------------- 
----------------------------------- 
###################################
2. 설정 및 그 밖에
-----------------------------------
----------------------------------- 
----------------------------------- 
----------------------------------- 
###################################
3. 소스코드
-----------------------------------
3-1
/day18/src/network/InetAddressTest.java
 
package network;
 
import java.net.InetAddress;
import java.net.UnknownHostException;
 
public class InetAddressTest {
     public static void main(String[] args) throws UnknownHostException {
          String name = "www.naver.com";
          System.out.println(InetAddress.getByName(name).getHostAddress());
          InetAddress[] addr = InetAddress.getAllByName(name);
          for (int i = 0; i < addr.length; i++) {
               System.out.println(addr[i].getHostAddress());
          }
          System.out.println(InetAddress.getLocalHost().getHostAddress());
          System.out.println(InetAddress.getLoopbackAddress().getHostAddress());
     }
}
----------------------------------- 
3-2
/day18/src/network/URLTest.java
 
package network;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
 
public class URLTest {
     public static void main(String[] args) throws IOException {
          URL myUrl;
          //URLConnection 클래스를 사용
          String name = "http://www.naver.com:80/";
     
          myUrl = new URL(name);
          BufferedReader br = new BufferedReader(new InputStreamReader(myUrl.openStream(), "utf-8"));
          String str;
          while((str = br.readLine()) != null){
               System.out.println(str);
          }
     }
}
----------------------------------- 
3-3
/day18/src/network/TcpClient1.java
 
package network;
 
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
 
public class TcpClient1 {
     private static final int PORT = 9999;
     private Socket client;
 
     public static void main(String[] args) throws UnknownHostException,
               IOException {
          // TODO TCP 방식의 클라이언트 프로그램
          String serverName = "127.0.0.1";
          String serverName1 = "192.168.0.11";
          TcpClient1 tc = new TcpClient1();
          System.out.print("하고싶은 말 :");
          tc.client = new Socket(serverName, PORT);
          Scanner scan = new Scanner(System.in);
          String msg = null;
          OutputStream out = null;
          DataOutputStream dos = null;
          InputStream is = null;
          DataInputStream dis = null;
          while (((msg = scan.next()) != null)) {
               if(msg.equals("stop"))
                    break;
               System.out.print("하고싶은 말 :");
               out = tc.client.getOutputStream();
               dos = new DataOutputStream(out);
               dos.writeUTF(msg);               
          }
          dos.close();
          out.close();
          tc.client.close();
     }
}
----------------------------------- 
3-4
/day18/src/network/TcpServer1.java
 
package network;
 
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
 
public class TcpServer1 {
     private static final int PORT = 9999;
     private ServerSocket server;
     private Socket client;
 
     public TcpServer1() {
          try {
               // listen 상태에 들어옴
               server = new ServerSocket(PORT);
               while (true) {
                    client = server.accept();
                    InputStream is = client.getInputStream();
                    DataInputStream dis = new DataInputStream(is);
                    System.out.println("손님 오셨습니다. : " 
                              + client.getInetAddress()
                              + " : " + client.getPort()
                              + " : 메세지 -> "
                              +new String(dis.readUTF()));
                    OutputStream os = client.getOutputStream();
                    DataOutputStream dos = new DataOutputStream(os);
                    dos.writeUTF("공부 열심히 하시오");
                    client.close();
               }
          } catch (IOException e) {
               e.printStackTrace();
          }
     }
 
     public static void main(String[] args) {
          // TODO TCP 방식의 서버용 프로그램
          new TcpServer1();
     }
}
----------------------------------- 
3-
/day18/src/network/TcpServer2.java
 
package network;
 
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
 
public class TcpServer2 {
     private static final int PORT = 9999;
     private ServerSocket server;
     private Socket client;
     private boolean LISTEN = true;
 
     public TcpServer2() {
          try {
               server = new ServerSocket(PORT);
               System.out.println("서버 실행 중....");
          } catch (IOException e) {
               System.out.println("서버 소켓 생성 실패 : " + e);
          }
          working();
     }
 
     private void working() {
          while (LISTEN) {
               try {
                    client = server.accept();
                    new Chatter(client);
               } catch (Exception e) {
                    try {
                         server.close();
                    } catch (Exception e1) {
                         e.printStackTrace();
                    }
                    return;
               }
          }
     }
 
     public boolean isLISTEN() {
          return LISTEN;
     }
 
     public void setLISTEN(boolean lISTEN) {
          LISTEN = lISTEN;
     }
 
     public static void main(String[] args) {
          // TODO TCP 방식의 서버용 프로그램 개선 버전
          new TcpServer2();
     }
}
-----------------------------------  
3-6
/day18/src/network/Chatter.java  
 
package network;
 
import java.io.DataInputStream;
import java.io.InputStream;
import java.net.Socket;
 
public class Chatter extends Thread {
     Socket client;
     InputStream is;
     DataInputStream dis;
 
     public Chatter(Socket client) {
          this.client = client;
          System.out.println("손님 오셨습니다. : " 
                    + client.getInetAddress() 
                    + " : "
                    + client.getPort());
          start();
     }
 
     @Override
     public void run() {
          while(true){
               try {
                    is = client.getInputStream();
                    dis = new DataInputStream(is);
                    System.out.println("["+client.getInetAddress()+"]가 보낸 메세지 : "+dis.readUTF());
               } catch (Exception e) {
                    try {
                         is.close();
                         dis.close();
                         client.close();
                    } catch (Exception e1) {
                         System.out.println("["+client.getInetAddress()+"] 닫을 때 에러 : " + e1.getStackTrace());
                    }
                    System.out.println("client 메세지 처리 에러 : " + e.getStackTrace());
                    return;
               }
          }
     }
}

-----------------------------------   

###################################
4. 과제
-----------------------------------
4-1
----------------------------------- 
4-2
----------------------------------- 
4-3
----------------------------------- 
4-4
----------------------------------- 
4-5
###################################
5. 과제 해결
-----------------------------------
5-1
-----------------------------------
5-2
----------------------------------- 
5-3
-----------------------------------
5-4
###################################
6. 기타
----------------------------------- 
----------------------------------- 


'OpenFrameWork' 카테고리의 다른 글

오픈프레임워크_Day21  (0) 2015.04.20
오픈프레임워크_Day20  (0) 2015.04.20
오픈프레임워크_Day18  (0) 2015.04.20
오픈프레임워크_Day17  (0) 2015.04.20
오픈프레임워크_Day16  (0) 2015.04.20
,