전체 글80 여러개의 클라이언트와 통신하기 자바를 이용한 네트워크 통신은https://jodndud.tistory.com/85 네트워크 통신 구현하기TCP (Transmission Control Protocol)연결지향적 프로토콜. 연결 과정은 3-way handshake라는 과정을 통해 이뤄진다.3-way handshake : 1. SYN (연결 요청), 2. SYN-ACK, 3. ACK (요청 응답, 데이터 전송)자바에서는 TCP통신을jodndud.tistory.com를 참고하면 된다. 위의 예시에서는 서버 클래스에서 accept()메서드를 통해 소켓을 하나만 생성했다.그래서 오직 하나의 클라이언트와 통신할 수 있는데,스레드를 통해 세션을 불러오고 세션을 통해 여러개의 클라이언트와 통신 할 수 있다. 이는 서버쪽 클래스에서 구현할 수 있다.먼.. 2024. 12. 16. 네트워크 통신 구현하기 TCP (Transmission Control Protocol)연결지향적 프로토콜. 연결 과정은 3-way handshake라는 과정을 통해 이뤄진다.3-way handshake : 1. SYN (연결 요청), 2. SYN-ACK, 3. ACK (요청 응답, 데이터 전송)자바에서는 TCP통신을구현할때 Socket객체를 활용한다. 클라이언트 클래스Socket socket = new Socket("localhost", PORT);DataInputStream input = new DataInputStream(socket.getInputStream());DataOutputStream output = new DataOutputStream(socket.getOutputStream());// 문자보내기String.. 2024. 12. 16. FileWriter / FileReader 문자를 파일에 쓸 때1. 문자를 비트로 바꾼다.(반드시 문자 집합을 지정)2. 비트를 파일에 저장한다.// 파일에 쓰기FileWriter fw = new FileWriter(FILE_NAME, UTF_8);BufferedWriter bw = new BufferedWriter(fw, BUFFER_SIZE);bw.write(writeString);bw.close(); 문자를 파일에서 읽을 때1. 비트를 문자로 바꾼다. (읽어들인 byte[] 과 디코딩할 문자 집합을 전달)2. 문자를 복원한다.// 파일에서 읽기StringBuilder content = new StringBuilder();FileReader fr = new FileReader(FILE_NAME, UTF_8);BufferedReader br =.. 2024. 11. 27. FileOutputStream / FileInputSteam 스트림(Stream)과 입출력(I/O)스트림(Steam)은 데이터를 연속적인 흐름으로 처리하는 것을 의미. Java의 입출력 스트림은 두가지로 나뉜다.입력 스트림(Input Stream)과 출력 스트림(Output Stream) FileOutputStream파일에 데이터를 쓰기위해 사용// 파일 이름을 이용해 객체 생성FileOutputStream fos = new FileOutputStream(FILE_NAME);for (int i = 0; i FileInputStream파일에서 데이터를 읽기위해 사용// 파일이름을 이용해 객체 생성FileInputStream fis = new FileInputStream(FILE_NAME);int fileSize = 0;int data;// fis.read() 데이.. 2024. 11. 22. Executor 자바의 Executor 프레임워크는 스레드 풀을 이용해 비동기 작업을 효율적으로 관리할 수 있는 프레임워크이다. ExecutorService es = Executors.newFixedThreadPool(2);Future result = es.submit(new Mytask()); newFixedThreadPool(int nThread) : 고정된 개수의 스레드를 가진 ThreadPoolExecutor를 생성. 스레드 풀 내에서 n개의 스레드가 미리 생성되고, 제출된 작업은 이 스레드들에 의해 처리.모든 스레드가 사용 중일 때 추가 작업이 제출되면 대기 큐에 쌓여 순차적으로 실행.스레드 수가 고정되어 있어, 일정한 양의 비동기 작업을 처리할 때 적합.submit() : Runnable 또는 Callable.. 2024. 11. 13. CAS연산 하나의 작업이 다른 작업에 의해 방해받지 않고 단일 단계로 수행되는 것을 원자적 연산이라 한다.예를들어 int i = 1 이라는 연산은 동시에 어떤 스레드가 들어와도 i=1이다.하지만 i = i + 1; 이라는 연산은 동시에 수행될 경우 문제가 발생한다. 동시성 문제는 동기화 락을 사용하는 방식과 스레드가 대기하는 방식이 있지만, 비교 후 교환을 하는 CAS연산을 사용할 수도 있다. AtomicInteger()AtomicInteger()을 이용한 원자적 연산 예시import java.util.concurrent.atomic.AtomicInteger;public class AtomicExample { private AtomicInteger count = new AtomicInteger(0); // 초.. 2024. 10. 24. 이전 1 2 3 4 ··· 14 다음