본문 바로가기

Java/java 기초

네트워크 공부

서버구축하기 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class mainClass {
	public static void main(String[] args) {
		/*
		 * TCP: Transmission Control Protocol
		 * 			전송		제어	규약
		 * 
		 * Server: TCP, DB, Web(tomcat) + Web Socket
		 * 
		 * 종단 시스템: host
		 * 			네트워크 상에서 더 연장되지 않는 기기
		 * 			PC, Smart Phone, PDA, Scanner, Printer
		 * 	
		 * Router: hardware		 
		 *			host 간에 상호 데이터를 교환할 수 있도록 하는 장비
		 * inter Network : 포괄적인 통신
		 * 
		 * TCP - 통신 제어 규약				동기 통신
		 * UDP - User Datagram Protocol 	비동기 통신
		 * 
		 * 7 Layer
		 * 1계층 - Physical layer		물리 계층
		 * 2계층 - Data Link layer		주소를 헤더에 첨부 
		 * 3계층 - Network layer		네트워크 IP -> Address
		 * 4계층 - Transport layer		네트워크 Port
		 * 5계층 - Session layer		세션 부분을 동기화
		 * 6계층 - Presentation layer	보안, 압축, 확장
		 * 7계층 - Application layer	프로그램(소프트웨어)
		 * 
		 * TCP
		 * 신사적인 Protocol
		 * 전화 -> 상대방 -> 연결 - > 통신 start
		 * 동기화 : 보낸다 -> 받는다 	처리 순서가 일치해야 한다. 
		 * 데이터의 경계가 없다. 
		 * 1 대 1 통신만 가능하다.	
		 * 채팅, Object(class)
		 * 
		 * UDP
		 * 비 연결형 Protocol
		 * 편지, 지상파 방송
		 * 데이터의 경계가 있다.
		 * 1 대 1 통신 (unicast)
		 * 1 대 다 통신 (broadcast)
		 * 다 대 다 통신 (multicast)
		 * 
		 * Packet(묶음)
		 * 제어정보, 데이터등이 결합된 형태로 전송이 되는 실제의 데이터
		 * IP, Port, String: 	1001-홍길동-서울시
		 * 			 Object: 	Dto
		 * 
		 * IP : Internet Protocol = 주소
		 * 
		 * IPv4 : xxx.xxx.xxx.xxx	0 ~ 255
		 * IPv6 : xxx.xxx.xxx.xxx.xxx.xxx
		 * 
		 * 127.0.0.1	-> 자기 자신의 IP
		 * 
		 * 
		 * 0 ~ 1024까지는 시스템의 Port Number
		 * 
		 * Port Number
		 * 프로그램당 프로세스가 1개이상일 수있으나 기본으로 1개
		 * IP 주소는 Internet에 존재하는 host(PC)를 식별할 수 있으나
		 * 촤종 주체인 프로세스(프로그램)를 식별 하지 못하기 떄문에
		 * 프로세스를 구별하기 위해서 지정된 수치 ( 0 ~ 1024 : sys)외의 숫자를 지정한다. 
		 * 
		 * Socket	--> 유닉스(file)
		 * 통신의 주체. 통신을 하기 위한 Object
		 * IP, TCP/UDP 
		 * 통신을 하기위해선 소켓을 알아야한다. 소켓은 IP주소를 가지고있다.
		 * 
		 * 통신 순서 
		 * 	 	Server									Client
		 * 1.   Socket버전 확인							1. Socket버전 확인
		 * 2.	Binding -> IP, Port
		 * 3.	Listen 
		 * 4.	Accept(Client 정보)	  <-----------		2. Connect
		 * 					접속 성공!
		 * 		1) recv(read)		  <-----------	send(write)
		 * 		2) send(write)		  ------------>	recv(read)
		 * 
		 * DNS(Domain Name System) Server
		 * 		IP -> String
		 * 
		 */	
		Socket clientSocket = null;
		
		
		try {
			
			//문지기 소켓 
			ServerSocket serverSocket = new ServerSocket(9000);
			// 자동으로 자신의 IP를 설정, binding, listen 포함
//			while(true) {
				System.out.println("접속 대기중...");
				clientSocket = serverSocket.accept();
			//	담당자 소켓 
				//어떤 클라이언트의 IP
				System.out.println("client IP:" + clientSocket.getInetAddress() 
								 + "Port:" + clientSocket.getPort());
				
//			}
//			clientSocket.close();
//			serverSocket.close();
			
				while(true) {
					//1. recv
					//문지기 소켓이 아니다
					BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
					
					String str = reader.readLine();
					
					
					System.out.println("클라이언트로 부터 받은 메시지 " + str);
					
//					str = "반갑습니다";
					
					//2. send
					PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
					writer.println(str); //실질적으로 전송
					writer.flush(); // 중요 끝맺음
				}
				
				
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		
	}
}

 

클라이언트 부분 

 

package main;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.Scanner;

public class mainClass {

	public static void main(String[] args) {
		/*
		 * 1. 접속을 해야할 Server IP(주소)를 설정 -Socket 2. Socket 생성 3. 접속 connect
		 * 
		 * 4. packet 전송
		 */

		InetSocketAddress sockAddr = new InetSocketAddress("192.168.2.5", 9000);
//		InetSocketAddress sockAddr = new InetSocketAddress("127.0.0.1", 9000);
		// 클라이언트의 소켓은 하나만 있으면된다
		Socket socket = new Socket();
		Scanner scanner = new Scanner(System.in);

		// Server 접속
		try {
			socket.connect(sockAddr, 10000);
			//float k = 3.14f;
			//			double num = 3.14;
			//			byte su1 = 126;
			//			byte su2 = -12;
			//			(byte) res = su1 + sue2;
			InetAddress inetAddr;
			if ((inetAddr = socket.getInetAddress()) != null) {
				System.out.println("서버 연결 성공 : " + inetAddr);
			} else {
				System.out.println("서버 연결 실패");
			}
			
			while(true) {
				System.out.println("전송 문자열");
				String str = scanner.next();
				
				//1. send
				PrintWriter writer = new PrintWriter(socket.getOutputStream());
				writer.println(str); //실질적으로 전송
				writer.flush(); // 중요 끝맺음
								
				//2. recv
				BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				
				str = reader.readLine();
				System.out.println("서버로 부터 받은 메시지 " + str);
				
			}
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

 

 

 

 

'Java > java 기초' 카테고리의 다른 글

쓰레드 공부하기  (0) 2019.12.10
awt 로 채팅 프로그램 구현하기  (0) 2019.12.10
awt - 이미지 올리기  (0) 2019.12.06
awt로 가위바위보 프로그램 만들기  (0) 2019.12.05
awt - 응용  (0) 2019.12.05