
1 : N 소켓 양방향 통신에서는 하나의 서버가 여러 클라이언트와 동시에 양방향 통신을 할 수 있습니다. 이는 채팅 애플리케이션, 멀티플레이어 게임 서버 등에서 흔히 사용됩니다. 필요 개념 서버와 클라이언트 소켓:서버는 하나의 ServerSocket을 통해 여러 클라이언트의 연결 요청을 기다립니다.클라이언트는 각각의 Socket을 통해 서버에 연결을 요청하고, 연결된 후 서버와 통신합니다.멀티스레딩:서버는 각 클라이언트와의 통신을 별도의 스레드에서 처리합니다. 이를 통해 여러 클라이언트와 동시에 통신할 수 있습니다.각 클라이언트는 서버와의 통신을 처리하는 자체 스레드를 가집니다.동기화 및 자원 관리:여러 스레드가 동시에 데이터를 읽고 쓸 수 있으므로, 데이터의 일관성을 유지하기 위한 동기화가 필요합니다...

코드 예시)InputStream, OutputStream 둘 다 필요하다. 채팅 기본 기능 구현멀티 스레드 활용양방향 통신을 지속적으로 수행하기 위해 서버와 클라이언트 모두에서 키보드 입력을 받아 상대방에게 데이터를 보내고 받을 수 있도록 스레드와 while문을 활용하여 코드를 작성해봅시다. ,ServerSocket 을 생성하고 클라이언트의 연결을 기다립니다.BufferedReader 를 사용하여 클라이언트로부터 메시지를 읽고, PrintWriter를 사용하여 클라이언트에게 메시지를 보냅니다.키보드 입력을 받기 위해 BufferedReader를 사용합니다.클라이언트로부터 데이터를 읽는 스레드와 키보드 입력을 클라이언트로 보내는 스레드를 각각 실행합니다. Thread의 join() 메서드 - 역할과 기능..

PrintWriter 사용 이유편리한 메서드: print(), println(), printf()와 같은 메서드를 제공하여 다양한 형식의 데이터를 손쉽게 출력할 수 있습니다.자동 플러시(autoFlush): PrintWriter를 생성할 때 autoFlush를 true로 설정하면, println() 등의 메서드를 호출할 때 자동으로 버퍼가 플러시되어 데이터를 즉시 전송합니다. 이는 네트워크 소켓과 같이 실시간 데이터 전송이 중요한 경우에 유용합니다.버퍼링: 출력 데이터를 버퍼에 저장한 후 한 번에 출력하여 성능을 향상시킵니다. 필요시 flush() 메서드를 호출하여 강제로 데이터를 출력할 수도 있습니다. 주요 메서드print(): 다양한 데이터 타입을 출력합니다. (문자열, 정수, 부동 소수점 등)pri..

서버 측 기본 코드 작성의 목적서버는 클라이언트의 요청을 받아들이고, 클라이언트가 보내는 데이터를 처리하는 역할을 합니다. 네트워크 통신의 기초 이해서버는 네트워크 통신의 핵심 역할을 합니다. 서버 측 코드를 작성함으로써 우리는 네트워크 통신의 기본 개념을 이해할 수 있습니다.서버 소켓(ServerSocket) 생성: 네트워크 연결을 기다리는 소켓입니다.포트 바인딩: 특정 포트 번호에 서버 소켓을 결합하여 외부에서 접근할 수 있도록 합니다.클라이언트 연결 수락: 클라이언트가 서버에 연결할 수 있도록 대기하고, 연결 요청을 받아들입니다. 데이터 송수신 이해서버 측 코드에서 클라이언트로부터 데이터를 수신하고 이를 처리하는 과정을 배웁니다. 이는 네트워크 프로그래밍의 핵심 기능 중 하나입니다.입력 스트림(I..

소켓은 컴퓨터 네트워킹에서 매우 중요한 역할을 하며, 특히 자바 I/O에서 자주 사용됩니다. 1. 소켓(Socket)이란?소켓은 네트워크 상에서 통신을 가능하게 하는 끝점을 의미합니다. 두 컴퓨터 간의 데이터를 주고받기 위해 사용되는 인터페이스로, 소켓을 통해 네트워크 연결을 설정하고 데이터를 송수신할 수 있습니다. 쉽게 말해, 소켓은 네트워크를 통해 다른 컴퓨터와 대화하는 전화기 같은 역할을 합니다. (소켓은 사실 파일 개념과 같다) 소켓은 물리적인 장치가 아니라 추상적인 개념의 약속입니다. 네트워크 통신을 위해 소프트웨어적으로 정의된 인터페이스로, 컴퓨터 간의 데이터 교환을 가능하게 하는 규칙과 방법을 의미합니다. 이를 통해 네트워크 애플리케이션이 서로 통신할 수 있습니다.일반 사용자 컴퓨터에서 네트..

DataInputStream 과 DataOutputStreamDataInputStream 과 DataOutputStream은 자바의 I/O 스트림 클래스 중 하나로, 원시 자료형(정수, 실수, 문자 등)을 쉽게 읽고 쓸 수 있도록 도와줍니다.이 두 클래스는 데이터의 형식을 유지하면서 입력 및 출력을 수행할 수 있어, 자료의 손실 없이 데이터를 주고받을 수 있습니다. 예시) ObjectInputStream과 ObjectOutputStream, 그리고 직렬화ObjectInputStream과 ObjectOutputStream은 객체를 직렬화하여 파일에 쓰거나 네트워크로 전송하고, 이를 다시 역직렬화하여 객체로 복원할 때 사용하는 자바의 I/O 클래스입니다.직렬화(Serialization): 객체의 상태를 바..

