일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- DP
- Two Points
- Dijkstra
- binary search
- two pointer
- String
- Stored Procedure
- 그래프
- union find
- MYSQL
- Brute Force
- Trie
- 스토어드 프로시저
- 이진탐색
- 다익스트라
- Hash
- SQL
- Today
- Total
목록TCP IP 소켓 프로그래밍 (13)
codingfarm
windows는 winsock이라는 독자적인 소켓 프로그래밍 환경을 제공한다. 이 winsock에 대해 알아보겠다. winsock을 이용한 소켓 프로그래밍 winsock Windows Socket API의 줄임말 Windows 에서의 TCP/IP 기반의 소켓 프로그래밍을 지원하기 위한 소켓 함수들의 모음 BSD 소켓 기반 프로그래밍 방법, 함수, 구조체의 사용법 등이 linux와 크게 차이 없다. winsock.dll 파일을 로드해야 사용 가능 WSAStartup 함수를 호출하여 로드 WSAStartup : 소켓 프로그래밍에 필요한 dll을 로드 docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsastartup WSAStartup의 사용..
이제 리눅스 환경에서의 소켓 클라이언트 프로그램을 작성해본다 클라이언트가 보낸 문자열을 서버에서 받아, 고스란히 되돌려주는 에코 프로그램을 작성해보자 포트번호는 3500으로 할것이다. 컴퓨터가 두대라면 효율적인 실습 가능하겠지만, 사정상 한대의 컴퓨터만 준비 가능하다면 루프백 주소인 '127.0.0.1'로 테스트 해본다. 여기서는 2개의 가상 OS를 이용하여 각각 client와 server의 역할을 수행하도록 한다. 좌측이 client로 쓸 OS, 우측이 server로 쓸 OS로 각각의 IP가 192.168.175.131 192.168.175.132 인것을 확인했다. 클라이언트 프로그램 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ..
더이상 사용하지 않는 소켓은 close 함수로 종료시킨다. 그러지 않으면 소켓은 시스템 자원을 계속 점유하게된다. 1 2 #include int close(int sockfd); cs 매개인자로 종료할 소켓의 식별 번호를 넘긴다
클라이언트가 Connect 함수로 서버에 연결을 요청하면 이 요청은 서버의 수신 대기열에 들어간다. 서버에서 accept 함수로 연결을 가져오면 서버와 클라이언트가 연결되어 통신할 수 있는 상태가 된다. 데이터 통신은 읽기 함수와 쓰기 함수가 쓰인다. 다만, 단순한 읽기/쓰기 일지라도 크게 2가지 함수로 나뉜다. 저수준 입출력 함수 : OS에서 제공하는 기본적인 함수 소켓 입출력 함수 : 소켓에서 제공하는 함수 이 포스트에서는 OS에서 제공하는 저수준 입출력 함수에 대해서 알아볼것이다. 소켓에서 제공하는 입출력 함수는 12장에서 다룰것이다. 리눅스에서의 데이터 입출력 윈도우즈에서의 입출력은 여기를 참고할것 리눅스에서는 소켓을 포함한 모든것을 파일로 다룬다. 파일에 읽고 쓰기 위해 read와 write 라..
www.tcpschool.com/c/c_refer_endian forum.falinux.com/zbxe/index.php?document_srl=431494&mid=C_LIB 바이트 정렬(Byte Order) 컴퓨터에서 연속된 데이터를 byte단위로 순서대로 저장하는것 byte가 저장되는 순서에 따라 little endianess와 big endianess로 나뉨 빅 앤디언(Big Endianess) 낮은 주소에 데이터의 높은 바이트(MSB, Most Significant Bit)부터 저장하는 방식 평소 숫자를 사용하는 선형 방식과 같은 방식입니다. 메모리에 저장된 순서 그대로 읽을 수 있으며, 이해하기가 쉽다 SPARC을 포함한 대부분의 RISC CPU 계열에서는 이 방식으로 데이터를 저장 TCP/IP..
학습 목표 connect 함수의 사용법을 숙지한다 클라이언트는 connect 함수를 이용해서 연결 요청을 한다. 연결 소켓을 반환하는 accept 함수와는 달리, connect 함수는 연결 성공 여부만 반환한다 server : 듣기 소켓과 연결 소켓이 분리 client : 구분 없음, socket 함수로 생성된 소켓 하나로 연결 및 통신을 모두 관리한다. connect 함수의 원형 1 int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen); cs 매개변수 sockfd : socket 함수로 생성된 소켓 지정 번호 serv_addr : 연결할 서버의 ip 주소와 포트 등의 정보를 담아온다 addrlen : server_add..
수신 대기열의 가장 앞에 있는 연결 요청을 가져온다. 연결 요청을 성공적으로 가져오면 클라이언트와의 통신을 위한 연결 소켓을 생성한다. accept 함수의 원형은 아래와 같다 1 int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); cs 매개변수 sockfd : socket 함수 호출시 반환된 소켓 식별 번호 addr : accept 함수 성공시, 연결된 client의 주소와 포트 정보가 담기는 구조체 addrlen : sockaddr 구조체의 크기 반환값 0 이상 : 성공, 소켓 지정 번호 -1 : 실패 함수자체의 컨셉은 bind 함수와 유사하다. 반환값은 socket 함수로 만든 듣기 소켓과는 전혀 다른 별개의 소켓이다. 듣기 소켓 :..
학습 목표 listen 함수의 사용법에 대해 배운다 클라이언트 요청에 대한 처리가 끝나기 전에 새로운 클라이언트가 요청하는 상황이 온다면, 해당 요청을 잠시동안 대기시키기 위한 대기열을 만들 필요가 있다. 이 대기열을 생성하기 위해 listen 함수가 쓰인다 수신대기열은 queue와 같은 FIFO 형태의 자료구조이다. 파란색과 초로색의 클라이언트가 서버측에 연결을 요청하면, 이 요청은 대기열에 들어가게 되며 먼저 요청이 들어간 파란색이 먼저 출력됨을 볼 수 있다. listen 함수의 원형은 아래와 같다. 1 int listen(int sockfd, int backlog); cs 매개변수 sockfd : socket 함수로 만들어진 소켓 지정 번호 backlog : 수신대기열의 크기 반환값 0 : 성공 -..
학습 목표 bind 함수로 소켓을 설정하는 방법을 배운다 socket 함수로 특정 도메인과 타입, 프로토콜에 맞는 소켓을 생성하고 나면, bind 함수로 소켓에 IP와 포트를 할당한다. server : bind 함수를 통해 소켓에 IP와 포트를 할당함 client : 연결할 인터넷 서비스(server)의 포트만 알면 됨 (자신의 포트는 몰라도 됨) bind 함수의 원형 int bind( SOCKET sockfd, const sockaddr *my_addr, int namelen ); cs 함수의 매개변수 sockfd : 앞서 socket 함수로 생성된 endpoint 소켓의 식별 번호 my_addr : IP 주소와 port 번호를 저장하기 위한 변수가 있는 구조체 namelen : 두 번째 인자의 데이터..
학습 목표 socket 함수를 이용하여 소켓을 생성하는 방법을 터득 앞서 일반적으로 소켓통신에서는 버클리 소켓을 사용한다고 앞서 설명했다. 하지만 이 버클리 소켓은 windows와 linux OS에서 각기 다른 헤더파일에 존재한다. windows : winsock2.h linux : sys/socket.h docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-socket int socket(int domain, int type, int protocol); cs endpoint 소켓 socket 함수에 의해 생성되는 종점 소켓 서버와 클라이언트의 연결을 받기 위함 2가지 용도로 쓰임 client : 연결 요청 server : (client의 요청..
학습 목표 네트워크 프로그래밍을 위한 가장 기초적인 개발도구인 소켓을 공부 네트워크와 네트워크 프로그램 개발에 대한 직감 터득 소켓을 활용한 네트워크 프로그래밍 과정 숙지 소켓 네트워크 프로그래밍을 위한 함수 모음(라이브러리) 네트워크 프로그래밍 과정 socket 함수 : 소켓을 생성 bind 함수 : 소켓의 특성을 정의 listen 함수 : 수신 대기열 형성 시스템간에 연결한다 connect 함수 : 클라이언트 : 연결 시도 accept 함수 : 서버 : 연결 수락 read함수, write함수 : 데이터 통신 close 함수 : 소켓 폐쇄 빨간색 : client만 수행 파란색 : server만 수행 수신대기열은 없어도 된다. 하지만 수신대기열이 있음으로써 통신을 요청한 클라이언트가 얼마간 기다린후에 자..
0. 개요 소켓을 이용하면 인터넷의 복잡한 하부구조에 대한 세부 지식 없이 손쉽게 네트워크 프로그램을 개발할 수 있다. 이번장에서 배울 내용 소켓이란 무엇인가? 네트워크와 네트워크 프로그램의 관계 네트워크 프로그램을 작성하기 위해서 알아야 하는 네트워크의 특성 네트워크 프로그램과 소켓과의 관계 1. 소켓 소개 기존의 TCP/IP 4계층과 OSI 7계층은 세분화를 통해 전문화를 이끌어내도록 의도되었다. 하지만 계층을 나누어 전문화하고, 다시 통합하여 단순화 했음에도 여전히 네트워크 프로그램 개발 과정은 복잡하다. 이를 위해 '네트워크 프로그램 개발을 위한 새로운 계층'을 만들었으며 이것이 소켓이다. 소켓의 계층구조는 TCP/IP 계층에서 응용계층 바로 밑에 위치한다. 소켓계층은 개발자들이 응용계층에만 집중..
1. 컴퓨터 네트워크의 역사 소켓(socket) -개발자가 네트워크의 복잡한 원리를 자세히 알 지 못해도 쉽게 네트워크 프로그램을 개발 할 수 있게 해준다. -OS에서 자체적으로 제공해주는, 네트워크로 연결된 두 컴퓨터가 서로 데이터를 주고 받을 수 있게 해주는 수단. 네트워크 프로그램이란 정보 전달은 정보의 종류와 처리 방식에 상관없이 아래와 같은 구성 요소와 역할을 가진다. 구성요소 역할 수신자 정보 해석 송신자 정보 생산 전령 매체 인터넷을 매체로 쓰는 현대사회에서는 컴퓨터 프로그램이 정보의 생산과 해석의 역할을 ㄹ담당한다, 네트워크의 출현과 진화 사람의 뇌를 구성하는 뉴런부터 사람들끼리의 만남, 자연 생태계를 통틀어 네트워크라 부르며, 이렇듯 네트워크라는 용어는 인터넷이 생기기 이전부터 존재해왔다..