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();
}
}
}
<aside> 💡 (참조 사이트)
[Database] 정규화(Normalization) 쉽게 이해하기 https://mangkyu.tistory.com/110
</aside>