코드 예시1) 문자 기반 스트림을 활용한 파일 복사 클래스 설계하기 코드 예시2)바이트 기반 스트림을 활용한 Zip 파일 만들기 로그와 파일 저장매번 로깅 코드를 작성하는 것은 불편할 수 있습니다. 그래서 로그를 편리하게 사용할 수 있도록 클래스를 설계하고, 영구적으로 로그를 저장할 수 있는 파일 저장 기능을 포함하는 코드를 작성해 봅시다. 코드 예시 1) 코드 예시 2) 위의 private static FileLogger fileLogger = new FileLogger('mLogger.txt'); 로 인해 패키지 내에 파일이 자동으로 생성된다. 코드 예시 3) 코드 예시 4) 위와 같이 코드를 작성하면 mLogger.txt 파일 내에 이와 같이 기록된다.

파일 입력 스트림 파일 입력 스트림(FileInputStream) : 지정된 파일 이름으로부터 바이트 단위의 입력 스트림을 생성한다.문자 입력 스트림 변환기(InputStreamReader) : FileInputStream을 통해 읽은 바이트 데이터를 문자 데이터로 변환한다. 여기서는 UTF-8 인코딩을 사용한다.버퍼링된 문자 입력 스트림(BufferedReader) : InputStreamReader로부터 데이터를 효율적으로 읽기 위해 버퍼링을 추가한다. readLine() 메서드를 사용하여 파일의 각 줄을 편리하게 읽을 수 있다. 코드 예시1) Seoul.txt, NewYork.txt 파일을 생성하고 내용을 넣음FileReader(문자 기반 스트림) => 단 인코딩에 대한 단점이 존재한다. 파일 ..

자바 I/O에서 문자 기반 스트림의 사용 이유자바의 입출력(I/O) 시스템은 바이트 기반 스트림과 문자 기반 스트림 두 가지 유형의 스트림을 제공한다.문자 기반 스트림은 텍스트 데이터(입출력 단위 : 문자)를 처리할 때 사용된다. 1. 문자 인코딩 처리: 자동으로 플랫폼의 기본 문자 인코딩을 사용하여 문자 데이터를 올바르게 인코딩하거나 디코딩한다. 이는 다양한 문자 인코딩을 처리하면서 발생할 수 있는 복잡성을 추상화하고, 문자 데이터를 쉽게 처리할 수 있도록 돕는다. 2. 국제화 지원: 유니코드와 같은 다국어 지원을 통해 전 세계적으로 소프트웨어를 배포할 때 필수적이다. 문자 기반 스트림을 사용하면 다양한 언어의 문자 처리가 간편해진다. 자바 플랫폼은 유니코드를 사용해서 문자를 저장한다. 문자 스트림은 ..

바이트 스트림 : 8비트의 바이트 단위로 입출력을 수행하는 스트림파일 입출력을 담당하는 바이트 스트림 : FileInputSream 클래스(파일에서 바이트를 읽음), FileOutputStream 클래스(파일에다가 바이트를 씀) 기본적인 메서드: read(), write() 코드 예시)바이트 기반의 출력 스트림을 활용해서 파일 생성 또는 파일의 데이터를 출력할 수 있다. 코드 예시2)보조 스트림의 사용 버퍼를 사용하는 것은 입출력 작업에서 매우 중요한 역할을 하며, 그 원리를 이해하는 것은 데이터 처리의 효율성을 높이는 데 큰 도움이 됩니다. 버퍼의 사용 원리는 기본적으로 '일괄 처리' 또는 '집단 처리' 방식에 비유할 수 있습니다. 버퍼의 기본 원리버퍼는 임시 저장 공간을 말하며, 데이터를 최종..