본문 바로가기
프로그래밍

소켓 프로그래밍

by Cat Tool 2016. 8. 8.
반응형


네트워크 프로그래밍


  서로 떨어져 있는 호스트(컴퓨터)들 간에 데이터를 주고 받을 수 있도록 프로그램을 구현하는 것

이때 TCP/IP를 이용하여 호스트간의 연결을 할때 사용하는 것을 소켓이라 한다



* 서버 클라이언트 동작 방식


TCP server                                    TCP client 


socket()                                         socket()


bind()


listen()

   <--  connect()

accept()-->


read()                                             read()


write()                                            write()


close()                                            close()



소켓의 생성

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

성공시 파일 디스크립트 반환


소켓 주소 IP, PORT할당

int bind(int sokfd, struct sockaddr *myaddr, socklen_t addrlen);


대기 모드로 변경

int listen(int  sockfd, int backlog);


연결 요청에 수락

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);



파일 디스크립트 소켓 핸들


Client


socket()


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


read();



유닉스에서 구현을 먼져하고 원도우쪽으로 넘어왔기에 리눅스쪽이 자료가 방대하고 편리


리눅스와 반환형 다름


송수신 방법에 따라 윈도우랑 리눅스 다름

원도우 파일 소켓 구분

리눅스 소켓 파일 같다





* 저수준 파일 입출력

ANSI표준 아닌 운영체제에서 제공하는 함수기반

리눅스에서 소켓을 파일로 간주

ANSI : American National Standard Institute(미국 표준 시스템)


* 파일 디스크립터

운영체제가 만든 파일을 구분하기 위한 숫자

0 : Standard Input

1 : Standard Output

2 : Standard Error


*0~2는 이미 할당되어있고 3부터 할당




*파일 열기 닫기

int open(const char *path, int flag);

오픈 모드

O_CREAT             필요하면 파일을 생성

O_TRUNC            기존 데이터 전부 삭제

O_APPEND           기본 데이터 보전하고 뒤에 이어서 저장

O_RDONLY         일기 전용

O_WRONLY        쓰기 전용

O_RDWR            읽기 쓰기 겸용

성공시 파일디스크립터 반환


int close(int fd);


*파일 쓰기 읽기

ssize_t write(int fd, const void * buf, size_t nbytes);

ssize_t read(int fd, void *buf, size_t nbytes);




*원도우 기반 소켓함수

#include<windsock2.h>


int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData)


int WSACleanup(void);



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

int closesocket(SOCKET s);



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

int recv(SOCKET s, const char *buf, int len, int flags);


반응형

'프로그래밍' 카테고리의 다른 글

java Abbreviation data  (0) 2012.09.11