java로 서버를 구축하진 않고 tcp/ip나 윈도우쪽을 이용해서 구축한다.
C/S 구조 (클라이언트/서버)
가장일반적인 구조
동기화가 중요하다.
채팅, 파일전송, 등등...
프록시 서버(중계서버)
클라이언트와 서버 사이에 프록시서버가 있다.
OSI 7Layer
1. 응용계층 - 작성한걸 구현
2. 표현계층 - 응용계층에서 보낸 데이터를 다른시스템에서 읽을수 있게 지원
3. 세션계층 - 접속된 접속자 정보설정, 유지
4. 전송계층 - 네트워크상에서 신뢰성 있는 데이터의 전송을 보장, 정확한 프로세스에게 전달
흐름제어 - 확인응답을 리턴
5. 네트워크계층 - 라우팅과 네트워크 어드레싱을 담당한다.
6. 데이터링크 계층 - 실질적인 물리적장비와 데이터의 연결을 제공하는 역할.
- 물리적 링크를 통한 신뢰성 있는 데이터 전송을 제공
(MAC Address - 통신하기위한 단말기에는 고유한 번호가 존재한다. IP보다 더 따지게 된다. LAN 카드에 있는 고유한 번호이다. )
7. 물리 계층 - 물리적 매체를 통해 bit
연결지향 통신 - 채팅, 카톡 서로연결을 하고 서로의 반응을 바로바로 확인한다.
비연결지향 통신 - 게임,방송, 문자 등.. 서로의 반응을 살피지않고 뿌린다.
TCP - 연결 지향적이고 데이터전송을 보장하는 프로토콜, 상대측까지 제대로 전달되었는지 acknowlegment를 주고 받음으로써 점검
수신윈도우 - 수신측에서 가용한 버퍼 공간이 얼마나 되는지를 송신자에게 알려주는데 사용한다.
UDP - 제대로 전달되었는지 확인하지는 않는 특성.
- 전송되는 순서에 상관없이 가장 빠른 전송을 지향한다.
- 전송되는 데이터는 손실 될 수도 있고, 에러가 발생할 수도 있다.
- 전송되는 데이터의 경계가 존재한다.
- 한번에 전송되는 데이터의 크기는 제한된다.
IP 주소
- 32비트 4바이트로 구성 -> IPv4
- 0~255 사이의 숫자 지정
- 10진수로 표기하며, dot로 구분
- 127.0.0.1은 자신의 컴퓨터를 뜻함.
- 192.168.x.x는 사설 IP를 뜻함.
Ping
- IP 수준에서 연결성을 확인할 수 있는 도구
- ICMP 에코 요청 메시지를 전송
- 사용할 패킷 크기, 보낼 패킷수, 사용된 경로 기록 여부, 사용할 TTL 값, don't fragment 플래그 설정 여부를 지정할 수 있다.
- 서버의 상태 여부
Socket Type
-소켓의 형태를 지정한다.
-소켓을 통한 데이터 전송의 의미를 결정
(java 에서는 sock_raw타입을 지원하지 않는다.)
Sock_STREAM유형 (TCP)
- 스트림방식의 소켓 생성
- UNIX의 파이프개념과 동일
- 연결형(스트림)서비스 선택 시 사용
Sock_DGRAM유형 (UDP)
- 데이터그램방식의 소켓 생성
- 개별저긍로 주소가 쓰여진 패킷 전송시 사용
InetAddress 클래스
- 도메인주소를 IP주소로 변환
- IP주소를 도메인으로 변환
nslookup 명령어
클라이언트 접속 대기
- TCP 서버 소켓 생성
-accept 메소드를 호출하여 클라이언트 접속대기
-서버에서 10001번 포트로 클라이언트
클라이언트 접속하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | package inetAddress; import java.io.IOException; import java.net.*; public class TCPServer { public static void main(String[] args) { // 핸드폰 개통 // 포트 : 실제 통신을 하기 위해 사용되는 번호 ServerSocket serversocket = null; try { //1) 소켓생성 --> 클라이언트와 통신 할 수 있는 소켓 serversocket = new ServerSocket(10001); System.out.println("=== 서버 시작 ==="); //accept메서드 : 대기함수 --> blocking // 클라이언트로 부터의 접속을 기다린다. Socket clientsocket = serversocket.accept(); //return을 안한다. // 클라이언트가 접속하면 return한다. InetAddress addr = clientsocket.getInetAddress(); // 접속한 클라이언트의 주소 System.out.println(addr.getHostAddress()+"님이 접속!!!"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // throws는 메서드를 호출한 곳에 던진다. main안에서는 try를 사용해준다. } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class TcpEchoServer { public static void main(String[] args) { ServerSocket serversocket = null; // static이라 new가 필요없다. try { //1) 소켓생성 --> 클라이언트와 통신 할 수 있는 소켓 serversocket = new ServerSocket(10001); System.out.println("=== 서버 시작 ==="); //accept메서드 : 대기함수 --> blocking // 클라이언트로 부터의 접속을 기다린다. Socket clientsocket = serversocket.accept(); //return을 안한다. // 클라이언트가 접속하면 return한다. InetAddress addr = clientsocket.getInetAddress(); // 접속한 클라이언트의 주소 System.out.println(addr.getHostAddress()+"님이 접속!!!"); //에코 서버 : 전달받은 테이터를 그대로 되돌려 주는 형태의 서버 // java stream --> 흐름, 줄기 InputStream input = clientsocket.getInputStream(); // 입력통로 OutputStream out = clientsocket.getOutputStream(); // 출력통로 // 출력 PrintWriter pw = new PrintWriter(new OutputStreamWriter(out)); // //입력 BufferedReader br = new BufferedReader(new InputStreamReader(input)); String msg = null; while(true){ if((msg = br.readLine())==null) break; System.out.println(msg); pw.println(msg); pw.flush(); // 버퍼비우기 } pw.close(); br.close(); clientsocket.close(); serversocket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
'(Before)BitSchool' 카테고리의 다른 글
2014/05/23 java network - 쓰레드, Thread (0) | 2014.05.23 |
---|---|
2014/05/22 TCP/IP, 유틸리티API (0) | 2014.05.22 |
2014/05/20 오라클 - PL/SQL, 프로시저, 함수생성 (1) | 2014.05.20 |
2014/05/19 Oracle - Aggregate Function, Group by, Having, Subquery (0) | 2014.05.19 |
2014/5/16 - 오라클 - Function, join, create, constraint (0) | 2014.05.16 |