2.1 생성과 해지

socket()

tcp나 udp 통신을 하기 위해 사용

 

파라미터

int socket(int protocolFamliy, int type, int protocol)

int protocolFamliy

소켓의 패밀리 결정

인터넷 프로토콜 패밀리 프로토콜을 사용하는 소켓 : PF_INET

int type

소켓의 형태를 지정(데이터 전송의 의미를 결정)

SOCK_STREAM : TCP

SOCK_DGRAM : UDP

int protocol

특정 종단간 프로토콜을 나타냄

tcp 스트림 소켓 : IPPROTO_TCP

udp 데이터그램 소켓 : IPPROTO_UDP

0으로 설정할 경우 : 지정된 프로토콜 패밀리 및 형태를 위한 디폴트 종단간 프로토콜 사용

반환값 : 음의 값이 아니면 성공, -1은 실패

 

close()

소켓을 종료할 때 호출하는 함수(할당된 자원 회수)

사용하지 않을 소켓을 파라미터로 지정

 

파라미터

int close(int socket)

반환값 : 성공시 0, 실패시 -1

 

2.2 주소지정

소켓을 사용하는 프로그램이 커널에 인터넷 주소와 포트를 지정하는 방법

클라이언트는 통신할 서버의 주소와 포트를 지정해야 함

 

소켓 API

소켓과 관련된 주소를 지정하기 위한 데이터 형태

sockaddr 구조체

struct sockaddr

{

unsigned short sa_family;    //패밀리 추가

char sa_data[14];              //패밀리 특정 주소 정보

}

 

...중간 생략...정리할 부분

 

* 2.2 주소 지정(p.9)

구조체 sockaddr_in 중요

위 구조의 도식화 -> p.7

 

2.3 TCP 클라이언트

서버측 함수

socket()

bind() 소켓과 포트번호를 결합시켜주는 것

listen()

accept() <- 서버는 여기까지 수행한 후 클라이언트 대기

receive() 클라이언트에서 데이터를 받음

send() 요청에 대해 응답

close() 통신 종료

 

클라이언트측 함수

socket()

connet() 서버로 연결

send() 데이터 전송

receive() 서버로부터 응답 받음

close() 통신 종료

 

connet()

파라미터

int connet(int socket, struct sockaddr *foreignAddress, unsigned int addressLength)

socket

socket()에 의해 생성된 식별자

foreignAddress

소켓 API가 총괄적임

sockaddr의 포인터로 선언

(struct sockaddr *) &echoServAddr : &echoServAddr의 주소로부터 struct sockadr *의 구조체를 갖는다

addressLength

주소 구조체의 길이를 나타냄

고정적으로 sizeof(struct sockaddr_in)으로 주어짐

 

send()

모든 데이터를 다 보낼 떄 까지 블록(block)되는 것

※ call by reference와 call by value의 차이점 알아보기

파라미터(call-by-reference 방식으로 주소만 가져다 씀)

int send(int socket, const void * msg, unsigned int msgLength, int flags)

socket

연결된 소켓의 식별자

msg

send()로 전송하는 메시지

msgLength

메시지의 길이, 바이트 단위

flags

소켓 호출의 디폴트 도작을 변경시키는 방법을 제공(디폴트 동작 : 0)

 

반환값

정상 : 전송한 데이터의 바이트 수

비정상 : -1

 

char *echoString의 의미 : 어떤 주소(echoString)로부터 시작하는 내용이 char형을 가진다.

 

recv()

어느 정도의 바이트가 이동될 때까지 블록(block)되는 것

파라미터

int recv(int socket, void * rcvBuffer, unsigned int bufferLength, int flags)

socket

연결된 소켓의 식별자

rcvBuffer

받은 데이터를 저장하는 버퍼를 가리킴

bufferLength

버퍼의 길이, 한 번에 받을 수 있는 최대 바이트 수

flags

소켓 호출의 디폴트 도작을 변경시키는 방법을 제공(디폴트 동작 : 0)

 

반환 값

정상 : 전송한 데이터의 바이트 수

비정상 : -1

close() 함수를 호출하여 종료

 

TCP Client

char *servIP 서버의 ip를 외부 인자를 char형으로 우선 받은 뒤 숫자로 바꿔서 struct sockaddr_in echoServAddr에서 사용함

 






 

'Network' 카테고리의 다른 글

멀티태스킹(Multi tasking)  (0) 2013.11.11
신호(Signals)  (0) 2013.11.04
UDPEchoServer  (0) 2013.10.30
소켓옵션들  (0) 2013.10.28
tcp/ip 소켓 프로그래밍 함수 소개  (0) 2013.09.16

+ Recent posts

티스토리 툴바