본문 바로가기
C_C++ 프로그래밍/뇌를 자극하는 TCP_IP

뇌자극 TCP/IP 4강 요약

by RoJae 2019. 5. 19.





네트워크 프로그램의 흐름 이해하기


1. 기존의 망에 노드를 추가한다.

  => 인터넷 망에 접속하기 위해 (소켓)


2. 그 노드를 링크에 연결하기

 => Socket (IP 주소 + Port 번호)


3. 통신 상대를 찾아가기

1. 송신측

소켓 생성 -> 포트 부여 -> 상대편 IP/Port 주소로 연결 -> 통신 -> 종료

 2. 수신측

소켓 생성 -> 포트 부여 -> 상대편 연결 기다리기 -> 통신 -> 종료





// 인터넷과 연결하기 위한 접점 소켓을 생성한다.
#include <sys/types.h>
#include <sys/socket.h>

int socket(int domain, int type, int protocol);


//domain : 소켓의 사용 영역을 정의한다.
//type : 소켓 유형을 정의한다.
//protocol : 소켓이 사용할 프로토콜을 정의한다.




Domain

소켓의 사용 영역을 정의한다.

소켓도 인터넷에서 사용하는가, 컴퓨터에서 사용하는 가 등에 따라 나뉜다.

인터넷 : AF_INET
컴퓨터 : AF_UNIX



Type & Protocol

UDP 통신과 TCP 통신은 다르다.

- SOCKET_STREAM <-> IPPROTO_TCP
- SOCKET_DGRAM  <-> IPPROTO_UDP




소켓 함수의 예

1. socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)    // TCP 소켓
2. socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)    // UDP 소켓
=>  2개를 95% 이상의 프로그램에서 사용

반환에 성공하면 1을 반환한다. (fd)



인터넷 주소와 포트번호를 이용해서 원격 소켓에 연결하기

int connet (int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);


원격 소켓의 인터넷 주소 지정하기

// IP + 포트 번호

struct sockaddr_in serveraddr;

server_sockfd = socket(AF_INET, SOCK_STREAM,0);   
serveraddr.sin_family = AF_INET;                                                     // 사용할 도메인
serveraddr.sin_addr.s_addr = inet_addr("//internet addr");    // 인터넷 주소
serveraddr.sin_port = htons(8080);                                                // 포트 번호

client_len = sizeof(serveraddr);                                                        // 길이를 알아야 정상 작동
connet(server_sockfd, (struct sockaddr *)& serveraddr, client_len);



함수
데이터 입출력
소켓 함수 : send, recv, sendto, recvfrom
파일 함수 : read, write

입력 함수
send, sendto, read

출력 함수
recv, sendto, wrtie


사용법은 거의 비슷하며, 파라미터로
(int fd, void *buf, size_t count);
fd = 소켓 지정 번호
buf or msg = 보낼 메시지 혹은 받을 공간
count  = 그 크기

성공 시 0보다 큰 값 return
실패 시 0    return

* flag는 추후에 알아보자

윈도우는 closeSocket()
유닉스는 close()

=> 윈도우는 소켓을 파일 단위로 보지 않는다.



서버 프로그램 흐름도

socket() -> ( bind() -> listen() -> accept() ) -> read() || write() -> close()
bind : port에 연결
listen : 수신 대기열을 만든다.
accept : 수신 성공



클라이언트 프로그램 흐름도

socket() -------------> connect()-> read() || wrtie() ->close()

※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다


'C_C++ 프로그래밍 > 뇌를 자극하는 TCP_IP' 카테고리의 다른 글

뇌자극 TCP/IP 6강 요약  (0) 2019.05.25
뇌자극 TCP/IP 5강 요약  (0) 2019.05.20
뇌자극 TCP/IP 3강 요약  (0) 2019.05.19
뇌자극 TCP/IP 2강 요약  (0) 2019.05.19

댓글