본문 바로가기
코스웨어/15년 스마트컨트롤러

20151130 - 권오민 - ARM ASSEMBLY 3일차/WinSock 1일차

by 알 수 없는 사용자 2015. 11. 30.
728x90
반응형

WinSock

◉WinSock

- 참고 사이트

http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/win_network_prog/doc/winsock_basic

http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/TCP_IP/IPv6/IPv6Prog

http://cafe.naver.com/devctrl/441

- 참고 PDF 파일


bs16_socket.pdf


- BSD SOCKET을 기반으로 하며, 유닉스 기반의 소켓을 윈도우 환경에 맞게 구성한 API이다.

●WSAStartup() 함수, WSACleanup() 함수

- winsock을 사용하겠다는 뜻이다.

- 반드시 사용되어야 하는 함수이다.

        - 이 점이 리눅스와 가장 큰 다른 점이다.

- gcc 컴파일을 하게 될 경우 실제로는 다음과 같이 컴파일 옵션을 입력해주어야 한다.

        - gcc -o server server.c -lsocket

- WSAStartip 함수 원형.

        - int WSAStartup( WORD wVersionRequested, WSADATA* lpWSAData)

                - 인자.

                        - 1. MAKEWORD 매크로를 사용하여 버전을 설정한다.

                        - 2. 윈속 시스템 정보를 반환한다.

                                - WSADATA 구조체 변수를 0으로 초기화 하고 사용하는 것이 좋다.

                - 반환 값.

                        - 성공하면 ‘0’을 반환하고, 실패하면 에러코드를 반환한다.

●socket() 함수, closesocket() 함수

- 네트워크 통신의 주체인 socket을 생성 및 제거한다.

- win32도 socket함수가 존재한다.

        - 사용법은 동일하다.

- socket 함수 원형.

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

                - 인자.

                        - 1. TCP, UDP를 사용하려면 AF에 'AF_INET' 상수를 설정한다.

                        - 2. 소켓의 통신 타입을 설정한다.

                                - TCP에서는 type를 SOCK_STREAM으로  설정한다.

                        - 3. 소켓의 프로토콜이다.

                                - 0으로 설정하게 되면 호출한 쪽이 사용하는 프로토콜을 선택한다.

                - 반환 값.

                        - 실패하면 INVALID_SOCKET을 반환한다.

●SOCKADDR_IN 구조체

- 서버의 IP와 PORT의 정보를 위의 구조체에 저장한다.

- 구조체 원형.

        - struct sockaddr_in {

                                short   sin_family;

                                u_short sin_port;

                                struct  in_addr sin_addr;

                                char    sin_zero[8];

                                };

                - sin_family가 AF_INET이면 인터넷 주소 체계정보를 가지는 구조체가 사용된다.

●bind() 함수

- 소켓에 구조체 정보가 들어앉는다.

        - IP, PORT를 소켓에 연결한다.

                - sAddr은 필요가 없다.

- bind 함수 원형.

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

                - 반환 값.

                        - 실패하면 SOCKET_ERROR을 반환한다.

●listen() 함수

- 외부로부터 들어오는 접속을 감지하기 위해 특정 소켓이 사용된다는 것을 시스템에 알려준다.

- listen 함수 원형.

        - int listen(SOCKET s, int backlog)

                - 인자.

                        - 1. 소켓이다.

                        - 2. 대기하는 접속을 위한 큐의 최대 길이이다.

                - 반환 값.

                        - 실패하면 SOCKET_ERROR을 반환한다.

●accept() 함수

- 클라이언트가 접속할 때까지 기다리고, 접속하면 통신할 수 있는 소켓을 만들어준다.

- accept 함수 원형.

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

                - 인자.

                        - 1. listen 소켓을 받는다.

                        - 2. 클라이언트의 IP, PORT등을 저장할 구조체이다.

                        - 3. 구조체의 크기이다.

                - 반환 값.

                        - 성공하면 클라이언트와 데이트를 송/수신할 소켓을 반환한다.

                        - 실패하면, 유효하지 않은 소켓 상수 INVALID_SOCKET를 반환한다.

●recv() 함수, send() 함수

- recv 함수.

        - 소켓, 버퍼 주소, 버퍼의 최대 크기 등을 인수로 전달하면, 데이터의 수신이 있을때까지 기다린다.

        - recv 함수 원형.

                - int recv(SOCKET s, char FAR* buf, int len, int flags)

                        - 반환 값.

                                - 성공하면 수신된 바이트 수를 반환한다.

                                - 실패하면 SOCKET_ERROR을 반환한다.

- send 함수.

        - 함수에 접속한 소켓, 버퍼, 데이터의 길이, 동작에 관한 flag를 설정하고, 데이터가 전송된다.

        - send 함수 원형.

                - int send(SOCKET s, const char FAR* buf, int len, int flags)

                        - 반환 값.

                                - 성공하면 0을 반환한다.

                                - 실패하면 SOCKET_ERROR을 반환한다.

728x90