: A와 B 사이에 통신을 할 때, 전용 선을 이용해 1:1로 통신하는 방법. 단순하지만 전용 선을 만들어야 하기 때문에 비용이 많이 든다.
데이터를 전송하면 안정적이지만, 전용 회선을 계속 사용하기 때문에 효율성이 떨어지고, 많은 양의 데이터를 전송하는 데에는 비효율적
: 통신 회선을 공유해서 여러 장치가 통신할 수 있는 방법.
전송되는 데이터를 작은 패킷 단위로 쪼개서 네트워크를 통해 전송하는 방법.
비용이 적게 든다.
하나의 회선을 공유하기 때문에 통신중인(정보를 전송중인) 경우 다른 장치가 통신할 수 없다.
동기화 상태 : 일에 순서가 있다. 멍 때린다!
통신할 정보를 패킷 단위로 쪼갠다
쪼갠 정보는 payLoad, 헤더에는 정보를 전달할 목적지 IP를 담는다
동기화를 피하기 위해 라운드로빈 방식을 사용한다
라우터는 컴퓨터 네트워크 간에 데이터 패킷을 전송하는 네트워크 장치다. 패킷의 위치를 추출하여, 그 위치에 대한 최적의 경로를 지정하며, 이 경로를 따라 데이터 패킷을 다음 장치로 전달한다.
: 사람의 언어를 기계가 이해하는 언어로 변환하는 과정
사람의 언어를 애플리케이션으로 입력하여 랜카드의 프로세스로 보내는 것!
: 기계의 언어를 사람이 이해하는 언어로 변환하는 과정
통신에서의 버퍼(Buffer)는 데이터를 일시적으로 저장하는 메모리 공간
: 실행중인 프로그램
: 프로세스에서 실제로 일하는 주체, 프로세스에는 한 개 이상의 스레드가 존재하고 이를 멀티스레드 프로세스라고 한다
하나의 스레드에 sleep()을 설정하지 않으면 다른 스레드의 일이 끼어들 수 없어서 스위칭이 일어나지 않는다! sleep()설정 필수!
: A에서 B로 정보를 전달할 때 A는 보내는 역할만, B는 받는 역할만 한다
클라이언트에서 서버로 메시지를 보내지만, 서버는 클라이언트에게 메시지를 보낼 수 없는 것
: 클라이언트에서 서버로, 서버에서 클라이언트로 메시지의 통신이 가능하다
하지만 통신선이 하나이기 때문에 한쪽이 메시지를 전송하고 있는 경우 다른 한쪽은 메시지를 전송할 수 없다
: 두 장치를 연결하는 통신선이 두 개(송신선, 수신선)
채팅 기능의 경우 전이중
서버가 되는 조건!
1. 반이중 (채팅은 전이중)
2. 데몬 스레드가 존재해야 한다(항상 리스닝하는 스레드 존재!)
3. 클라이언트의 동시 접속 허용
package parser;
class User{
private int id;
private String name;
private String address;
public User(int id, String name, String address) {
this.id = id;
this.name = name;
this.address = address;}
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public String getAddress() {return address;}
public void setAddress(String address) {this.address = address;}
}
public class ToJsonTest {
public static void main(String[] args) {
User user = new User(1, "홍길동", "서울시");
Gson gson = new Gson();
String json = gson.toJson(user); //json 문자열 생성
System.out.println(json);
}
}
public class ToUserTest {
public static void main(String[] args) {
String json = "{\"id\":1,\"name\":\"홍길동\",\"address\":\"서울시\"}";
Gson gson = new Gson();
User user = gson.fromJson(json, User.class);
System.out.println(user);
}
}