Socket
소켓은 네트워크로 연결되어 있는 컴퓨터의 통신의 접점에 위치한 통신 객체다. 네트워크 통신을 위한 프로그램들은 소켓을 생성하고, 이 소켓을 통해서 서로 데이터를 교환한다. 인터넷 소켓은 다음과 같은 요소들로 구성되어 있다.
인터넷 프로토콜(TCP, UDP, raw IP), 로컬 IP 주소, 로컬 포트, 원격 IP 주소, 원격 포트인터넷 소켓은 크게 두개의 타입으로 분류할 수 있다.
UDP 프로토콜을 사용하는 경우, TCP 프로토콜을 사용하는 경우
Socket 주소 구조체
Socket을 이용한 프로그래밍에서는 Socket의 종류와 IP주소, 포트번호 등을 지정하기 위한 구조체를 사용한다.
인터넷 소켓
#include <netinet/in.h>
struct in_addr{
in_addr_t s_addr; // 32비트 IP주소
};
struct sockaddr_in{
unit8_t sin_len; // unsigned int 8bit
sa_family_t sin_family; // 16bit int
in_port_t sin_port; // unsigned 16bit int
structin_addr sin_addr;
char sin_zero[8];
};
|
sin_len : 구조체의 크기 , 보통 설정하지 않는다.
sin_family : AF_INET
(AF_UNIX – 유닉스 파일 주소 체계 , AF_NS – 제녹스 주소 체계)
sin_port : 사용할 포트 번호
sin_addr : IP주소(구조체)
sin_zero : 패팅처리(memset/bzero로 0으로 채워야 함)
|
Network Device Driver
소켓 프로그래밍에 사용되는 함수들을 서버와 클라이언트로 구분하여 살펴 볼 수 있다. 인터넷 소켓(AF_INET)과 TCP(SOCK_STREAM)을 사용하여 통신하는 프로그램을 구현하면 다음과 같다.
Socket Functions
– socket() : 통신에 사용할 소켓을 개설 , 소켓 번호를 리턴번호를 받는다.
– bind() : 리턴된 소켓 번호와 자신의 소켓주소를 연결시켜 준다.
– listen() : Client로부터 연결 요청을 기다리는 수동 대기모드 시스템을 부른다.
– accept() : Client 로부터 연결 요청이 들어오면 이를 처리하기 위한 시스템을 부른다.
– connect() : Client 가 서버에 연결 요청을 하는 시스템을 부른다.
– close() : 생성 된 소켓을 제거 하는 시스템을 부른다.
– send() : TCP에서 데이터를 송신 하는 시스템을 부른다.
– sendto() : UDP에서 데이터를 송신하는 시스템을 부른다.
Int send(SOCKET s,
const char* buf,
int len,
int flags);
|
Int sendto(SOCKET s,
const char* buf,
int len,
int flags,
const struct sockaddr* to,
int tolen);
|
s : 통신을 위한 소켓
buf : 보낼 데이터를 담고 있는 버퍼
len : 보낼 데이터를 담고 있는 버퍼의 크기
flags : sendto()함수의 동작을 바꾸는 옵션이나 일반적으로 0을 사용
to : 목적지 주소를 담고 있는 소켓 주소 구조체 변수의 주소를 대입
tolen : 소켓 주소 구조체의 크기
| |
– recv() : TCP에서 데이터를 수신 하는 시스템을 부른다.
– recvfrom() : UDP에서 데이터를 수신하는 시스템을 부른다.
Int recv(SOCKET s,
const char* buf,
int len,
int flags);
|
Int recvfrom(SOCKET s,
char *buf,
int len,
int flags,
struct sockaddr* from
int * fromlen);
|
s : 통신을 위한 소켓
buf : 받은 데이터를 담고 있는 버퍼
len : 수신 버퍼로부터 복사할 데이터 크기
flags : 함수의 동작을 바꾸는 옵션이나 일반적으로 0을 사용
from : 송신자 주소를 소켓 주소 구조체 변수에 저장
fromlen : 소켓 주소 구조체의 크기
| |

댓글 없음:
댓글 쓰기