네트워크 프로그래밍
서로 떨어져 있는 호스트(컴퓨터)들 간에 데이터를 주고 받을 수 있도록 프로그램을 구현하는 것
이때 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 |
---|