2024.02.13

김무영·2024년 2월 14일

1 대 1 채팅 만들기

    1. (A) 서버 소켓 생성
      ServerSocket server = new ServerSocket(3000);
    1. (B) 소켓 생성
      Socket client = new Socket("서버ip",3000);
    1. (A) 접속자 소켓을 받는다.
      Socket client = server.accept();
    1. (A) 데이터를 보내고, 읽기 위한 스트림 소켓에서 얻기
      DataInputStream dis = new DataInputStream(client.getInputStream());
      DataOutputStream dos = new DataOutputStream(client.getOutputStream())
    1. (B) 데이터를 보내고, 읽기 위한 스트림 소켓에서 얻기
      DataInputStream dis = new DataInputStream(client.getInputStream());
      DataOutputStream dos = new DataOutputStream(client.getOutputStream())
    1. (A) 스트림에 데이터 쓰기
      dos.writeUTF("메시지");
    1. (B) 소켓에 들어온 데이터를 읽어서 대화 내용창에 출력
      while(true){
      jta.append(dis.readUTF());
      }
    1. (A) 스트림의 내용을 목적지로 분출
      dos.flush();
    1. (B) 스트림에 데이터 쓰기
      dos.writeUTF("메시지");
    1. (B) 스트림의 내용을 목적지로 분출
      dos.flush();
    1. (A) 소켓에 들어온 데이터를 읽어서 대화 내용창에 출력
      while(true){
      jta.append(dis.readUTF());
      }

Thread

  • 동시에 일 처리를 해야할 때 . ( 동시에 여러 method를 호출할 때 )

  • 프로그램의 종료 시간을 측정할 수 없다.

  • 작은 process.

    • 실행중인 프로그램( 사용자, OS에서 실행)
    • CPU가 한번에 처리하는 일의 단위.(한번에 하나의 프로세스만 처리)
  • CPU Scheduling은 두가지 존재

    • 시분할 CPU Scheduling ( time sharing ) : OS에서 사용

      • 작업관리자의 역할이 매우 중요, 작업관리자가 현재 실행중인 Process를 분석하여 CPU를 점유하는 시간을 설정
    • 선점형 CPU Scheduling ( running time ) : java에서 사용.

      • 작업 관리자가 필요 없다. 간단하게 Thread를 실행할 수 있다.
  • Thread는 실행 할 때 마다 결과가 다르게 나온다.

  • 사용법

    • 상속 : extends Thread

      1. Thread를 상속
        piblic class Test extends Thread
      2. run method를 Override
        piblic void run(){
      3. Thread로 동작해야하는 코드 정의
        //(동시에 처리되어야 할 코드)
        }
      4. 상속관계의 자식 클래스를 객체화
        Test t = new Test();
      5. Thread클래스의 start() 호출
        t.start();
    • 구현 : implements Runnable **

      1. Runnable을 구현
        piblic class Test implements Runnable{
      2. run method를 Override
        piblic void run(){
      3. Thread로 동작해야하는 코드 정의
        //(동시에 처리되어야 할 코드)
        }
      4. Runnalbe을 구현한 클래스를 객체화
        Test t = new Test();
      5. Thread클래스의 has a 관계로 생성
        Thread th = new Thread(t);
      6. Thread 클래스의 start() 호출
        th.start();
  • Thread의 생명주기

Interrupt

  • CPU를 점유하고 있는 Thread를 강제로 분리하는 것

1 대 1 채팅의 개선

  • 메시지를 읽는 코드는 메시지를 보내는 코드와 동시에 실행되어야 한다.
      1. 자식클래스를 객체화
      1. Thread클래스와 has a 관계로 객체화
      1. Thread클래스의 start()
    1. (A) 서버 소켓 생성
      ServerSocket server = new ServerSocket(3000);
    1. (B) 소켓 생성
      Socket client = new Socket("서버ip",3000);
    1. (A) 접속자 소켓을 받는다.
      Socket client = server.accept();
    1. (A) 데이터를 보내고, 읽기 위한 스트림 소켓에서 얻기
      DataInputStream dis = new DataInputStream(client.getInputStream());
      DataOutputStream dos = new DataOutputStream(client.getOutputStream())
    1. (B) 데이터를 보내고, 읽기 위한 스트림 소켓에서 얻기
      DataInputStream dis = new DataInputStream(client.getInputStream());
      DataOutputStream dos = new DataOutputStream(client.getOutputStream())
    1. (A) 스트림에 데이터 쓰기
      dos.writeUTF("메시지");
    1. (B) 소켓에 들어온 데이터를 읽어서 대화 내용창에 출력
      public void runt(){
       while(true){
        jta.append(dis.readUTF());
       }
      }
    1. (A) 스트림의 내용을 목적지로 분출
      dos.flush();
    1. (B) 스트림에 데이터 쓰기
      dos.writeUTF("메시지");
    1. (B) 스트림의 내용을 목적지로 분출
      dos.flush();
    1. (A) 소켓에 들어온 데이터를 동시에 읽어서 대화 내용창에 출력
      ```java
      public void run(){
       while(true){
       jta.append(dis.readUTF());
       }
      }
      ```
  • readMsg()안에서 메시지를 무한루프로 읽어 들이기 때문에, 보내기와 동시에 실행될 수 없다.
    -> 읽기를 보내기와 동시에 실행해야 하므로

0개의 댓글