Channel(채널)

< ChannelServer – (default package) – ServerChannel >

< ChannelServer – (default package) – ClientChannel >

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;

public class ServerChannel {
	
	public static void main(String[] args) {
		
		ServerSocketChannel channel = null;
		
		
		try {
			
			channel = ServerSocketChannel.open();
			
			channel.configureBlocking(true); // Blocking 방식  <=  Blocking 방식이 기본 디폴트이기 때문에, 왼쪽의 구문을 굳이 작성하지 않아도 된다  
			
			channel.bind(new InetSocketAddress("localhost", 9999)); 
			
			while(true) {
				
				System.out.println("접속 대기");
				SocketChannel sc = channel.accept(); // 접속 대기
				
				InetSocketAddress isa = (InetSocketAddress) sc.getRemoteAddress();
				System.out.println("연결 : "+isa.getHostName());
				
				
				////////////////////////////////////////////////////////////////////
				ByteBuffer buffer = null; // [ Import 'ByteBuffer' (java.nio) ]
				buffer = ByteBuffer.allocate(100);
				int readCount = sc.read(buffer);
				buffer.flip();
				
				Charset charset = Charset.forName("utf-8"); // Charset -> 문자 인코딩 방법
				
				
				// ByteBuffer에 저장되어 있는 내용을 읽어오기
				String message = charset.decode(buffer).toString(); // 수신 : 문자열로 복호화
				System.out.println("Client로부터 받은 메세지 : "+message);
				////////////////////////////////////////////////////////////////////
				
				
				buffer = charset.encode("저는 Server입니다. 메세지 잘 받았어요"); // 송신 : 암호화
				sc.write(buffer);
				System.out.println("보내기 완료");
				
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	
	}

}
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;

public class ClientChannel {
	
	public static void main(String[] args) {
		
		SocketChannel sc = null;
		
		try {
			sc = SocketChannel.open();
			sc.configureBlocking(true); // Blocking 방식 (왼쪽의 구문을 작성하지 않거나 주석 처리해도, Blocking 방식이 된다  <-  Blocking 방식이 기본 디폴트이기에)
			System.out.println("서버에 연결 요청");
			
			sc.connect(new InetSocketAddress("localhost", 9999));
			System.out.println("서버에 연결 성공");
			
			
			//////////////////////////////////////////////////////////////
			ByteBuffer buffer = null;
			Charset charset = Charset.forName("utf-8");
			buffer = charset.encode("안녕! 서버야!");
			sc.write(buffer);
			System.out.println("보내기 완료");
			//////////////////////////////////////////////////////////////
			
			
			buffer = ByteBuffer.allocate(100);
			int readCount = sc.read(buffer);
			buffer.flip();
			
			String message = charset.decode(buffer).toString();
			System.out.println("Server로부터 받은 메세지 : "+message);
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
}

정규화(Normalization)

<aside> 💡 (참조 사이트)

[Database] 정규화(Normalization) 쉽게 이해하기 https://mangkyu.tistory.com/110

</aside>