Yejom's Dev Log
socket 본문
- 소켓(socket)
: 네트워크를 경유해서 컴퓨터 간 통신을 하기 위한 도구
- 소켓 구성 요소
: IP주소, 포트번호, 프로토콜
- 소켓 서버
데이터가 중요할 때 => TCP 서버 (연결 지향)
• 각 소켓끼리 서로 연결
• 연결된 상태에서 통신, 연결된 대상 외에 다른 대상과는 통신 불가능
• 속도는 느리지만 안정성이 높다.
• 데이터가 손실되면 안되는 경우
성능이 중요할 때 => UDP 서버 (비연결 지향)
• 연결되지 않은 상태에서 내가 원하는 주소에 데이터를 보낼 수 있는 통신 방법
• 데이터를 보낸 후 확인작업이 없어서 데이터가 다 수신되었는지 확인 불가능
• 속도가 빠르지만 데이터가 소실될 수 있다.
• UDP 헤더의 체크섬 필드를 통해 최소한의 오류만을 검출
• 동영상, 음악 스트리밍 서비스 (네트워크가 불안정하면 화면이 깨지고 소리가 끊기고)
- 소켓 서버 비교
TCP 서버
• 서버소켓은 연결만을 담당
• 서버와 클라이언트 1대1로 연결
• 스트림전송 => 전송 데이터의 크기가 무제한
• 패킷에 대한 응답으로 인한 시간지연, CPU 소모
• 스트리밍 서비스에 불리(손실될 경우 재전송 요청)
UDP 서버
• 1대1, 1대N, N대M 연결 가능
• 성능이 중요한 서비스에 사용
- 소켓 주소 체계
- 소켓 서비스
- 소켓의 흐름 (TCP)
1. 서버와 클라이언트는 소켓을 각각 생성
2. 클라이언트가 서버에게 요청을 한다.
3. 서버는 클라이언트의 요청을 받는다.
4. 데이터를 주고 받는다.
5. 데이터를 주고 받는 동작이 끝나면 연결된 소켓을 닫는다!
- socket()
// 소켓 생성
socket (주소 영역 지정, 서비스 타입, 프로토콜 지정)
성공적으로 실행되어 소켓이 만들어지면 해당 소켓의 디스크 립터 반환
- 프로토콜
IPv4 주소 => 마지막 한 숫자 빼고는 모두 같음. (같은 네트워크 사용 시)
VIsual Studio => solution Property => Startup Project => Multiple Startup Projects로 설정
'Smart Factory Bootcamp' 카테고리의 다른 글
[C++] Visual Studio 외부 라이브러리 추가 (0) | 2024.06.28 |
---|---|
[C++] thread (0) | 2024.06.27 |
[C++ 입문] 7. structure, class (0) | 2024.05.14 |
[C++ 입문] 6. file separation, namespace (0) | 2024.05.09 |
[C++ 입문] 5. list, string (0) | 2024.04.30 |