본문 바로가기
Programming/Linux C/C++

네트워크 프로그래밍과 소켓의 이해

by 개Foot/Dog발?! 2014. 9. 2.

URL : http://christin2.tistory.com/22


소켓(Socket)

: 물리적으로 연결된 네트워크상에서의 데이터 송수신에 사용할 수 있는 소프트웨어적인 장치를 의미

: 프로그래밍에서의 소켓은 네트워크 망의 연결에 사용되는 도구


.....


ref URL : http://forum.falinux.com/zbxe/?mid=C_LIB&document_srl=429387&sort_index=readed_count&order_type=desc

ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/socket

ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/bind

ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/listen

ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/accept



.....


ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/connect

저 수준 파일 입출력(Low-level File Access)과 파일 디스크립터(File Descriptor)

저 수준 파일 입출력(Low-level File Access)

: 리눅스 혹은 윈도우즈 자체에서 제공해 주는 파일 입출력 함수를 사용하여 파일을 관리(파일의 생성 및 삭제, 데이터 입력 및 출력) 하는 것을 의미함

            

파일 디스크립터(File Descriptor)

: 시스템으로부터 할당 받은 파일 또는 소켓에 부여된 정수를 의미

: 파일을 관리하기 위해서 모든 파일(파일, 소켓 표준 입력, 표준 출력)에 파일 디스크립터를 할당


- 파일과 소켓은 생성의 과정을 거쳐야 파일 디스크립터가 할당

- 위의 세 가지 입출력 대상은 별도의 생성과정을 거치지 않아도 프로그램이 실행되면 자동으로 할당



ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/open

- 첫 번째 인자는 파일의 이름 및 경로 정보

- 두 번째 인자는 파일의 오픈 모드 정보(파일의 특성 정보)



ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/close

- 파일 디스크립터를 인자로 전달하면 해당 파일은 종료

- 소켓을 닫을 때도 사용



ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/write

- fd : 데이터 전송 대상을 나타내는 파일 디스크립터 전달

- buf : 전송할 데이터가 저장된 버퍼의 주소 값 전달

- nbytes : 전송할 데이터의 바이트 수 전달


ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/read

- fd : 데이터 수신 대상을 나타내는 파일 디스크립터 전달

- buf : 수신할 데이터가 저장된 버퍼의 주소 값 전달

- nbytes : 수신할 데이터의 바이트 수 전달


윈도우 소켓을 위한 헤더와 라이브러리 설정

- 헤더파일 winsock2.h를 포함

- ws2_32.lib 라이브러리를 링크 시킴

- 윈속 사용을 위한 라이브러리 초기화 및 해제


ref URL : http://synch3d.com/winsock/WSAStartup.html

- wVersionRequested : 프로그래머가 사용할 윈속의 버전정보 전달

(상위 8비트 : 부 버전 정보, 하위 8비트 : 주 버전 정보)

- lpWSAData : WSADATA라는 구조체 변수의 주소 값 전달



ref URL : http://synch3d.com/winsock/WSACleanup.html

할당된 윈속 라이브러리는 윈도우 운영체제에 반환되면서 윈속 관련 함수의 호출이 불가능해짐

 


윈도우 기반 소켓관련 함수

ref URL : http://synch3d.com/winsock/socket.html

SOCKET socket ( int af, int type, int protocol );

ref URL : http://synch3d.com/winsock/bind.html

int bind ( SOCKET s, const struct sockaddr FAR * name, int namelen );

ref URL : http://synch3d.com/winsock/listen.html

int listen ( SOCKET s, int backlog );

ref URL : http://synch3d.com/winsock/accept.html

SOCKET accept ( SOCKET s, struct sockaddr FAR * addr, int FAR * addrlen );

ref URL : http://synch3d.com/winsock/connect.html

int connect ( SOCKET s, const struct sockaddr FAR * name, int namelen );

ref URL : http://synch3d.com/winsock/closesocket.html

int closesocket ( SOCKET s );



* 윈도우에서 시스템 함수의 호출을 통해서 파일을 생성할 때 '핸들'이라는 것을 반환함

* 윈도우에서의 핸들은 리눅스에서의 파일 디스크립터에 비교될 수 있음

* 리눅스에서는 파일 핸들과 소켓 핸들을 동일하게 취급(윈도우는 두 개를 구분함)

 


윈도우 기반 입출력 함수

ref URL : http://synch3d.com/winsock/send.html

- s : 데이터 전송 대상과의 연결을 의미하는 소켓의 핸들 값 전달

- buf : 전송할 데이터를 저장하고 있는 버퍼의 주소 값 전달

- len : 전송할 바이트 수 전달

- flags : 데이터 전송 시 적용할 다양한 옵션 정보 전달



ref URL : http://synch3d.com/winsock/recv.html

- s : 데이터 수신 대상과의 연결을 의미하는 소켓의 핸들 값 전달

- buf : 수신된 데이터를 저장하고 있는 버퍼의 주소 값 전달

- len : 수신할 수 있는 최대 바이트 수 전달

- flags : 데이터 수신 시 적용할 다양한 옵션 정보 전달

'Programming > Linux C/C++' 카테고리의 다른 글

소켓의 타입과 프로토콜의 설정  (0) 2014.09.01
주소체계와 데이터 정렬  (2) 2014.08.29
TCP 기반 서버/클라이언트 1  (0) 2014.08.29
linux socket summary  (0) 2014.06.15
리눅스 커널 내부 구조@kandroid  (0) 2014.06.03