반이중, 전이중

이소연's avatar
Aug 05, 2024
반이중, 전이중
 
우리 프로그램은 메인 종료 되면 종료 돼서 할 필요x
finally(close)_근데 우리는 안 해도 됨.
 
c로 짜면 이런 식으로 짬. 이 정도는 참고 정도
그림
 
3개 , 2개? 1묶음?
notion image
프로토콜 =서로의 약속
 
 

반이중

양방향이지만 동시에 하지는 x(반응해서 응답하는 것.)
ex) 무전기
notion image
package ex17.half; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.Charset; public class Server { public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(20000); Socket socket = serverSocket.accept(); //소켓 연결 완료됨 //버퍼 만들기(recevied) BufferedReader br = new BufferedReader( new InputStreamReader(socket.getInputStream()) ); String requestMsg = br.readLine(); System.out.println("클라이언트로부터 받은 메세지 : " + requestMsg); //send 버퍼 만들기~동기적 실행 / 응답을 받아야 실행-v PrintWriter pw = new PrintWriter(socket.getOutputStream(), true, Charset.forName("UTF-8")); // 자동 플러쉬-v if (requestMsg.equals("1")) { pw.println("영화"); // println 쓰면 \n안해도 됨? } else if (requestMsg.equals("2")) { pw.println("드라마"); } else { pw.println("프로토콜을 확인하세요 : 1은 영화, 2는 드라마"); } } catch (IOException e) { throw new RuntimeException(e); } } }
 
package ex17.half; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class Client { public static void main(String[] args) { try { Socket socket = new Socket("localhost", 20000); PrintWriter pw = new PrintWriter(socket.getOutputStream(), true); pw.println("1"); // 요청메세지 //응답한거 답할려고? 3HANS느낌..? BufferedReader br = new BufferedReader( new InputStreamReader(socket.getInputStream()) ); String responseMsg = br.readLine(); System.out.println("서버로부터 받은 메시지 : " + responseMsg); } catch (IOException e) { throw new RuntimeException(e); } } }
 
 

전이중

동시에 양방향 전송 가능한 방식,
ex) 전화기인데
말하는 중간에 끼어듦 - 전이중 // 친구 말 다 듣고 대답→ 반이중
 
반이중에 while 걸어봐(쓰고 읽기_채팅이니까.). 키보드로 입력 받고 message받음.
스레드 입력? 출력?
일단 순서는 이렇게
  1. 서버생성
  1. 클라이언트 생성
  1. 클 → 서버(메시지를 지속적으로 전송)~
  1. 서버→ 클(메시지를 지속적으로 전송)~스래드 만듦…
 
 
 
notion image
notion image
이 말 뜻을 정리해보면,,,,
전이중은 서로 동시에 쓸 수 있게 하는 것인데..
위의 선은 사실 1개이지만 이해하기 쉽게 하기 위해 필요한 경우인 2번을 적어 따로 표현.
Client가 요청하니까 BufferedWriter필요. 서버는 읽어야 하니께 BufferedReader임
Server가 응답해줄 때는 BufferedWriter필요. C는 그걸 읽어야 되니께 BufferedReader임
 
그리고 키보드에서 입력할 때(클라이언츠가 키보드로 적음??… 전이중은 클라이언츠가 서버가 되고 클라이언츠도 되는 느낌???) 서버입장에서는 그 값을 읽어야 하니까 BufferedReader필요??
근데 동작을 수행할 때는 스레드를 사용하는데 서버를 먼저 보면,
메세지 읽기만 하는 Br 동작하려고 스레드 1개(T1) 쓰고??
Br 받으면 Bw할 거라고 하나의 스레드(T2)로 묶음.

브렌치 관리

💡
연습할 때마다 branch 만들어 하면 좋다. ex) 모든 연습 한 branch에 모아 놓는 것 보다 기능 1→ branch1
-연습 다 해보고 branch 삭제하면 됨.
if) 저장하고 싶으면 그냥 master 코드로 병합(병합은 난중 배움)
 
커밋하고 checkout 하기
notion image
연습하고 나서 커밋 → checkout하면 됨.
 
메인은 스레드로..
 
 
💡
프로그램밍 - 추상화해야 함. 1. 실력 2. 웃는 얼굴 3. 비지니스 4. 사람들 많이 만나용….
 
스테이트 풀 :
반이중_스테이트 풀
요청하면 선 끊김.. 스테이트 리스.
 
 
 
Share article

Coding's note