-
20140613 (TCP/IP)부산IT학원/스마트컨트롤러 2014. 6. 13. 10:44
80일차
------------------------------------------
TCP/IP 소켓 프로그래밍 기본 정보
------------------------------------------
--- 소켓 프로그래밍
우선 소스를 보자.
// 소켓 생성
iSock = socket(AF_INET, SOCK_STREAM, 0);
if(-1 == iSock)
{
fprintf(stderr, "소켓을 생성할 수 없습니다.\n");
return 10;
}
// 소켓 정보 부여
stAddr.sin_family = AF_INET;
stAddr.sin_port = htons(4016);
stAddr.sin_addr = inet_addr("192.168.10.250");
--- socket 함수
-- 원형
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
-- description
- domain
AF_UNIX, AF_LOCAL : 한 시스템 내에 프로그램끼리 통신. 로컬 통신
AF_INET : IPv4 인터넷 프로토콜
AF_INET6 : IPv6 인터넷 프로토콜
.... (등등 몇 가지 더 있음)
- type
SOCK_STREAM : TCP 통신
SOCK_DGRAM : UDP 통신
SOCK_RAW : 저수준에서 프로토콜을 직접 다룰 때 사용
... (등등 몇 가지 더 있음)
- protocol
보통 0을 넣음.
(몇 가지 옵션으로 사용한다는데 아직 뭔지는 잘 모르겠다.)
-- 리턴값
- 성공시 0보다 큰 정수 값.
- 소켓지정번호, socket descriptor라고 부른다.
- 소켓을 지시하여 소켓을 제어한다.
-- sockaddr_in
ip, port 정보를 저장하고 있는 구조체
위치 : /usr/include/linux/in.h
struct sockaddr_in
{
sa_family_t sin_family; /* Address family */
unsigned short int sin_port; /* Port number */
struct in_addr sin_addr; /* Internet address */
/* Pad to size of `struct sockaddr'. */
unsigned char __pad[ // 배열
__SOCK_SIZE__
- sizeof(short int)
- sizeof(unsigned short int)
- sizeof(struct in_addr)
];
/* 예전에 이 구조체를 개발할 때 이것 저것 시험용으로 사용하던 것인데
개발이 끝난 후 삭제해야하지 않아서 남은 부분으로 지금은 사용하지 않지만,
이 구조체를 사용할 때 이 영역까지 크기를 계산하여 사용한다.
무슨 파일 제어 관련 구조체가 있는데 이 구조체와 비슷하게 사용하려고???
크기를 같게 만들었다고 한다... 정확히는 모르겠고...
그래서 그 크기만큼 만들어 줘야해서 이 영역은 0으로 채워준다.
*/
};
typedef uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
};
--- 컴퓨터의 칩에 따라 Big Endian과 Little Endian 이 있는데
통신을 할 때에 칩에 따라 정보가 다르게 해석될 수 있기 때문에
네트워크 통신은 Big Endian으로 통일한다.
--- htons
#include <netinet/in.h>
uint16_t htons(uint16_t hostshort);
호스트 숫자를 네트워크 숫자 형태로 바꿔준다.
Little Endian을 Big Endian으로 바꿔준다는 뜻이다.
--- inet_addr
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
unsigned long int inet_addr(const char *cp);
"192.168.0.1" 처럼 문자형식 ip 주소를 숫자형식으로 변형해 준다.
'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글
20140618 (3 Hand shake, 4 way Hand shake, 프로세스) (0) 2014.06.18 20140616 (TCP/IP client, server 소스) (0) 2014.06.16 20140612 (초음파 모듈 Ultra Sonic) (0) 2014.06.12 20140611 (Network) (0) 2014.06.11 20140610 (TWI로 외부 EEPROM과 통신) (0) 2014.06.10