안녕하세요
꼬로미입니다~ 오늘은 화요일!
오늘도 알차게 한번 달려봅니다~~~
오늘 포스팅은 윈도우 기반의 소켓관련 함수에 대해서 포스팅 합니다><
윈도우에서 사용하는 소켓함수도 리눅스에서 사용하는 함수와 크게 다르지 않아요
그럼 윈도우 소켓 함수들을 살펴볼게요
소켓 생성
#include <winsock2.h> SOCKET socket(int af, int type, int protocol); |
-> 소켓핸들 반환, 실패 시 INVALID_SOCKET 반환
IP주소와 포트번호 할당
#include <winsock2.h> int bind(SOCKET s, const struct sockaddr * name, int namelen); |
-> O 반환, 실패 시 SOCKET_ERROR 반환
연결요청 상태로 변경
#include <winsock2.h> int listen(SOCKET s, int backlog); |
-> O 반환, 실패 시 SOCKET_ERROR 반환
연결요청의 수락
#include <winsock2.h> SOCKET accept(SOCKET s, struct sockaddr * addr, int * addrlen); |
-> 소켓 핸들 반환, 실패 시 INVLID_SOCKET 반환
연결요청
#include <winsock2.h> int connect(SOCKET s, const struct sockaddr * name, int namelen); |
-> O 반환, 실패 시 SOCKET_ERROR 반환
소켓기반의 클라이언트 프로그램에서 연결요청을 하지요
소켓 닫기
#include <winsock2.h> int closesocket(SOCKET s); |
-> O 반환, 실패 시 SOCKET_ERROR 반환
리눅스에서는 close 함수를 사용하지만
윈도우에서는 closesocket함수를 사용합니다
윈도우 소켓 기반 입출력 함수
리눅스는 파일 입출력 함수인 read, write를 이용해 데이터도 송수신하는데
윈도우는 파일 입출력 함수와 소켓 입출력 함수가 구분되어 리눅스의 read, write 함수를 사용할 수 없어
입출력 함수로 send와 recv 함수를 사용합니다
파일 전송 send 함수
#include <winsock2.h> int send(SOCKET s, const char * buf, int len, int flags); |
-> 전송된 바이트 수 반환, 실패 시 SOCKET_ERROR 반환
s : 데이터 전송 대상과 연결을 의미하는 소켓 핸들 값
buf : 전송할 데이터를 저장하고 있는 버퍼의 주소 값
len : 전송할 바이트 수
flags : 데이터 전송시 적용할 옵션 정보
파일 수신 recv 함수
#include <winsock2.h> int recv(SOCKET s, const char * buf, int len, int flags); |
-> 수신한 바이트 수(EOF 시 0), 실패 시 SOCKET_ERROR 반환
s : 데이터 수신 대상과 연결을 의미하는 소켓 핸들 값
buf : 수신된 데이터를 저장할 버퍼 주소 값
len : 수신할 최대 바이트 수
flags : 데이터 수신 시 적용할 다양한 옵션 정보
윈도우 소켓과 리눅스 소켓을 비교해서 보면
반환형과 매개변수들이 조금씩 차이가 있지만 기능별로 함수의 이름이 거의 같은 것을 알 수 있어요
리눅스에서는 파일생성, 소켓생성에 파일디스크립터가 반환되는데
윈도우에서는 시스템 함수 호출을 통해 파일 생성시 핸들(handle)이라는 것을 반환해요
'Study > Programming' 카테고리의 다른 글
안드로이드 구조, 운영체제의 중요 요소! (0) | 2014.03.29 |
---|---|
안드로이드 프로그래밍 시작! 안드로이드 특징은? (0) | 2014.03.28 |
윈도우기반으로 구현하기(헤더, 라이브러리 설정, 초기화) (0) | 2014.03.24 |
리눅스 기반의 파일조작함수! (0) | 2014.03.23 |
네트워크 프로그래밍 그리고 소켓생성과정, 함수! (0) | 2014.03.22 |