### : 목차 구분 기호
--- : 목차 내에 항목 구분 기호
목차
1. 이론 및 정보
2. 설정 및 그 밖에
3. 소스코드
4. 과제
###################################
1. 이론 및 정보
-----------------------------------
--- : 목차 내에 항목 구분 기호
목차
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. 설정 및 그 밖에
-----------------------------------
###################################
4. 과제
-----------------------------------
###################################
2. 설정 및 그 밖에
-----------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
###################################
3. 소스코드
-----------------------------------
###################################
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-5 /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. 과제 해결
-----------------------------------
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 |